diff -Nrcpad gcc-16-20250713/LAST_UPDATED gcc-16-20250720/LAST_UPDATED
*** gcc-16-20250713/LAST_UPDATED	Sun Jul 13 22:33:14 2025
--- gcc-16-20250720/LAST_UPDATED	Sun Jul 20 22:33:13 2025
***************
*** 1 ****
! Obtained from git: master revision 4d7baa94a48c27030c8ffcfaf3dd187be09903a9
--- 1 ----
! Obtained from git: master revision 7083aeaef5b6d8be1ae419b834e8e56d90026ace
diff -Nrcpad gcc-16-20250713/MD5SUMS gcc-16-20250720/MD5SUMS
*** gcc-16-20250713/MD5SUMS	Sun Jul 13 22:33:19 2025
--- gcc-16-20250720/MD5SUMS	Sun Jul 20 22:33:23 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20250713.tar.xz 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
--- 1,5 ----
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20250720.tar.xz 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
*************** e8dc5897a89c1245862d41d180276bed  Change
*** 25,31 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 453c26cc2095252f1d959d42e8e564c3  LAST_UPDATED
  df653c6054ec83e9f6460a9da96b41a1  MAINTAINERS
  95166ed050922b15d201d1fa647b5872  Makefile.def
  7dcc983bfbcda6838b504185562b60a3  Makefile.in
--- 25,31 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 3cad30e66df508f884631ac40dacc241  LAST_UPDATED
  df653c6054ec83e9f6460a9da96b41a1  MAINTAINERS
  95166ed050922b15d201d1fa647b5872  Makefile.def
  7dcc983bfbcda6838b504185562b60a3  Makefile.in
*************** e2dc6b4fd62b77bff96b7951ef74f78f  config
*** 154,160 ****
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  9d9c5508a65175be5f9e10721e55ebbc  configure
  82e46c5338f6449fa0a149b6adf12797  configure.ac
! 4bd99f0722ac8367317c84c8b662b42e  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
--- 154,160 ----
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  9d9c5508a65175be5f9e10721e55ebbc  configure
  82e46c5338f6449fa0a149b6adf12797  configure.ac
! 4fefbefd6a3ecacecf1015f446c93bbd  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
*************** d577ea19d05f19a8364f73c9901223b7  contri
*** 200,206 ****
  0b845b0a18e1acc7cc4d441b4f0cb449  contrib/gcc-changelog/test_email.py
  6662a65218b0a11d673a65656b98d821  contrib/gcc-changelog/test_patches.txt
  983cf4f7b54ddd2b8962dda15b74d10a  contrib/gcc-git-customization.sh
! 5c76e763f702a9ff0203a12551e348d0  contrib/gcc.doxy
  e1a3ba387b3d9bff3516856146cea62d  contrib/gcc_build
  a80a0165b2b8f366a31514e30720bd21  contrib/gcc_update
  f1df2625cad7941fd494fda00a9ad5f1  contrib/gen_autofdo_event.py
--- 200,206 ----
  0b845b0a18e1acc7cc4d441b4f0cb449  contrib/gcc-changelog/test_email.py
  6662a65218b0a11d673a65656b98d821  contrib/gcc-changelog/test_patches.txt
  983cf4f7b54ddd2b8962dda15b74d10a  contrib/gcc-git-customization.sh
! d0b0f3c6beb762cbd110e36c97a75ad7  contrib/gcc.doxy
  e1a3ba387b3d9bff3516856146cea62d  contrib/gcc_build
  a80a0165b2b8f366a31514e30720bd21  contrib/gcc_update
  f1df2625cad7941fd494fda00a9ad5f1  contrib/gen_autofdo_event.py
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 516,522 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! e646c12b21146ad9417a0040d4fd0316  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 516,522 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 4d192ecda348f324849334ef17c66998  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 553,571 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 1b7ea6d0a94568165528a4c374673396  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! 1dee83e138b11b92a49c16e5f5d65dbe  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
  18db4664d7e31002aac43ebcf20e075f  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 17eee95b53197523904a583b4f0e705a  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 553,571 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 85db5c642505f625114629577b73daef  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! 5bba15cf4c6ebd67fb7a98f13898867a  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
  18db4664d7e31002aac43ebcf20e075f  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 994f00acd36b1cebdfa30aefb58e9b76  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** f1c71b64e1c84e240c7b5aea7331a32a  gcc/ad
*** 720,726 ****
  22b295629c6dacd0ec2e5475a6c7b4e6  gcc/ada/einfo-utils.adb
  fdeb0b11ed378cc91d79b0c88e2d35a0  gcc/ada/einfo-utils.ads
  4f882a8b5e78253d5838b1a83e4af5bb  gcc/ada/einfo.adb
! 92c1e2aa0f1c0cff591c71b4d07df323  gcc/ada/einfo.ads
  9fb4fb23a55081d07dc554eeb3253f91  gcc/ada/elists.adb
  1d7f8772477453dee268f8697433a589  gcc/ada/elists.ads
  2d6cb36d45dda0bf32d01725709f0007  gcc/ada/elists.h
--- 720,726 ----
  22b295629c6dacd0ec2e5475a6c7b4e6  gcc/ada/einfo-utils.adb
  fdeb0b11ed378cc91d79b0c88e2d35a0  gcc/ada/einfo-utils.ads
  4f882a8b5e78253d5838b1a83e4af5bb  gcc/ada/einfo.adb
! 25080b42fae8a4be76b3e639ac9182f5  gcc/ada/einfo.ads
  9fb4fb23a55081d07dc554eeb3253f91  gcc/ada/elists.adb
  1d7f8772477453dee268f8697433a589  gcc/ada/elists.ads
  2d6cb36d45dda0bf32d01725709f0007  gcc/ada/elists.h
*************** e51a9a19184b2a73f27bb944998177e6  gcc/ad
*** 745,751 ****
  8745064abd42114e7f2f12824abd58f8  gcc/ada/eval_fat.adb
  04c8399e5b8f5b974be325af4fc5793b  gcc/ada/eval_fat.ads
  5062429d8789169d01db0423985a5e99  gcc/ada/exit.c
! a4abb3ce19c57fb795cf3e09fc34ea51  gcc/ada/exp_aggr.adb
  738bfb6669a1b696ef62dbecd858300a  gcc/ada/exp_aggr.ads
  f5cfbe3c80cc2c7ded2440a52b2b9cf0  gcc/ada/exp_atag.adb
  17872534d797a09463e33092ff3c4b9c  gcc/ada/exp_atag.ads
--- 745,751 ----
  8745064abd42114e7f2f12824abd58f8  gcc/ada/eval_fat.adb
  04c8399e5b8f5b974be325af4fc5793b  gcc/ada/eval_fat.ads
  5062429d8789169d01db0423985a5e99  gcc/ada/exit.c
! 184f7baa67cb2c59df10301a49ccb424  gcc/ada/exp_aggr.adb
  738bfb6669a1b696ef62dbecd858300a  gcc/ada/exp_aggr.ads
  f5cfbe3c80cc2c7ded2440a52b2b9cf0  gcc/ada/exp_atag.adb
  17872534d797a09463e33092ff3c4b9c  gcc/ada/exp_atag.ads
*************** cd451a03d3f6e30e0aed13ae4ca5d48f  gcc/ad
*** 768,774 ****
  ef982b9647c35560ae7ff386e547bd16  gcc/ada/exp_ch4.ads
  d8ee1a2097135d84f7788fd2ece2f305  gcc/ada/exp_ch5.adb
  f0c7dc0ade3f9639e946e709a9288f31  gcc/ada/exp_ch5.ads
! cd7e7e16d94c374290a9743face6dfd9  gcc/ada/exp_ch6.adb
  c22c79787fe7516adb5a4c55613fb6ab  gcc/ada/exp_ch6.ads
  323962e06b80a131d23f743cae560e49  gcc/ada/exp_ch7.adb
  31ee5e50c565d4788d9b794acb5bfebb  gcc/ada/exp_ch7.ads
--- 768,774 ----
  ef982b9647c35560ae7ff386e547bd16  gcc/ada/exp_ch4.ads
  d8ee1a2097135d84f7788fd2ece2f305  gcc/ada/exp_ch5.adb
  f0c7dc0ade3f9639e946e709a9288f31  gcc/ada/exp_ch5.ads
! a52340b3cccc05ad9853052b91719ae3  gcc/ada/exp_ch6.adb
  c22c79787fe7516adb5a4c55613fb6ab  gcc/ada/exp_ch6.ads
  323962e06b80a131d23f743cae560e49  gcc/ada/exp_ch7.adb
  31ee5e50c565d4788d9b794acb5bfebb  gcc/ada/exp_ch7.ads
*************** b350a6fd65cafe8bd47dc42192437310  gcc/ad
*** 848,855 ****
  34dc74bdcfc4940dc904bd9a4aae2535  gcc/ada/gcc-interface/trans.cc
  80875110ccbd5107800053583558ac3a  gcc/ada/gcc-interface/utils.cc
  7b0d708fd189018a87468ef844fc3811  gcc/ada/gcc-interface/utils2.cc
! 4ae4ffa02d30e6cf8159a9e97a3fa641  gcc/ada/gen_il-fields.ads
! 07f86d40a95ee4d2a50f6c5853bb1cc8  gcc/ada/gen_il-gen-gen_entities.adb
  117d059d852b91f0ca5bd704d53e66da  gcc/ada/gen_il-gen-gen_nodes.adb
  fa07e4c6240b8cfff6d7d98112fee236  gcc/ada/gen_il-gen.adb
  c979a98c6b57608c79d578871fa0c58a  gcc/ada/gen_il-gen.ads
--- 848,855 ----
  34dc74bdcfc4940dc904bd9a4aae2535  gcc/ada/gcc-interface/trans.cc
  80875110ccbd5107800053583558ac3a  gcc/ada/gcc-interface/utils.cc
  7b0d708fd189018a87468ef844fc3811  gcc/ada/gcc-interface/utils2.cc
! e76ed7d8c0660e26f7c07afe04f09ed9  gcc/ada/gen_il-fields.ads
! ae086e9a20282e38e6223b0ef67776f3  gcc/ada/gen_il-gen-gen_entities.adb
  117d059d852b91f0ca5bd704d53e66da  gcc/ada/gen_il-gen-gen_nodes.adb
  fa07e4c6240b8cfff6d7d98112fee236  gcc/ada/gen_il-gen.adb
  c979a98c6b57608c79d578871fa0c58a  gcc/ada/gen_il-gen.ads
*************** ea767dec8fd43eff8cefde339b3a7d04  gcc/ad
*** 909,915 ****
  8c188167519fcde228e7406b86ad3c4f  gcc/ada/indepsw.ads
  bba82adc9fdf0fc509eaae42d763da79  gcc/ada/init.c
  c45e7a63e33e0bdb85ff3e50d0220aa4  gcc/ada/initialize.c
! 9194e6605ee95b8c1d6e5607b27683c9  gcc/ada/inline.adb
  91cdabaa5b703885dad7b8dc5df17446  gcc/ada/inline.ads
  8d71a48789cbec10ceabfe68770803c1  gcc/ada/itypes.adb
  f62835b6268c11341ad683753a9d7acd  gcc/ada/itypes.ads
--- 909,915 ----
  8c188167519fcde228e7406b86ad3c4f  gcc/ada/indepsw.ads
  bba82adc9fdf0fc509eaae42d763da79  gcc/ada/init.c
  c45e7a63e33e0bdb85ff3e50d0220aa4  gcc/ada/initialize.c
! ccdd23e44dfe2e6b8e78198004c59b87  gcc/ada/inline.adb
  91cdabaa5b703885dad7b8dc5df17446  gcc/ada/inline.ads
  8d71a48789cbec10ceabfe68770803c1  gcc/ada/itypes.adb
  f62835b6268c11341ad683753a9d7acd  gcc/ada/itypes.ads
*************** e364f4e3ae92066699cc93a8f7b828c1  gcc/ad
*** 2901,2907 ****
  6e34ce648cfc10b24c12b68e0e59dcb8  gcc/ada/sem_ch10.ads
  5980a02146588bf0e31ced2382290670  gcc/ada/sem_ch11.adb
  1b6f89866a5d427002df059be3847d62  gcc/ada/sem_ch11.ads
! d7c35f5fb6e436afe84cb0f385f59af3  gcc/ada/sem_ch12.adb
  b0a3315dce9de8e3bbbb3682c8b0e2ff  gcc/ada/sem_ch12.ads
  0eef1fb5bf49a8878f6e3e24d19ba3f1  gcc/ada/sem_ch13.adb
  42a7b1073e168e8be85f2203fbddd148  gcc/ada/sem_ch13.ads
--- 2901,2907 ----
  6e34ce648cfc10b24c12b68e0e59dcb8  gcc/ada/sem_ch10.ads
  5980a02146588bf0e31ced2382290670  gcc/ada/sem_ch11.adb
  1b6f89866a5d427002df059be3847d62  gcc/ada/sem_ch11.ads
! e30a1ad4da7b8d2395043452e6ed5ec0  gcc/ada/sem_ch12.adb
  b0a3315dce9de8e3bbbb3682c8b0e2ff  gcc/ada/sem_ch12.ads
  0eef1fb5bf49a8878f6e3e24d19ba3f1  gcc/ada/sem_ch13.adb
  42a7b1073e168e8be85f2203fbddd148  gcc/ada/sem_ch13.ads
*************** b0a3315dce9de8e3bbbb3682c8b0e2ff  gcc/ad
*** 2909,2919 ****
  2471d629be4739ff5135aa87a2ec9166  gcc/ada/sem_ch2.ads
  9f4770487c9a532babeaf5e8fd3730d6  gcc/ada/sem_ch3.adb
  a9694f8bc09b47075cae226e570e02f0  gcc/ada/sem_ch3.ads
! 5365888d72824ee41032155dd52ef502  gcc/ada/sem_ch4.adb
  adba03aae1f439b9e9db8cea05d8e03f  gcc/ada/sem_ch4.ads
  0135ad6cef623899ddfc58bedb11e1bb  gcc/ada/sem_ch5.adb
  ec8d5a42c27c46e4969c16d6e18ed276  gcc/ada/sem_ch5.ads
! b0ae0f2942b77336c4ca1a3dcfd2fdf4  gcc/ada/sem_ch6.adb
  51bdafe51a1cae21d9fba800fcd7a572  gcc/ada/sem_ch6.ads
  3c7c6e6b95a9cddb1d6f1a42a5962379  gcc/ada/sem_ch7.adb
  24a1265e6a25756265643858abcf7ded  gcc/ada/sem_ch7.ads
--- 2909,2919 ----
  2471d629be4739ff5135aa87a2ec9166  gcc/ada/sem_ch2.ads
  9f4770487c9a532babeaf5e8fd3730d6  gcc/ada/sem_ch3.adb
  a9694f8bc09b47075cae226e570e02f0  gcc/ada/sem_ch3.ads
! e1f6f3ce38bcab22f09e5181b8a18af2  gcc/ada/sem_ch4.adb
  adba03aae1f439b9e9db8cea05d8e03f  gcc/ada/sem_ch4.ads
  0135ad6cef623899ddfc58bedb11e1bb  gcc/ada/sem_ch5.adb
  ec8d5a42c27c46e4969c16d6e18ed276  gcc/ada/sem_ch5.ads
! 40cb10bb8fee99563f3a61286ef27f63  gcc/ada/sem_ch6.adb
  51bdafe51a1cae21d9fba800fcd7a572  gcc/ada/sem_ch6.ads
  3c7c6e6b95a9cddb1d6f1a42a5962379  gcc/ada/sem_ch7.adb
  24a1265e6a25756265643858abcf7ded  gcc/ada/sem_ch7.ads
*************** db6f5a37bd59fd83ff3286e71ab985fe  gcc/ad
*** 2947,2953 ****
  89d73c108bd8921f6d6cd84d98726ea5  gcc/ada/sem_smem.ads
  d0a2f5b2f65a874363f7fbe2b9a79f8b  gcc/ada/sem_type.adb
  dee50852181adfada17fb5b7423ed973  gcc/ada/sem_type.ads
! b2fb09d8a8d984cd4ec206933cdd21c4  gcc/ada/sem_util.adb
  5c2fd7785d1403e27f5bc0ed4d3b8235  gcc/ada/sem_util.ads
  9668d6a37fe84f41a81a7ffcb66d5ecc  gcc/ada/sem_warn.adb
  441e0f80657ef72324e40dd20cebfc82  gcc/ada/sem_warn.ads
--- 2947,2953 ----
  89d73c108bd8921f6d6cd84d98726ea5  gcc/ada/sem_smem.ads
  d0a2f5b2f65a874363f7fbe2b9a79f8b  gcc/ada/sem_type.adb
  dee50852181adfada17fb5b7423ed973  gcc/ada/sem_type.ads
! 6724923013ceca6c44a581f614941665  gcc/ada/sem_util.adb
  5c2fd7785d1403e27f5bc0ed4d3b8235  gcc/ada/sem_util.ads
  9668d6a37fe84f41a81a7ffcb66d5ecc  gcc/ada/sem_warn.adb
  441e0f80657ef72324e40dd20cebfc82  gcc/ada/sem_warn.ads
*************** b1eaff871eb559b799ef7fe2960e86f9  gcc/ad
*** 3012,3018 ****
  9f45bf3ee4cf0a6b06c0b5cc6a4830a7  gcc/ada/targext.c
  452605cc8bfabb79cb2938ed48290217  gcc/ada/targparm.adb
  d9d7a0f9b8ac29d8f1e477d6b53076c1  gcc/ada/targparm.ads
! 3091d71896ba4a230e82f11fca0c715a  gcc/ada/tbuild.adb
  3820c42d29e72797dcd57daf35fe7e58  gcc/ada/tbuild.ads
  7180c008001620663d18e4ca13bb09d3  gcc/ada/tempdir.adb
  6f122fca818bdd0608fc8391dbb411ba  gcc/ada/tempdir.ads
--- 3012,3018 ----
  9f45bf3ee4cf0a6b06c0b5cc6a4830a7  gcc/ada/targext.c
  452605cc8bfabb79cb2938ed48290217  gcc/ada/targparm.adb
  d9d7a0f9b8ac29d8f1e477d6b53076c1  gcc/ada/targparm.ads
! 0aa22862767f466615555fb4238ed5c8  gcc/ada/tbuild.adb
  3820c42d29e72797dcd57daf35fe7e58  gcc/ada/tbuild.ads
  7180c008001620663d18e4ca13bb09d3  gcc/ada/tempdir.adb
  6f122fca818bdd0608fc8391dbb411ba  gcc/ada/tempdir.ads
*************** eeb42b412edc2884a4c60d6f38f7473b  gcc/ar
*** 3164,3175 ****
  3b696031376017661bf8d237ffc7c068  gcc/asan.h
  c77616ec7ed7ec81357de9544f955910  gcc/attr-fnspec.h
  3d7a71537ed817b2c8f0c30cd04c9201  gcc/attr-urls.def
! 0e1b67f20b5d137d4e1d6915400e406b  gcc/attribs.cc
! 1bdf6723b4c88b5b1495f718e4dd00c7  gcc/attribs.h
  54fb3cb1cab63227c50a50819ea1a3c3  gcc/auto-inc-dec.cc
  e003ba9e4ec9ae725b549c687a871b0b  gcc/auto-profile.cc
  750f46d563af89307c9b19bbb4a2dd18  gcc/auto-profile.h
! ad2d5f7f83620f81560675456886e45d  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
  db748cbed8c442a442779d8d857a3ae4  gcc/backend.h
  d6b885b0c4ea7cf856ba4b84021613ce  gcc/basic-block.h
--- 3164,3176 ----
  3b696031376017661bf8d237ffc7c068  gcc/asan.h
  c77616ec7ed7ec81357de9544f955910  gcc/attr-fnspec.h
  3d7a71537ed817b2c8f0c30cd04c9201  gcc/attr-urls.def
! 7a214714d8af2c54f02789cfcb196d6c  gcc/attribs.cc
! 6e6a84b213adacaae73a6cb01cc52027  gcc/attribs.h
  54fb3cb1cab63227c50a50819ea1a3c3  gcc/auto-inc-dec.cc
+ c25bbcb70f43e3c72a329043adf2c6c2  gcc/auto-obstack.h
  e003ba9e4ec9ae725b549c687a871b0b  gcc/auto-profile.cc
  750f46d563af89307c9b19bbb4a2dd18  gcc/auto-profile.h
! 9c743810c270d7b034382910a1b1efd1  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
  db748cbed8c442a442779d8d857a3ae4  gcc/backend.h
  d6b885b0c4ea7cf856ba4b84021613ce  gcc/basic-block.h
*************** fe292df4b7f3e3ef7c0b8305084b6844  gcc/bi
*** 3184,3208 ****
  9519cf786b112194737e7d0c3534a854  gcc/builtins.cc
  4928906d86168cbc863e309bdb3ec391  gcc/builtins.def
  bd61b50b47560dc1324bf507bea5d87e  gcc/builtins.h
! 3d3004cb3d5e97656aeec780958c5a6a  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  823fe168bb0f63a39de62d9f0251a1b5  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
! ac02f9b746c0439c3c4ebd2baeb312e3  gcc/c-family/c-attribs.cc
  7c7087d355210f92a3e615ce76d0675f  gcc/c-family/c-common.cc
  c273c4ad95ccdbfe677146505900c62e  gcc/c-family/c-common.def
  19fb19e4311805f52f48f30e7873ad2e  gcc/c-family/c-common.h
  c1aa039e875437c70f79787c2752305d  gcc/c-family/c-cppbuiltin.cc
  01db2d5cca29943c49bb372f2137d874  gcc/c-family/c-dump.cc
! 3406e6deaa6e96339c86962c3c82e169  gcc/c-family/c-format.cc
! 89a27efffabf06afdd7dee7495d2591c  gcc/c-family/c-format.h
  33e75548501d8294a77fd654bc8d4d39  gcc/c-family/c-gimplify.cc
  4d15aede5a4841d6489aa40ad1304c00  gcc/c-family/c-indentation.cc
  a4b7179d2e948bb7586a9143fbe05593  gcc/c-family/c-indentation.h
  4c01c042c599ee5c7b21aeb2c0cccbe8  gcc/c-family/c-lex.cc
  c880dc584a0fd4908e5df33dd81137b8  gcc/c-family/c-objc.h
! 552a5c4a255884ae21e74aa18e1083d3  gcc/c-family/c-omp.cc
! 6e1d234b922f7d65240ad0902f7cdb74  gcc/c-family/c-opts.cc
  2f1a14531d3a436ca9f4aad2812c3898  gcc/c-family/c-pch.cc
  6e53d008a0c4738339154c353a50ff0a  gcc/c-family/c-ppoutput.cc
  9fc831d62cb02feeec158e948abc2b6b  gcc/c-family/c-pragma.cc
--- 3185,3209 ----
  9519cf786b112194737e7d0c3534a854  gcc/builtins.cc
  4928906d86168cbc863e309bdb3ec391  gcc/builtins.def
  bd61b50b47560dc1324bf507bea5d87e  gcc/builtins.h
! 6f14f645c47f7a702bc545c422ff11ec  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  823fe168bb0f63a39de62d9f0251a1b5  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
! 7080332af7f52639bff3e04c1c8dfee5  gcc/c-family/c-attribs.cc
  7c7087d355210f92a3e615ce76d0675f  gcc/c-family/c-common.cc
  c273c4ad95ccdbfe677146505900c62e  gcc/c-family/c-common.def
  19fb19e4311805f52f48f30e7873ad2e  gcc/c-family/c-common.h
  c1aa039e875437c70f79787c2752305d  gcc/c-family/c-cppbuiltin.cc
  01db2d5cca29943c49bb372f2137d874  gcc/c-family/c-dump.cc
! b74c57df986113249610e15abda6d38b  gcc/c-family/c-format.cc
! c8d86c12bc259d3a335f338ce3a10304  gcc/c-family/c-format.h
  33e75548501d8294a77fd654bc8d4d39  gcc/c-family/c-gimplify.cc
  4d15aede5a4841d6489aa40ad1304c00  gcc/c-family/c-indentation.cc
  a4b7179d2e948bb7586a9143fbe05593  gcc/c-family/c-indentation.h
  4c01c042c599ee5c7b21aeb2c0cccbe8  gcc/c-family/c-lex.cc
  c880dc584a0fd4908e5df33dd81137b8  gcc/c-family/c-objc.h
! ff101b60d9a9ba25502bca2f5713b2a3  gcc/c-family/c-omp.cc
! 4edcbf51287f45cd2508ff5250ae0efd  gcc/c-family/c-opts.cc
  2f1a14531d3a436ca9f4aad2812c3898  gcc/c-family/c-pch.cc
  6e53d008a0c4738339154c353a50ff0a  gcc/c-family/c-ppoutput.cc
  9fc831d62cb02feeec158e948abc2b6b  gcc/c-family/c-pragma.cc
*************** aaf683e3b02704cfbfab0627d82edf85  gcc/c-
*** 3227,3248 ****
  ce9d2259a1edb5d4b1f728988bd9ef6a  gcc/c-family/known-headers.h
  f09c431056b5138e7cfe8376e05de9a6  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! caae4e86a75de3d7e348367925a6f9c9  gcc/c/ChangeLog
  b1fc09d2244c8e8a72b4df9bc9af30d7  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
! e9ed7d6d2ab1cdc3e0abac9f182f026a  gcc/c/c-decl.cc
  3601ac6299bb2579fedc2dcf2aba7773  gcc/c/c-errors.cc
  d9b5dea1631cefab5fe5ca3602db30f0  gcc/c/c-fold.cc
  d9c0725d061adffdf400457d91be3aed  gcc/c/c-lang.cc
  4be9de2ca25340adb8f350478db6a3d8  gcc/c/c-lang.h
  29c0a26baf73e55c081ac675fa7f87f8  gcc/c/c-objc-common.cc
  757f583d06a3ec98336adbfc92b4e6a8  gcc/c/c-objc-common.h
! 405ec2a7e6b10d3ed5492267cdd23f08  gcc/c/c-parser.cc
  9c122bd6feb8ae4a94420c890e654801  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
  9cef7f8aed78affc01930dfcb3d3185c  gcc/c/c-tree.h
! c123d5b42d4f978c28769a8e1c73ae68  gcc/c/c-typeck.cc
  cd371895d730dd64e947066b2e4378f8  gcc/c/config-lang.in
  1bd76a24d1322659f048abe2272a6f34  gcc/c/gccspec.cc
  c169f2d94910060e76c333db12b960b9  gcc/c/gimple-parser.cc
--- 3228,3249 ----
  ce9d2259a1edb5d4b1f728988bd9ef6a  gcc/c-family/known-headers.h
  f09c431056b5138e7cfe8376e05de9a6  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! 578318d43be9e30bece1ea5f0e0e4eca  gcc/c/ChangeLog
  b1fc09d2244c8e8a72b4df9bc9af30d7  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
! 0bf23268b3f76981a0355a46bd071a63  gcc/c/c-decl.cc
  3601ac6299bb2579fedc2dcf2aba7773  gcc/c/c-errors.cc
  d9b5dea1631cefab5fe5ca3602db30f0  gcc/c/c-fold.cc
  d9c0725d061adffdf400457d91be3aed  gcc/c/c-lang.cc
  4be9de2ca25340adb8f350478db6a3d8  gcc/c/c-lang.h
  29c0a26baf73e55c081ac675fa7f87f8  gcc/c/c-objc-common.cc
  757f583d06a3ec98336adbfc92b4e6a8  gcc/c/c-objc-common.h
! cfc55d61879f20e03f49bcf026ecbc0d  gcc/c/c-parser.cc
  9c122bd6feb8ae4a94420c890e654801  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
  9cef7f8aed78affc01930dfcb3d3185c  gcc/c/c-tree.h
! acb871cf80c7127745acc972ac76e6c6  gcc/c/c-typeck.cc
  cd371895d730dd64e947066b2e4378f8  gcc/c/config-lang.in
  1bd76a24d1322659f048abe2272a6f34  gcc/c/gccspec.cc
  c169f2d94910060e76c333db12b960b9  gcc/c/gimple-parser.cc
*************** dce5f9aa135bb3752695f3103daa686a  gcc/cf
*** 3261,3267 ****
  0d52ee7360736bb3d0306e66c1f3a9ce  gcc/cfgbuild.h
  39bbd18fab17b2880094aa317111df50  gcc/cfgcleanup.cc
  0761d2fe0a8e51aa7ed662e27b66747a  gcc/cfgcleanup.h
! 4a7800e78e7a43f25da5fd176aae06fc  gcc/cfgexpand.cc
  1ec4e9a88b7aff0e8dc3577ab103b559  gcc/cfgexpand.h
  748c8fca5e6dfe774ff333205ea9f9be  gcc/cfghooks.cc
  bbad65845fcf9cdbc5137d96f92eacab  gcc/cfghooks.h
--- 3262,3268 ----
  0d52ee7360736bb3d0306e66c1f3a9ce  gcc/cfgbuild.h
  39bbd18fab17b2880094aa317111df50  gcc/cfgcleanup.cc
  0761d2fe0a8e51aa7ed662e27b66747a  gcc/cfgcleanup.h
! 3049ee5f8436759ed3046e6ab57658d0  gcc/cfgexpand.cc
  1ec4e9a88b7aff0e8dc3577ab103b559  gcc/cfgexpand.h
  748c8fca5e6dfe774ff333205ea9f9be  gcc/cfghooks.cc
  bbad65845fcf9cdbc5137d96f92eacab  gcc/cfghooks.h
*************** e8aea35c3537127601ec95f65a09591c  gcc/cg
*** 3278,3284 ****
  b87eab2b04054f0d3cd20768be99c655  gcc/cgraphclones.cc
  c6827069836464ba4b82602e2718a45b  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
! 2370d735677f8e8035921cb72641761a  gcc/cobol/ChangeLog
  783fc8af6b9427ff266b9f49d0ff66f2  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  4db79ca2e7cdc9dd9f433e97a9dd07e8  gcc/cobol/cbldiag.h
--- 3279,3285 ----
  b87eab2b04054f0d3cd20768be99c655  gcc/cgraphclones.cc
  c6827069836464ba4b82602e2718a45b  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
! d6cfe22cb56fc18c20d59fd71ab7bcd6  gcc/cobol/ChangeLog
  783fc8af6b9427ff266b9f49d0ff66f2  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  4db79ca2e7cdc9dd9f433e97a9dd07e8  gcc/cobol/cbldiag.h
*************** c6827069836464ba4b82602e2718a45b  gcc/cg
*** 3286,3332 ****
  863070b9be19b82eb398f76a723103f8  gcc/cobol/cdf.y
  b916ef498fa1cc9821e56ab612f00f3a  gcc/cobol/cdfval.h
  fb65c7259141f1223fa29175a2e441ed  gcc/cobol/cobol-system.h
! ee4949fbb8e044a8e4f2b3c410068ea2  gcc/cobol/cobol1.cc
  5985e1898b04e553a91bdc474c56311f  gcc/cobol/config-lang.in
  aab9bcdb44bef72e1c3a8cd069bfcccd  gcc/cobol/convert.cc
  bdd6fbf13776c7983a16ac857615424c  gcc/cobol/copybook.h
! 171f4dcf0caf8dd433a214e1f6edaf46  gcc/cobol/dts.h
! 1aa68d579374b4ed7e91db06d994b598  gcc/cobol/except.cc
  8208f264c49dfd56f856e8a4229545b9  gcc/cobol/exceptg.h
  4e726128e0c090e4f3a71efddf5ffa8c  gcc/cobol/gcobc
  14b121f37018fb2571c4e1ac8f69d0a1  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
! ee529adcf01d8ec47590b845d67064e2  gcc/cobol/gcobolspec.cc
! 0783c5c2e7776b0ae263faa3c88a7871  gcc/cobol/genapi.cc
  2c87a9f67df8ea6146bc45d1a2ea1592  gcc/cobol/genapi.h
! 6cbdfb0fe4b093b032e1cab12946fe3a  gcc/cobol/gengen.cc
  c6848847819715f0eeb0c129a43131a4  gcc/cobol/gengen.h
! f0d89caf87ef5de96b8553aa49e712e3  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
! aa5c5f71eeea09a9227483eeb6d88803  gcc/cobol/genutil.cc
! 93c85e56e83ecabfb62729e46c3af130  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0fa33dbe050697f40b5e8df91896da9a  gcc/cobol/inspect.h
  2c85ade938027e95c4c411b384f6ad11  gcc/cobol/lang-specs.h
  4ab99742b15962360c2189eb9cdb087c  gcc/cobol/lang.opt
  746a2d46b3bc2a5f5663a9d64a78a674  gcc/cobol/lang.opt.urls
! 1da109a8c19d66229097f06957d76d3a  gcc/cobol/lexio.cc
! bd914b8a76e418404927ed8b89360de2  gcc/cobol/lexio.h
  a59fcda8b722bd427628bb728599ed0f  gcc/cobol/parse.y
  8e70fb10f2723dca6d4fbc88c59c17e6  gcc/cobol/parse_ante.h
  e141e23293fb343e7ccbaa2fe6bcef33  gcc/cobol/parse_util.h
  5eeacc8bd158cdcb196ef381d1d86228  gcc/cobol/scan.l
! 09b6fbdf55891f160c99e3d1c9ede75f  gcc/cobol/scan_ante.h
  20dead6c32b0fb6b826220e76ae691a8  gcc/cobol/scan_post.h
  b1fcf3cab39d3874200f92620f2a54e9  gcc/cobol/show_parse.h
  d75653f25ec3b747265e4ab78aa71521  gcc/cobol/structs.cc
  be06e098e0c2eb8f8ac2f0094bf53181  gcc/cobol/structs.h
! 48f72415b11355b187fe40d6311f4f46  gcc/cobol/symbols.cc
  78c5bb132627990b25338c0fbfd1c3cb  gcc/cobol/symbols.h
! 97f42e307ba2212951a3819b15156961  gcc/cobol/symfind.cc
  27218e3639557e7e74246aa4982f089c  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! 5996a9434897a089962ec34b4ede4784  gcc/cobol/util.cc
  650b1815d38e4fe88ba521c41d6e7d8b  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
--- 3287,3333 ----
  863070b9be19b82eb398f76a723103f8  gcc/cobol/cdf.y
  b916ef498fa1cc9821e56ab612f00f3a  gcc/cobol/cdfval.h
  fb65c7259141f1223fa29175a2e441ed  gcc/cobol/cobol-system.h
! 700d96c955db2d85a4da3d00138a4e5a  gcc/cobol/cobol1.cc
  5985e1898b04e553a91bdc474c56311f  gcc/cobol/config-lang.in
  aab9bcdb44bef72e1c3a8cd069bfcccd  gcc/cobol/convert.cc
  bdd6fbf13776c7983a16ac857615424c  gcc/cobol/copybook.h
! 3f5a0424b32cd09b107e8858af9cf15f  gcc/cobol/dts.h
! 0cc42085479c01abae9b69fd39db26a8  gcc/cobol/except.cc
  8208f264c49dfd56f856e8a4229545b9  gcc/cobol/exceptg.h
  4e726128e0c090e4f3a71efddf5ffa8c  gcc/cobol/gcobc
  14b121f37018fb2571c4e1ac8f69d0a1  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
! f07bec493c758b66ae1e8dd2f1726d52  gcc/cobol/gcobolspec.cc
! b05af49df5a0a7a81b855db31b1b6f09  gcc/cobol/genapi.cc
  2c87a9f67df8ea6146bc45d1a2ea1592  gcc/cobol/genapi.h
! f9992ed246b9ae1c88d284364ca41762  gcc/cobol/gengen.cc
  c6848847819715f0eeb0c129a43131a4  gcc/cobol/gengen.h
! 8c3f4ec22da170f9dda554b5838bef78  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
! 24a944b1cb9e11a7948a481c0a44e22c  gcc/cobol/genutil.cc
! b1416fc94d0a8a3423d9f2c2ef64f366  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0fa33dbe050697f40b5e8df91896da9a  gcc/cobol/inspect.h
  2c85ade938027e95c4c411b384f6ad11  gcc/cobol/lang-specs.h
  4ab99742b15962360c2189eb9cdb087c  gcc/cobol/lang.opt
  746a2d46b3bc2a5f5663a9d64a78a674  gcc/cobol/lang.opt.urls
! 7bab28df69a22be2ad0a8d95ec263e2d  gcc/cobol/lexio.cc
! 5953c820cdc03feb815bfbf28c10730c  gcc/cobol/lexio.h
  a59fcda8b722bd427628bb728599ed0f  gcc/cobol/parse.y
  8e70fb10f2723dca6d4fbc88c59c17e6  gcc/cobol/parse_ante.h
  e141e23293fb343e7ccbaa2fe6bcef33  gcc/cobol/parse_util.h
  5eeacc8bd158cdcb196ef381d1d86228  gcc/cobol/scan.l
! 0ec2003e2d4f21885e4189f9176aedb5  gcc/cobol/scan_ante.h
  20dead6c32b0fb6b826220e76ae691a8  gcc/cobol/scan_post.h
  b1fcf3cab39d3874200f92620f2a54e9  gcc/cobol/show_parse.h
  d75653f25ec3b747265e4ab78aa71521  gcc/cobol/structs.cc
  be06e098e0c2eb8f8ac2f0094bf53181  gcc/cobol/structs.h
! 5562009fa72d960219878c747d360310  gcc/cobol/symbols.cc
  78c5bb132627990b25338c0fbfd1c3cb  gcc/cobol/symbols.h
! de4928630bb37aa4064841c89cdf22a2  gcc/cobol/symfind.cc
  27218e3639557e7e74246aa4982f089c  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! cb6f25df1e41a29b4e4391bd6e78f796  gcc/cobol/util.cc
  650b1815d38e4fe88ba521c41d6e7d8b  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
*************** f55010fab8b9aabea82c3ac50d031028  gcc/co
*** 3338,3345 ****
  7041e62f0f582b09331732fef4bb9545  gcc/combine-stack-adj.cc
  5d00831740184b5f4f8f133a3a1ffc16  gcc/combine.cc
  2b9ccf7fc2473ef7e36aee9bcf170843  gcc/common.md
! e60a956cd4fcf365799e209c2a706a8f  gcc/common.opt
! 6af5ba1e6b0c145c00f1b9c9803dacb8  gcc/common.opt.urls
  26050db921f73fd87b026dc950bde97b  gcc/common/common-target-def.h
  dae02ebe59cdaaf21611ad354e939ca5  gcc/common/common-target.def
  4a00b1cedd9d15d93e32920b16b3c292  gcc/common/common-target.h
--- 3339,3346 ----
  7041e62f0f582b09331732fef4bb9545  gcc/combine-stack-adj.cc
  5d00831740184b5f4f8f133a3a1ffc16  gcc/combine.cc
  2b9ccf7fc2473ef7e36aee9bcf170843  gcc/common.md
! 5edfe7132d50fbb47984aa62ed547535  gcc/common.opt
! 0c7e2b88581be53c82638531823fff61  gcc/common.opt.urls
  26050db921f73fd87b026dc950bde97b  gcc/common/common-target-def.h
  dae02ebe59cdaaf21611ad354e939ca5  gcc/common/common-target.def
  4a00b1cedd9d15d93e32920b16b3c292  gcc/common/common-target.h
*************** e52e97d4d4876d6657fdd48e9f622383  gcc/co
*** 3363,3369 ****
  2da12f05a7597886b6b659f44fb2d0b0  gcc/common/config/gcn/gcn-common.cc
  cba8bad9b28e5a0f8934b00becb13d4a  gcc/common/config/h8300/h8300-common.cc
  b37309f1b28f107ba1954a2a91a61511  gcc/common/config/i386/cpuinfo.h
! 1ef6d5f92ee90c5c6d66c6caebd7fe08  gcc/common/config/i386/i386-common.cc
  9578d58dfbd0a39d8cb71180552ad36a  gcc/common/config/i386/i386-cpuinfo.h
  539245ae5afaff8f57da7ed327bfd7e5  gcc/common/config/i386/i386-isas.h
  2a64c5f639b347964e652ebb1add9831  gcc/common/config/ia64/ia64-common.cc
--- 3364,3370 ----
  2da12f05a7597886b6b659f44fb2d0b0  gcc/common/config/gcn/gcn-common.cc
  cba8bad9b28e5a0f8934b00becb13d4a  gcc/common/config/h8300/h8300-common.cc
  b37309f1b28f107ba1954a2a91a61511  gcc/common/config/i386/cpuinfo.h
! 0dd5add9f6f124ce58837f67e6e8b0f2  gcc/common/config/i386/i386-common.cc
  9578d58dfbd0a39d8cb71180552ad36a  gcc/common/config/i386/i386-cpuinfo.h
  539245ae5afaff8f57da7ed327bfd7e5  gcc/common/config/i386/i386-isas.h
  2a64c5f639b347964e652ebb1add9831  gcc/common/config/ia64/ia64-common.cc
*************** b209201703dd766f76ff5e16b99191e5  gcc/co
*** 3401,3411 ****
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
  e4f1e66aa9ced489419e6b820b44b62d  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
! 9bcf037bfdb5f868d936869520657a4a  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  ddbb7a934f8b8aa068e7b765c4375fbe  gcc/config/aarch64/aarch64-abi-ms.h
  9ff4e02500f5622983fef95cce7f38fd  gcc/config/aarch64/aarch64-arches.def
! 0746d3771e3a6276fdf28f14cbcb0809  gcc/config/aarch64/aarch64-builtins.cc
  482530e7572b40bc2ad01bdec0c1b97e  gcc/config/aarch64/aarch64-builtins.h
  d1e3bcda28d89d23e45fed74c629752a  gcc/config/aarch64/aarch64-c.cc
  ba4e797220b33827e769b09447623896  gcc/config/aarch64/aarch64-cc-fusion.cc
--- 3402,3413 ----
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
  e4f1e66aa9ced489419e6b820b44b62d  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
! 3dc731165a45d3ea42a6ea23586442eb  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  ddbb7a934f8b8aa068e7b765c4375fbe  gcc/config/aarch64/aarch64-abi-ms.h
  9ff4e02500f5622983fef95cce7f38fd  gcc/config/aarch64/aarch64-arches.def
! 25015a0315f13c9da9f02b76796af35c  gcc/config/aarch64/aarch64-builtin-pairs.def
! 7bfe6f577e74d04fbaece4d908e4f3ea  gcc/config/aarch64/aarch64-builtins.cc
  482530e7572b40bc2ad01bdec0c1b97e  gcc/config/aarch64/aarch64-builtins.h
  d1e3bcda28d89d23e45fed74c629752a  gcc/config/aarch64/aarch64-c.cc
  ba4e797220b33827e769b09447623896  gcc/config/aarch64/aarch64-cc-fusion.cc
*************** b9530750d10c463842868c73aee2e94e  gcc/co
*** 3438,3445 ****
  7cfa3d0cdd28cdcd73a29c2c8a925548  gcc/config/aarch64/aarch64-simd-builtin-types.def
  8f28d55d0c7fc64387352822e99a37ff  gcc/config/aarch64/aarch64-simd-builtins.def
  33ce4a896b77324d9be6448637daf9ca  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! 21cebc247edfe78cbd430961612e716c  gcc/config/aarch64/aarch64-simd.md
! 75404edde67473d9c33a31291c3569a3  gcc/config/aarch64/aarch64-sme.md
  fa6672290fdf9366d9919defcb7e41d7  gcc/config/aarch64/aarch64-speculation.cc
  9ab182bab4cc10bb9676b1309abb562f  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  35bb69e0b38657d068d103a2da1b8a16  gcc/config/aarch64/aarch64-sve-builtins-base.def
--- 3440,3447 ----
  7cfa3d0cdd28cdcd73a29c2c8a925548  gcc/config/aarch64/aarch64-simd-builtin-types.def
  8f28d55d0c7fc64387352822e99a37ff  gcc/config/aarch64/aarch64-simd-builtins.def
  33ce4a896b77324d9be6448637daf9ca  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! d6df560098f137d6be5bc95202b64cab  gcc/config/aarch64/aarch64-simd.md
! fc7e762346daa959b84d01220d563f16  gcc/config/aarch64/aarch64-sme.md
  fa6672290fdf9366d9919defcb7e41d7  gcc/config/aarch64/aarch64-speculation.cc
  9ab182bab4cc10bb9676b1309abb562f  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  35bb69e0b38657d068d103a2da1b8a16  gcc/config/aarch64/aarch64-sve-builtins-base.def
*************** cdcf6636402c3c91eb0010325542b491  gcc/co
*** 3448,3470 ****
  089932b501cb5cd94383201ef2002478  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
  88653955c7c15c0ac1d6f1bd1b827641  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
  e055c97bc39ff21701576ecf45b3a7a0  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
! 14751aeef4937155819adeff3187a05d  gcc/config/aarch64/aarch64-sve-builtins-sme.def
  020b06065c22c51e5b289ef55b54a5b5  gcc/config/aarch64/aarch64-sve-builtins-sme.h
! d90362e92083076dd19c9edc16b0600a  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
  5249e3dd61e8bd70c85a23c5711f3ca2  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
  e2d80b89552da0c6b4cb6bede3b2e573  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
  354a32b5af602553358eb32a9ac919a5  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
  5ef25fd86c1c16a4a6fb3f74e12802b4  gcc/config/aarch64/aarch64-sve-builtins.h
! fa8017bb4d978f10f1b5a281a27dd439  gcc/config/aarch64/aarch64-sve.md
! e8d1d3bff923bb6f881170ddb8bb1246  gcc/config/aarch64/aarch64-sve2.md
  85eca95263cb099f09b18daca655f091  gcc/config/aarch64/aarch64-sys-regs.def
  b301dc231a69a28202d2b7d79ea75f5d  gcc/config/aarch64/aarch64-tune.md
! 06480b67fa44a0b9fa7de2ed778a3df9  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! 39ad35dce237f914831affda0eaab2b4  gcc/config/aarch64/aarch64.cc
! 9567cf98f71ccd00c1d5a4f094c7bec7  gcc/config/aarch64/aarch64.h
! 941733e3fdaaf94e1b4946075cab7b49  gcc/config/aarch64/aarch64.md
  ae13780a8296e9c52f9e9b8cd95dc312  gcc/config/aarch64/aarch64.opt
  21fd50b19307096b8be37549ae0f6f77  gcc/config/aarch64/aarch64.opt.urls
  7b468a20f0362cbe02c7699720a962fa  gcc/config/aarch64/arm_acle.h
--- 3450,3472 ----
  089932b501cb5cd94383201ef2002478  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
  88653955c7c15c0ac1d6f1bd1b827641  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
  e055c97bc39ff21701576ecf45b3a7a0  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
! 1ee6f44e2f7b1a2cfa042381ed4404ac  gcc/config/aarch64/aarch64-sve-builtins-sme.def
  020b06065c22c51e5b289ef55b54a5b5  gcc/config/aarch64/aarch64-sve-builtins-sme.h
! dec9c12a93bd77974e3b80d3a15432ed  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
  5249e3dd61e8bd70c85a23c5711f3ca2  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
  e2d80b89552da0c6b4cb6bede3b2e573  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
  354a32b5af602553358eb32a9ac919a5  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
  5ef25fd86c1c16a4a6fb3f74e12802b4  gcc/config/aarch64/aarch64-sve-builtins.h
! 143e32a20616a6134f9c7235d570aca8  gcc/config/aarch64/aarch64-sve.md
! e7bba7b6ccb3d6036da76c51d54fc69d  gcc/config/aarch64/aarch64-sve2.md
  85eca95263cb099f09b18daca655f091  gcc/config/aarch64/aarch64-sys-regs.def
  b301dc231a69a28202d2b7d79ea75f5d  gcc/config/aarch64/aarch64-tune.md
! d10a350a80f8f12ee435c64d236e2767  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! 2b2e49b31680777e0918acad4f97d36b  gcc/config/aarch64/aarch64.cc
! 97fd54a20ac88d76171e744940efd8ba  gcc/config/aarch64/aarch64.h
! 58defab70a0bc4fb2f3fb6d61eee40d7  gcc/config/aarch64/aarch64.md
  ae13780a8296e9c52f9e9b8cd95dc312  gcc/config/aarch64/aarch64.opt
  21fd50b19307096b8be37549ae0f6f77  gcc/config/aarch64/aarch64.opt.urls
  7b468a20f0362cbe02c7699720a962fa  gcc/config/aarch64/arm_acle.h
*************** a0d3bae82f2abdfc793c0b4f1cae025d  gcc/co
*** 3476,3482 ****
  0c0f98139cc983bbc7d6e08a92e8e104  gcc/config/aarch64/arm_private_neon_types.h
  e1d5d74f22f34e78527ba51b694c4dbd  gcc/config/aarch64/arm_sme.h
  c61b39c4504a36e5c45cd1e3b64723d7  gcc/config/aarch64/arm_sve.h
! 4be0bf5256965b871b51fd819dc85ed7  gcc/config/aarch64/atomics.md
  35fa48ff42e4796d58857c4d001d9920  gcc/config/aarch64/biarchilp32.h
  ae88170d2d567105865813bb4b77d91f  gcc/config/aarch64/biarchlp64.h
  124d7f2adedfdccecd86bb0274dfc7aa  gcc/config/aarch64/check-sve-md.awk
--- 3478,3484 ----
  0c0f98139cc983bbc7d6e08a92e8e104  gcc/config/aarch64/arm_private_neon_types.h
  e1d5d74f22f34e78527ba51b694c4dbd  gcc/config/aarch64/arm_sme.h
  c61b39c4504a36e5c45cd1e3b64723d7  gcc/config/aarch64/arm_sve.h
! 31d79ab9faa6ce3920269ef9656a2052  gcc/config/aarch64/atomics.md
  35fa48ff42e4796d58857c4d001d9920  gcc/config/aarch64/biarchilp32.h
  ae88170d2d567105865813bb4b77d91f  gcc/config/aarch64/biarchlp64.h
  124d7f2adedfdccecd86bb0274dfc7aa  gcc/config/aarch64/check-sve-md.awk
*************** e09fcbbb84683bbe1da505bf33e22d52  gcc/co
*** 3511,3517 ****
  a1de86c0a558e79a951a6a24ed1e133a  gcc/config/aarch64/tuning_models/cortexa57.h
  a3ffc0ff21c2d3597768451a5afa4027  gcc/config/aarch64/tuning_models/cortexa72.h
  95f68b1784447f4df0a62736209bcbe6  gcc/config/aarch64/tuning_models/cortexa73.h
! d88b01ec5c51c0e7e9948b03d926629d  gcc/config/aarch64/tuning_models/cortexx925.h
  a817cc8c0648af85cd26652c17c0f063  gcc/config/aarch64/tuning_models/emag.h
  c414f4f4b0ca18716b952cdc996cd336  gcc/config/aarch64/tuning_models/exynosm1.h
  c20726a55db2926c898f89280cf7b685  gcc/config/aarch64/tuning_models/fujitsu_monaka.h
--- 3513,3519 ----
  a1de86c0a558e79a951a6a24ed1e133a  gcc/config/aarch64/tuning_models/cortexa57.h
  a3ffc0ff21c2d3597768451a5afa4027  gcc/config/aarch64/tuning_models/cortexa72.h
  95f68b1784447f4df0a62736209bcbe6  gcc/config/aarch64/tuning_models/cortexa73.h
! 65bc204d3d3af003377a1a5424015e9b  gcc/config/aarch64/tuning_models/cortexx925.h
  a817cc8c0648af85cd26652c17c0f063  gcc/config/aarch64/tuning_models/emag.h
  c414f4f4b0ca18716b952cdc996cd336  gcc/config/aarch64/tuning_models/exynosm1.h
  c20726a55db2926c898f89280cf7b685  gcc/config/aarch64/tuning_models/fujitsu_monaka.h
*************** ce0f856b5d88ad7f8a33a6e05b88176b  gcc/co
*** 3523,3531 ****
  a3d9fb503080c4d2fcb58c74d82ef235  gcc/config/aarch64/tuning_models/neoversen2.h
  b78970b203ff4a643967bb24ad8fd280  gcc/config/aarch64/tuning_models/neoversen3.h
  d1b95435bb177952f26d761fee7430d6  gcc/config/aarch64/tuning_models/neoversev1.h
! 067f90a712678085bed8b60608edfc4b  gcc/config/aarch64/tuning_models/neoversev2.h
! 42edc79260b9e5687e2f6d3c54678870  gcc/config/aarch64/tuning_models/neoversev3.h
! 53b5e25dd9d162d4a60fa9c5e2ad104f  gcc/config/aarch64/tuning_models/neoversev3ae.h
  e0ea9a60e19c47697127edd6550da663  gcc/config/aarch64/tuning_models/qdf24xx.h
  1846be94d3382c182fb7d9a19bc9e042  gcc/config/aarch64/tuning_models/saphira.h
  9f37e6e78ab3e5e066a76b94257321a5  gcc/config/aarch64/tuning_models/thunderx.h
--- 3525,3533 ----
  a3d9fb503080c4d2fcb58c74d82ef235  gcc/config/aarch64/tuning_models/neoversen2.h
  b78970b203ff4a643967bb24ad8fd280  gcc/config/aarch64/tuning_models/neoversen3.h
  d1b95435bb177952f26d761fee7430d6  gcc/config/aarch64/tuning_models/neoversev1.h
! 53bd673d7fb1c3609910aed044c63115  gcc/config/aarch64/tuning_models/neoversev2.h
! c21a147250fbf237121e7c8a7d3235f7  gcc/config/aarch64/tuning_models/neoversev3.h
! c0ded296d88fb746d5a2ce61df32c849  gcc/config/aarch64/tuning_models/neoversev3ae.h
  e0ea9a60e19c47697127edd6550da663  gcc/config/aarch64/tuning_models/qdf24xx.h
  1846be94d3382c182fb7d9a19bc9e042  gcc/config/aarch64/tuning_models/saphira.h
  9f37e6e78ab3e5e066a76b94257321a5  gcc/config/aarch64/tuning_models/thunderx.h
*************** f43b68e01b2d61fffb5336ef45fa1e7f  gcc/co
*** 3747,3753 ****
  117bbef05f3fb7ba16a92cee51e0064c  gcc/config/avr/avr-mcus.def
  1db4fe94056a22e92de33b6d365176c6  gcc/config/avr/avr-modes.def
  d37f092206fc4c0379cee5e5fc01b654  gcc/config/avr/avr-passes-fuse-move.h
! 7ca2138284a804389351e8f73b78ce54  gcc/config/avr/avr-passes.cc
  0f30b0a73f6c1a84b2ba73050f568645  gcc/config/avr/avr-passes.def
  5e1a1c5c73b0e9dbabe637fa8700bf6e  gcc/config/avr/avr-protos.h
  eb753641e5bf09dbcc2be97e61be8767  gcc/config/avr/avr-stdint.h
--- 3749,3755 ----
  117bbef05f3fb7ba16a92cee51e0064c  gcc/config/avr/avr-mcus.def
  1db4fe94056a22e92de33b6d365176c6  gcc/config/avr/avr-modes.def
  d37f092206fc4c0379cee5e5fc01b654  gcc/config/avr/avr-passes-fuse-move.h
! 1d7d121e2de1e90ca9808351d31cfd50  gcc/config/avr/avr-passes.cc
  0f30b0a73f6c1a84b2ba73050f568645  gcc/config/avr/avr-passes.def
  5e1a1c5c73b0e9dbabe637fa8700bf6e  gcc/config/avr/avr-protos.h
  eb753641e5bf09dbcc2be97e61be8767  gcc/config/avr/avr-stdint.h
*************** f933c7ba771ce9476d266c70acbf222c  gcc/co
*** 3880,3886 ****
  01730ada4a07f2b6a7b9c6bedbe0ec39  gcc/config/csky/t-csky-linux
  aef9384ae90024aef8126c64c575f49a  gcc/config/darwin-c.cc
  2dbf19574a93063035f610f6be08f11c  gcc/config/darwin-d.cc
! 2ce45aafed3b2287c666fb70786bdcdc  gcc/config/darwin-driver.cc
  2a024d19058232321d7a1a03335e9894  gcc/config/darwin-f.cc
  a46b54a8716fb1a2a2bd542f2bfc433f  gcc/config/darwin-ppc-ldouble-patch.def
  8c4a62d056940f746dc7f1d2bec5d593  gcc/config/darwin-protos.h
--- 3882,3888 ----
  01730ada4a07f2b6a7b9c6bedbe0ec39  gcc/config/csky/t-csky-linux
  aef9384ae90024aef8126c64c575f49a  gcc/config/darwin-c.cc
  2dbf19574a93063035f610f6be08f11c  gcc/config/darwin-d.cc
! 94f210dcd1179db695ab8f1ac5c83715  gcc/config/darwin-driver.cc
  2a024d19058232321d7a1a03335e9894  gcc/config/darwin-f.cc
  a46b54a8716fb1a2a2bd542f2bfc433f  gcc/config/darwin-ppc-ldouble-patch.def
  8c4a62d056940f746dc7f1d2bec5d593  gcc/config/darwin-protos.h
*************** b395ed990d9e6d7c2698fdd602685d3f  gcc/co
*** 3972,3981 ****
  1dbed4e12cf62ae67464d874f1e2e9e8  gcc/config/gcn/gcn-tables.opt
  ca8c1935ac88d760dc3a5b7e97558f28  gcc/config/gcn/gcn-tables.opt.urls
  23106fa0b82354400a9c82b82a9af33a  gcc/config/gcn/gcn-tree.cc
! 6a8bbbcc3aeaabb5764442677cc5e730  gcc/config/gcn/gcn-valu.md
  26fdf7c4c4217a569734143da4dd7b9c  gcc/config/gcn/gcn.cc
  686d66a24f66638a6a8dc76ddae3acb6  gcc/config/gcn/gcn.h
! 0b4e5b8405a5ddd4835814731a96a8b4  gcc/config/gcn/gcn.md
  ea362cc71f1b9679e105d57822167b51  gcc/config/gcn/gcn.opt
  6c96a5ccd826ec5a9ddf7ffe7fda572d  gcc/config/gcn/gcn.opt.urls
  6d70e3b6694d21aaf0fc6f1764858c4e  gcc/config/gcn/gen-gcn-device-macros.awk
--- 3974,3983 ----
  1dbed4e12cf62ae67464d874f1e2e9e8  gcc/config/gcn/gcn-tables.opt
  ca8c1935ac88d760dc3a5b7e97558f28  gcc/config/gcn/gcn-tables.opt.urls
  23106fa0b82354400a9c82b82a9af33a  gcc/config/gcn/gcn-tree.cc
! 8526d591a0b868940b1ab7518d7b9b0a  gcc/config/gcn/gcn-valu.md
  26fdf7c4c4217a569734143da4dd7b9c  gcc/config/gcn/gcn.cc
  686d66a24f66638a6a8dc76ddae3acb6  gcc/config/gcn/gcn.h
! b096110f77173b29d83d00101d0c18c0  gcc/config/gcn/gcn.md
  ea362cc71f1b9679e105d57822167b51  gcc/config/gcn/gcn.opt
  6c96a5ccd826ec5a9ddf7ffe7fda572d  gcc/config/gcn/gcn.opt.urls
  6d70e3b6694d21aaf0fc6f1764858c4e  gcc/config/gcn/gen-gcn-device-macros.awk
*************** d3fb594d11281112ff8d8f304a000c4e  gcc/co
*** 4160,4172 ****
  a4a1a27264871bfba9de0f4fbdb4f3ac  gcc/config/i386/i386-c.cc
  54909bb70e074c14dcf4499a5baedc54  gcc/config/i386/i386-d.cc
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
! ae9af634cc4857a5044185a26617f7b0  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
! 48afebe713ddd3f5c6c11bca4e216c78  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
  66732512f01bad0bbb26cb3c09ec773e  gcc/config/i386/i386-isa.def
  795643c7d23acf02568d7fa7acad0138  gcc/config/i386/i386-modes.def
! 4931ecf7c91aacb0ed7430cbbce5413c  gcc/config/i386/i386-options.cc
  08c877d750ab52ddb4fe7c99c90d62de  gcc/config/i386/i386-options.h
  02c486451c524cfc143358e07b88cd70  gcc/config/i386/i386-opts.h
  2b4efb0edf861dd06ddc1445aa9e4d05  gcc/config/i386/i386-passes.def
--- 4162,4174 ----
  a4a1a27264871bfba9de0f4fbdb4f3ac  gcc/config/i386/i386-c.cc
  54909bb70e074c14dcf4499a5baedc54  gcc/config/i386/i386-d.cc
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
! 80474a4f7efc29f38a427cc8082691f8  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
! 78689704fd56b1098283e56d1453dbb4  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
  66732512f01bad0bbb26cb3c09ec773e  gcc/config/i386/i386-isa.def
  795643c7d23acf02568d7fa7acad0138  gcc/config/i386/i386-modes.def
! f8083b4b3cf6d8f73bc085f936b3be32  gcc/config/i386/i386-options.cc
  08c877d750ab52ddb4fe7c99c90d62de  gcc/config/i386/i386-options.h
  02c486451c524cfc143358e07b88cd70  gcc/config/i386/i386-opts.h
  2b4efb0edf861dd06ddc1445aa9e4d05  gcc/config/i386/i386-passes.def
*************** c9c3969c00808c9b6809fbeab3e4a1d2  gcc/co
*** 4174,4182 ****
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! 67778873da1f4ed19c17c6a028db790f  gcc/config/i386/i386.cc
! d3a93e93c888eeff31e71867a61d5f7e  gcc/config/i386/i386.h
! b081a055c6bab743b5cd33c56e22c4a4  gcc/config/i386/i386.md
  23985b411cb15228b631691265bfefe9  gcc/config/i386/i386.opt
  59cb9adff8fe9d24eed1cfac0c5bf62c  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
--- 4176,4184 ----
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! b2d7a660073ce41a81e57a76b110bb94  gcc/config/i386/i386.cc
! 9b20906d8a7d93f706d1a2e855678ee6  gcc/config/i386/i386.h
! e9893adb04e24870dacd693fd5ceccd7  gcc/config/i386/i386.md
  23985b411cb15228b631691265bfefe9  gcc/config/i386/i386.opt
  59cb9adff8fe9d24eed1cfac0c5bf62c  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
*************** a0eef2ed8deb81df9cde53071094d3ff  gcc/co
*** 4202,4208 ****
  55b88c976269e37a537664690c4fab53  gcc/config/i386/mingw-w64.opt.urls
  b68f60806cbb24b711d235b8e446a62a  gcc/config/i386/mm3dnow.h
  783259947fde0f03f564d0e19ad27e23  gcc/config/i386/mmintrin.h
! bc2a420ebeed73526625264e0d857759  gcc/config/i386/mmx.md
  800d6b8630ece4412e7cc8572552812a  gcc/config/i386/movdirintrin.h
  a60aa400230276b237aace7baf1becdb  gcc/config/i386/movrsintrin.h
  0a902dd4d4e82e9bf2831a3848a102ed  gcc/config/i386/mwaitintrin.h
--- 4204,4210 ----
  55b88c976269e37a537664690c4fab53  gcc/config/i386/mingw-w64.opt.urls
  b68f60806cbb24b711d235b8e446a62a  gcc/config/i386/mm3dnow.h
  783259947fde0f03f564d0e19ad27e23  gcc/config/i386/mmintrin.h
! 612f3a7361a9e2d17dc61084f50492d4  gcc/config/i386/mmx.md
  800d6b8630ece4412e7cc8572552812a  gcc/config/i386/movdirintrin.h
  a60aa400230276b237aace7baf1becdb  gcc/config/i386/movrsintrin.h
  0a902dd4d4e82e9bf2831a3848a102ed  gcc/config/i386/mwaitintrin.h
*************** fc41e4ebf77dd1f54ddeec4e60428d5e  gcc/co
*** 4221,4227 ****
  1d9e8c2f64fa31f36bfe9ac83a296943  gcc/config/i386/pmmintrin.h
  62337355ef8c4334a0cc9c1db0cfc0da  gcc/config/i386/popcntintrin.h
  d17b84bc85c341e7f386b3b24b231070  gcc/config/i386/ppro.md
! 40749ed4b58c174243e65746bfcaead1  gcc/config/i386/predicates.md
  e10e34eef814ce6c5e09777d378d36d3  gcc/config/i386/prfchiintrin.h
  eed7a3601ce61f497dcfc5655e5da7a6  gcc/config/i386/prfchwintrin.h
  bc11b09d2de8ba6b9ec2392f1cebdbd9  gcc/config/i386/raointintrin.h
--- 4223,4229 ----
  1d9e8c2f64fa31f36bfe9ac83a296943  gcc/config/i386/pmmintrin.h
  62337355ef8c4334a0cc9c1db0cfc0da  gcc/config/i386/popcntintrin.h
  d17b84bc85c341e7f386b3b24b231070  gcc/config/i386/ppro.md
! 0c4aad3cd19c609454f2934551a88f24  gcc/config/i386/predicates.md
  e10e34eef814ce6c5e09777d378d36d3  gcc/config/i386/prfchiintrin.h
  eed7a3601ce61f497dcfc5655e5da7a6  gcc/config/i386/prfchwintrin.h
  bc11b09d2de8ba6b9ec2392f1cebdbd9  gcc/config/i386/raointintrin.h
*************** de4e89bc042c6bc7eb093bda5d33a266  gcc/co
*** 4239,4245 ****
  380f2e50c7d803059b0e7617da00460f  gcc/config/i386/sm4intrin.h
  a24296639492577352dd1309b136bc9a  gcc/config/i386/smmintrin.h
  f98c4d94bf04187a2905e9f4ce7d589b  gcc/config/i386/sol2.h
! ad9d3825ae1f7a675566526403b101cf  gcc/config/i386/sse.md
  7c6ff828c11c2892168a2e450559dcb6  gcc/config/i386/ssemath.h
  7ada9f54207701e1d29fd03ea990e163  gcc/config/i386/stringop.def
  9f75a2e9a9bf20db0bef264cabe77a29  gcc/config/i386/subst.md
--- 4241,4247 ----
  380f2e50c7d803059b0e7617da00460f  gcc/config/i386/sm4intrin.h
  a24296639492577352dd1309b136bc9a  gcc/config/i386/smmintrin.h
  f98c4d94bf04187a2905e9f4ce7d589b  gcc/config/i386/sol2.h
! bdba3bf10850640de3530c7d09e28101  gcc/config/i386/sse.md
  7c6ff828c11c2892168a2e450559dcb6  gcc/config/i386/ssemath.h
  7ada9f54207701e1d29fd03ea990e163  gcc/config/i386/stringop.def
  9f75a2e9a9bf20db0bef264cabe77a29  gcc/config/i386/subst.md
*************** c69ef27c10b319a5443289af516f40b8  gcc/co
*** 4386,4392 ****
  dfcc88ca848e0510d6a048cef812a984  gcc/config/loongarch/gnu-user.h
  0214c19eeeeb90d46d358333d5381814  gcc/config/loongarch/la464.md
  2da06c6340275c1c0670ab82a7252f77  gcc/config/loongarch/larchintrin.h
! cdc46bd440985e31de830ee818f5019b  gcc/config/loongarch/lasx.md
  64deba47bb6c4537af9a962db8e160d1  gcc/config/loongarch/lasxintrin.h
  a11605122c3f864d3527acf829c67179  gcc/config/loongarch/linux.h
  ac0512e8b259ed63d386edaa0457a5ad  gcc/config/loongarch/loongarch-builtins.cc
--- 4388,4394 ----
  dfcc88ca848e0510d6a048cef812a984  gcc/config/loongarch/gnu-user.h
  0214c19eeeeb90d46d358333d5381814  gcc/config/loongarch/la464.md
  2da06c6340275c1c0670ab82a7252f77  gcc/config/loongarch/larchintrin.h
! b74eced053703973adb776263950adbe  gcc/config/loongarch/lasx.md
  64deba47bb6c4537af9a962db8e160d1  gcc/config/loongarch/lasxintrin.h
  a11605122c3f864d3527acf829c67179  gcc/config/loongarch/linux.h
  ac0512e8b259ed63d386edaa0457a5ad  gcc/config/loongarch/loongarch-builtins.cc
*************** d3ad067b1fa15bbce42fd3cc4499966e  gcc/co
*** 4410,4421 ****
  688cd325dbeb853413435f029e712cb2  gcc/config/loongarch/loongarch-str.h
  a8cd9a4a3d712802475e91e0ec9a3274  gcc/config/loongarch/loongarch-target-attr.cc
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
! 95b1d7dc526a359b4045e24d14d4206f  gcc/config/loongarch/loongarch.cc
  cac7a4f19361731647870d2210078a9e  gcc/config/loongarch/loongarch.h
  9fd9109f20f7dfce6de910d45b5dbc85  gcc/config/loongarch/loongarch.md
  bcc951e237d5501fc2acd6ef3141724c  gcc/config/loongarch/loongarch.opt
  264f23ee79258ff82bda293d093dd06b  gcc/config/loongarch/loongarch.opt.urls
! 626538aad4ce79c9f33a19821084c1b3  gcc/config/loongarch/lsx.md
  429434e5f1e9f9afc839f4409102d5ea  gcc/config/loongarch/lsxintrin.h
  5a232a75001e3db7ee3e491afdfae629  gcc/config/loongarch/musl.h
  e357122938174e9f48e1036cb67c8a21  gcc/config/loongarch/predicates.md
--- 4412,4423 ----
  688cd325dbeb853413435f029e712cb2  gcc/config/loongarch/loongarch-str.h
  a8cd9a4a3d712802475e91e0ec9a3274  gcc/config/loongarch/loongarch-target-attr.cc
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
! f2b6b17d293c2846dbd52d3f5bc183ad  gcc/config/loongarch/loongarch.cc
  cac7a4f19361731647870d2210078a9e  gcc/config/loongarch/loongarch.h
  9fd9109f20f7dfce6de910d45b5dbc85  gcc/config/loongarch/loongarch.md
  bcc951e237d5501fc2acd6ef3141724c  gcc/config/loongarch/loongarch.opt
  264f23ee79258ff82bda293d093dd06b  gcc/config/loongarch/loongarch.opt.urls
! a1ceaab52de5f1950f6c6b63c5a718ea  gcc/config/loongarch/lsx.md
  429434e5f1e9f9afc839f4409102d5ea  gcc/config/loongarch/lsxintrin.h
  5a232a75001e3db7ee3e491afdfae629  gcc/config/loongarch/musl.h
  e357122938174e9f48e1036cb67c8a21  gcc/config/loongarch/predicates.md
*************** c7d2a0ff524d2118e134910f92d499bc  gcc/co
*** 4862,4878 ****
  ecc43d433158dff36044d7980b74eaea  gcc/config/pru/pru-opts.h
  a47c1d9626258e961f58aaa938dff7c0  gcc/config/pru/pru-passes.cc
  3806bf704354931780e8f243f2ac4b5b  gcc/config/pru/pru-passes.def
! 600befe49f45ad64d985dc8011379856  gcc/config/pru/pru-pragma.cc
! bd2f18deee7e7457f0e33c0ef25eda80  gcc/config/pru/pru-protos.h
! 31d45a1306a4a7355fdbff5baa47684f  gcc/config/pru/pru.cc
  ea166a4ea21e8f1dc577c24b5a24d65c  gcc/config/pru/pru.h
  d6a3fdc3ae6584fd2346ec32920baaa8  gcc/config/pru/pru.md
  d6da8f84e5835bd14f146fc765bcb39d  gcc/config/pru/pru.opt
  cd13b51383c99c08d86250b61fed3805  gcc/config/pru/pru.opt.urls
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  a5e691ce14017f2a89283ed510bb78fd  gcc/config/riscv/arch-canonicalize
! dbe414af58cb415def3a93f63b9fd8ea  gcc/config/riscv/autovec-opt.md
! 47e29021b80dec813828275b077dd7be  gcc/config/riscv/autovec.md
  40e0e0684e3c3a934587129211c4674c  gcc/config/riscv/bitmanip.md
  79131f969561dadd487936a1bffbb846  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
--- 4864,4880 ----
  ecc43d433158dff36044d7980b74eaea  gcc/config/pru/pru-opts.h
  a47c1d9626258e961f58aaa938dff7c0  gcc/config/pru/pru-passes.cc
  3806bf704354931780e8f243f2ac4b5b  gcc/config/pru/pru-passes.def
! d8610d2a280d5d48126151a545999a40  gcc/config/pru/pru-pragma.cc
! df8b52fbbd51989d1de781552c98b95d  gcc/config/pru/pru-protos.h
! a2ccfd7a41f7ee0ec9fff8107e3aa20f  gcc/config/pru/pru.cc
  ea166a4ea21e8f1dc577c24b5a24d65c  gcc/config/pru/pru.h
  d6a3fdc3ae6584fd2346ec32920baaa8  gcc/config/pru/pru.md
  d6da8f84e5835bd14f146fc765bcb39d  gcc/config/pru/pru.opt
  cd13b51383c99c08d86250b61fed3805  gcc/config/pru/pru.opt.urls
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  a5e691ce14017f2a89283ed510bb78fd  gcc/config/riscv/arch-canonicalize
! c03a1f1227d66da08f83d94c7f02c13b  gcc/config/riscv/autovec-opt.md
! 35b924fc992b99e8ad4ffbdac1e256a3  gcc/config/riscv/autovec.md
  40e0e0684e3c3a934587129211c4674c  gcc/config/riscv/bitmanip.md
  79131f969561dadd487936a1bffbb846  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
*************** d8e970a7377ae8ee7892f014d5bbc979  gcc/co
*** 4889,4894 ****
--- 4891,4897 ----
  473ed80ccf8dc1ff43e427a45cca3a1e  gcc/config/riscv/gnu.h
  4e30eb4d51786f677ce1c181647193e1  gcc/config/riscv/iterators.md
  85139511ec0cad0144207dc8efc0ed90  gcc/config/riscv/linux.h
+ 648db331f8cdbd06edc3e19c6dd794b3  gcc/config/riscv/mips-insn.md
  22c4239b709147e20546aaa492483d43  gcc/config/riscv/mips-p8700.md
  52728cfca05017f727570e4e983fc5fa  gcc/config/riscv/multilib-generator
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
*************** c10bfd4598b8e2176b92031831f3b341  gcc/co
*** 4899,4913 ****
  3b5651b95f6a076ccd28e73bae600e52  gcc/config/riscv/riscv-builtins.cc
  717dabcf24d5f1356542a7716b96af87  gcc/config/riscv/riscv-c.cc
  3b7012a7d47b9aaf163e890d3e29013e  gcc/config/riscv/riscv-cmo.def
! 2eefa7fb591a8e7ee6cd5ea10ea84dc4  gcc/config/riscv/riscv-cores.def
  173996678a5bf2b1b40e30fe260109b4  gcc/config/riscv/riscv-d.cc
  790bd2a5355776ab5ebf4c7814489760  gcc/config/riscv/riscv-d.h
  9848282285cd3a3e21f6181f220f6ba9  gcc/config/riscv/riscv-ext-corev.def
  a8a293d3f8f01367abc68e7556a51898  gcc/config/riscv/riscv-ext-sifive.def
  85fb34f0d0de09dc83b4df6f525d78f9  gcc/config/riscv/riscv-ext-thead.def
  5551f756c3aae6dce60511f7f52efa5c  gcc/config/riscv/riscv-ext-ventana.def
! abea7fc704411b385e408452f4dc8b01  gcc/config/riscv/riscv-ext.def
! 67c7b8379c6250f021f1e97c4ca63008  gcc/config/riscv/riscv-ext.opt
  8463b74f5d66e1a7f0d58a7ae087d8ad  gcc/config/riscv/riscv-ext.opt.urls
  1b0b6b632f747d9387ef25821e8673b4  gcc/config/riscv/riscv-feature-bits.h
  b467d35485b39b25863e918609a322d0  gcc/config/riscv/riscv-ftypes.def
--- 4902,4917 ----
  3b5651b95f6a076ccd28e73bae600e52  gcc/config/riscv/riscv-builtins.cc
  717dabcf24d5f1356542a7716b96af87  gcc/config/riscv/riscv-c.cc
  3b7012a7d47b9aaf163e890d3e29013e  gcc/config/riscv/riscv-cmo.def
! 144ef47d69d1b2dc7361150c48143f5a  gcc/config/riscv/riscv-cores.def
  173996678a5bf2b1b40e30fe260109b4  gcc/config/riscv/riscv-d.cc
  790bd2a5355776ab5ebf4c7814489760  gcc/config/riscv/riscv-d.h
  9848282285cd3a3e21f6181f220f6ba9  gcc/config/riscv/riscv-ext-corev.def
+ 178bc0b3b14a499814e05c7f1d58d0ef  gcc/config/riscv/riscv-ext-mips.def
  a8a293d3f8f01367abc68e7556a51898  gcc/config/riscv/riscv-ext-sifive.def
  85fb34f0d0de09dc83b4df6f525d78f9  gcc/config/riscv/riscv-ext-thead.def
  5551f756c3aae6dce60511f7f52efa5c  gcc/config/riscv/riscv-ext-ventana.def
! ad20aa730e465a3cde222b04291e4e54  gcc/config/riscv/riscv-ext.def
! 3adf32d34a1bba8b56650a8b8b73c28a  gcc/config/riscv/riscv-ext.opt
  8463b74f5d66e1a7f0d58a7ae087d8ad  gcc/config/riscv/riscv-ext.opt.urls
  1b0b6b632f747d9387ef25821e8673b4  gcc/config/riscv/riscv-feature-bits.h
  b467d35485b39b25863e918609a322d0  gcc/config/riscv/riscv-ftypes.def
*************** c7f56884d80a411d921f1c7add273f23  gcc/co
*** 4938,4948 ****
  bd7a0d0d03ad4788f6cf7579df11a66e  gcc/config/riscv/riscv-vector-costs.h
  f51037a9e437f8e9ce7215b2da5ad4e2  gcc/config/riscv/riscv-vector-switch.def
  5a1dc434073ed565843a91456f836a9a  gcc/config/riscv/riscv-vsetvl.cc
! 16b7359c0b12895c0d7452fc89879a1a  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! 76da42a979a5a67ef38f93dcd0f52168  gcc/config/riscv/riscv.cc
  1e6d5c3cff4825c434ac203d43f0b5ab  gcc/config/riscv/riscv.h
! 6b01d47a444ac07b555d8cd7cb2ae535  gcc/config/riscv/riscv.md
  fec1c87bba727131a45d4ec4a9ae5490  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
--- 4942,4952 ----
  bd7a0d0d03ad4788f6cf7579df11a66e  gcc/config/riscv/riscv-vector-costs.h
  f51037a9e437f8e9ce7215b2da5ad4e2  gcc/config/riscv/riscv-vector-switch.def
  5a1dc434073ed565843a91456f836a9a  gcc/config/riscv/riscv-vsetvl.cc
! d120ed6eb2847b636271b3a1ef82ecbf  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! 3ffec5ec709f63f0cfccf3f2cc9f1fab  gcc/config/riscv/riscv.cc
  1e6d5c3cff4825c434ac203d43f0b5ab  gcc/config/riscv/riscv.h
! 9adedbc98e06d788506dd97118766bec  gcc/config/riscv/riscv.md
  fec1c87bba727131a45d4ec4a9ae5490  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
*************** f27b8edf52176cdcf3a1028587ed15a4  gcc/co
*** 4965,4971 ****
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
! 897a602d7fa073c7a9d38e3fd3652ff1  gcc/config/riscv/t-riscv
  51c5ea17e60737c695a38285dfce555d  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
--- 4969,4975 ----
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
! 57bbb7cfaea307042e62db93b1a94dde  gcc/config/riscv/t-riscv
  51c5ea17e60737c695a38285dfce555d  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
*************** bcf728ad2379630774fd5bb529d4ee86  gcc/co
*** 4976,4983 ****
  fd8e9517de64ab23821ea1284ea6d7f6  gcc/config/riscv/thead.md
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
! dc3d39009f9b310f69345a889fe3ee67  gcc/config/riscv/vector-iterators.md
! eb8db23863c29e36695421aa4d3331d6  gcc/config/riscv/vector.md
  4ffde0be9b9a0efe78c98b4407d00397  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
  36cba2444ae9c8f107fee34492bd0ed6  gcc/config/riscv/zicond.md
--- 4980,4987 ----
  fd8e9517de64ab23821ea1284ea6d7f6  gcc/config/riscv/thead.md
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
! 1e72fd3b97655cba4fdef52c125ed35a  gcc/config/riscv/vector-iterators.md
! 9231da0a3760d35dafdec45d85a3e6a6  gcc/config/riscv/vector.md
  4ffde0be9b9a0efe78c98b4407d00397  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
  36cba2444ae9c8f107fee34492bd0ed6  gcc/config/riscv/zicond.md
*************** d7112093049d4abbc421609d032b7358  gcc/co
*** 5205,5213 ****
  6fdfe66fdde3f81b83dc16c27ac7df3f  gcc/config/s390/s390-opts.h
  87bca0c72260bdf7b32cbe797e607999  gcc/config/s390/s390-passes.def
  94c7aecc0d353c9aa984b4bcea01590b  gcc/config/s390/s390-protos.h
! 51a792223f071cd70ff73f1a025762f5  gcc/config/s390/s390.cc
  f162b44703353c72956061efcbe580d7  gcc/config/s390/s390.h
! 8e66ee8d8da3d230e910298fd4943553  gcc/config/s390/s390.md
  fa4475320c7a3767bf9accfa736efcc6  gcc/config/s390/s390.opt
  a70af895ec82511886ce63dc841e63e1  gcc/config/s390/s390.opt.urls
  b9ecea5f97b2e15b60d770050a07f0d1  gcc/config/s390/s390intrin.h
--- 5209,5217 ----
  6fdfe66fdde3f81b83dc16c27ac7df3f  gcc/config/s390/s390-opts.h
  87bca0c72260bdf7b32cbe797e607999  gcc/config/s390/s390-passes.def
  94c7aecc0d353c9aa984b4bcea01590b  gcc/config/s390/s390-protos.h
! 2bb5317880e3e10de0ab75de1cdafc59  gcc/config/s390/s390.cc
  f162b44703353c72956061efcbe580d7  gcc/config/s390/s390.h
! 708ec951fb00aa87d495349008fad5f5  gcc/config/s390/s390.md
  fa4475320c7a3767bf9accfa736efcc6  gcc/config/s390/s390.opt
  a70af895ec82511886ce63dc841e63e1  gcc/config/s390/s390.opt.urls
  b9ecea5f97b2e15b60d770050a07f0d1  gcc/config/s390/s390intrin.h
*************** dfb9fde7c7559a50905b02c01b6d6ee8  gcc/co
*** 5220,5226 ****
  bc0fb519f0c53f7b5e44aadede6fbfad  gcc/config/s390/tpf.opt
  34c54b547202715f11db388829243402  gcc/config/s390/tpf.opt.urls
  d225211a59c66716b9cad3d9a2f13af4  gcc/config/s390/vecintrin.h
! b78d2d00cf0938ded50a37660df36e17  gcc/config/s390/vector.md
  b652dfbe055d93c2aaaccee4bd169ec5  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  f9d87cd50e032287752597f9c084e3f5  gcc/config/sh/constraints.md
--- 5224,5230 ----
  bc0fb519f0c53f7b5e44aadede6fbfad  gcc/config/s390/tpf.opt
  34c54b547202715f11db388829243402  gcc/config/s390/tpf.opt.urls
  d225211a59c66716b9cad3d9a2f13af4  gcc/config/s390/vecintrin.h
! 8225293de23e243b64ebc1806e48467b  gcc/config/s390/vector.md
  b652dfbe055d93c2aaaccee4bd169ec5  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  f9d87cd50e032287752597f9c084e3f5  gcc/config/sh/constraints.md
*************** f378c965e5e289a389bbf48d20867d48  gcc/co
*** 5474,5481 ****
  b92f4879bce79aeae64e0091394f3cbe  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! 42f695f2886b6633d0fa88889ba57cb7  gcc/configure
! 28fe6769b957f08aa39dc2b5d4f8b70d  gcc/configure.ac
  ec3aa966ca3fe9c6f84d4378160541b6  gcc/context.cc
  d1bde52b8dee0c0c5506d7e320b1bb61  gcc/context.h
  a9c3cddee4e237141062720b72fe38cd  gcc/convert.cc
--- 5478,5485 ----
  b92f4879bce79aeae64e0091394f3cbe  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! e0206d81539aa917fcef027728d6213f  gcc/configure
! 589dce473c65acfa5e07dd7a2784fcb6  gcc/configure.ac
  ec3aa966ca3fe9c6f84d4378160541b6  gcc/context.cc
  d1bde52b8dee0c0c5506d7e320b1bb61  gcc/context.h
  a9c3cddee4e237141062720b72fe38cd  gcc/convert.cc
*************** a9c3cddee4e237141062720b72fe38cd  gcc/co
*** 5485,5491 ****
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  02796caeaa2f14f72dc3c9c23cc97dfc  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 6a0c667f5f46fb39c822373e6d3841c4  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5489,5495 ----
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  02796caeaa2f14f72dc3c9c23cc97dfc  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 24a2ed9ba8b28b2d509de7e31dd69208  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** bcf7c5d02934e40f17edeb18d58c4d4d  gcc/cp
*** 5521,5557 ****
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  2315f072c416e98144559bbdb5312c21  gcc/cp/Make-lang.in
! 0ce094339e77b5da889b95b631de6ec2  gcc/cp/call.cc
  fce8de27014c109814b3f69be6a5d4f6  gcc/cp/cfns.gperf
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
! 71e915c4bf9a6a90a42255716867b16f  gcc/cp/class.cc
  ee3fb2cc9b9557d3895f527353160bd4  gcc/cp/config-lang.in
! f4528fe082b7717ca5a8e492fb92e489  gcc/cp/constexpr.cc
  6ffd8d77b853d22c2d560e54c9d68fb9  gcc/cp/constraint.cc
  613233facbf4b0f1cff770ed6c49c666  gcc/cp/contracts.cc
  1f1cd3a021a2cd25741e252145ee8282  gcc/cp/contracts.h
  78ed5e7da2c45931ed1e44da5f9040c9  gcc/cp/coroutines.cc
  1817def94193f0cfabd4fa5b321af011  gcc/cp/coroutines.h
! b9cf1261aece8d386e351b2c8e279a16  gcc/cp/cp-gimplify.cc
  3bf6da2fd9bef7475fae5ee6d9cdcf15  gcc/cp/cp-lang.cc
  0083c32822e7d365ab0074f1807e8679  gcc/cp/cp-name-hint.h
  7e2d2d0cd98f02686590d57bb37c0de9  gcc/cp/cp-objcp-common.cc
  acb30767d403ad5a0d7ae97437159ebe  gcc/cp/cp-objcp-common.h
  da10ef04236f524fa56f82f602775a89  gcc/cp/cp-trait.def
  ce9f2ccac9e2657417018bc8f8064421  gcc/cp/cp-tree.def
! 355b1d6f5302ac5cdbd101ba461961ad  gcc/cp/cp-tree.h
  e5ccdda9d62d96ac397910d0fa391b0a  gcc/cp/cp-ubsan.cc
! 64450079a2dd9e5a8767bb5e4bf3d904  gcc/cp/cvt.cc
  28a2733b7abed60b2b102105bb7cebaf  gcc/cp/cxx-pretty-print.cc
  955ecfa636599a39229757737e271819  gcc/cp/cxx-pretty-print.h
  c1cc5dac36866c611933c037cc1d6f2f  gcc/cp/cxxapi-data.csv
! 924b1601147850d6f4538e748cd1cbcf  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
  a8747e45489cb64f2f4528a1973fcacf  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
  a3df348ec76b7ef7cfe2877aec7fffcc  gcc/cp/error.cc
  88b3c7658097d35045cd04dac2eb1d31  gcc/cp/except.cc
! f1581b369c1962c764264b1b2af61ca2  gcc/cp/expr.cc
  3b7c086cfb4ed89e6ae40a09ca796704  gcc/cp/friend.cc
  3d079dd21f8a1ab95fb2d1f96d799283  gcc/cp/g++spec.cc
  30b9ed40d39cf78b95792ef5dca2aebb  gcc/cp/gen-cxxapi-file.py
--- 5525,5561 ----
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  2315f072c416e98144559bbdb5312c21  gcc/cp/Make-lang.in
! 4a9cab8ddf338dc396a175e877afe6d0  gcc/cp/call.cc
  fce8de27014c109814b3f69be6a5d4f6  gcc/cp/cfns.gperf
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
! 7f0529acba840882ae2d5681da795c85  gcc/cp/class.cc
  ee3fb2cc9b9557d3895f527353160bd4  gcc/cp/config-lang.in
! d7a910d8076ff6f40b43f38af30e3d66  gcc/cp/constexpr.cc
  6ffd8d77b853d22c2d560e54c9d68fb9  gcc/cp/constraint.cc
  613233facbf4b0f1cff770ed6c49c666  gcc/cp/contracts.cc
  1f1cd3a021a2cd25741e252145ee8282  gcc/cp/contracts.h
  78ed5e7da2c45931ed1e44da5f9040c9  gcc/cp/coroutines.cc
  1817def94193f0cfabd4fa5b321af011  gcc/cp/coroutines.h
! 0891b03593ba6bcdf48dfd997f3f34b6  gcc/cp/cp-gimplify.cc
  3bf6da2fd9bef7475fae5ee6d9cdcf15  gcc/cp/cp-lang.cc
  0083c32822e7d365ab0074f1807e8679  gcc/cp/cp-name-hint.h
  7e2d2d0cd98f02686590d57bb37c0de9  gcc/cp/cp-objcp-common.cc
  acb30767d403ad5a0d7ae97437159ebe  gcc/cp/cp-objcp-common.h
  da10ef04236f524fa56f82f602775a89  gcc/cp/cp-trait.def
  ce9f2ccac9e2657417018bc8f8064421  gcc/cp/cp-tree.def
! 79f4301815332bcffc93f9e7f8bcc955  gcc/cp/cp-tree.h
  e5ccdda9d62d96ac397910d0fa391b0a  gcc/cp/cp-ubsan.cc
! b7ae95468b0150bbe2b3cba351e96a2c  gcc/cp/cvt.cc
  28a2733b7abed60b2b102105bb7cebaf  gcc/cp/cxx-pretty-print.cc
  955ecfa636599a39229757737e271819  gcc/cp/cxx-pretty-print.h
  c1cc5dac36866c611933c037cc1d6f2f  gcc/cp/cxxapi-data.csv
! 3c32eb852766c731f6feab4e6d023496  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
  a8747e45489cb64f2f4528a1973fcacf  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
  a3df348ec76b7ef7cfe2877aec7fffcc  gcc/cp/error.cc
  88b3c7658097d35045cd04dac2eb1d31  gcc/cp/except.cc
! 73d53be529221aad38fb412e9e7d1ee3  gcc/cp/expr.cc
  3b7c086cfb4ed89e6ae40a09ca796704  gcc/cp/friend.cc
  3d079dd21f8a1ab95fb2d1f96d799283  gcc/cp/g++spec.cc
  30b9ed40d39cf78b95792ef5dca2aebb  gcc/cp/gen-cxxapi-file.py
*************** aaf76a9b03fd0532d2904aef004fd66a  gcc/cp
*** 5565,5587 ****
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  8bace54cefb0ac9061a21ae69213043d  gcc/cp/method.cc
! f14eedffddbe029e240b18feff91808f  gcc/cp/module.cc
  06f95ada11e42d69946cf7b65d247c53  gcc/cp/name-lookup.cc
  6e376c0a7ec6c4a14de40885e3b1a0cb  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
  cb58b434119f74350f0353679cad0eb1  gcc/cp/parser.cc
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
! 37ae0416c27bbfa7f62108a25227b6d7  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
  ee1ddf1e1b9554bb1a10109ce8c6dee5  gcc/cp/rtti.cc
  a4930c49ed8f9e6b019399bd1faf86d0  gcc/cp/search.cc
! 2a61683346cd9d21a543601736a3c423  gcc/cp/semantics.cc
  b58bf61fbfed45af179b7104e72a9486  gcc/cp/std-name-hint.gperf
  2425db76c32085977eff047c982cebab  gcc/cp/std-name-hint.h
  360fbad46e0539fd434f268f76ae2d9d  gcc/cp/tree.cc
  bb1304379ac1bf9a568942bc7e976e8a  gcc/cp/type-utils.h
! 1a4aed25c160a8bfa4771fe4e385fc97  gcc/cp/typeck.cc
  1fea2b59dbf93b59626d7546b3c1f738  gcc/cp/typeck2.cc
  aa6906e22dc44502ca268580e5b8dfdd  gcc/cp/vtable-class-hierarchy.cc
  c74d2f6cc5dcb1bf1953c093eb903b37  gcc/cppbuiltin.cc
--- 5569,5591 ----
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  8bace54cefb0ac9061a21ae69213043d  gcc/cp/method.cc
! fa764aa6d94c6032a884155a3a442c62  gcc/cp/module.cc
  06f95ada11e42d69946cf7b65d247c53  gcc/cp/name-lookup.cc
  6e376c0a7ec6c4a14de40885e3b1a0cb  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
  cb58b434119f74350f0353679cad0eb1  gcc/cp/parser.cc
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
! 1dc403e27640c8f4cf3702e4c06ad69b  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
  ee1ddf1e1b9554bb1a10109ce8c6dee5  gcc/cp/rtti.cc
  a4930c49ed8f9e6b019399bd1faf86d0  gcc/cp/search.cc
! ca008066743d497e321364e5d175c6de  gcc/cp/semantics.cc
  b58bf61fbfed45af179b7104e72a9486  gcc/cp/std-name-hint.gperf
  2425db76c32085977eff047c982cebab  gcc/cp/std-name-hint.h
  360fbad46e0539fd434f268f76ae2d9d  gcc/cp/tree.cc
  bb1304379ac1bf9a568942bc7e976e8a  gcc/cp/type-utils.h
! 791bac04d6637f4df754c7f2c13154ec  gcc/cp/typeck.cc
  1fea2b59dbf93b59626d7546b3c1f738  gcc/cp/typeck2.cc
  aa6906e22dc44502ca268580e5b8dfdd  gcc/cp/vtable-class-hierarchy.cc
  c74d2f6cc5dcb1bf1953c093eb903b37  gcc/cppbuiltin.cc
*************** aa13c8ce0ee0d35ca8e78fef45b93463  gcc/di
*** 5873,5879 ****
  b14c12c33aee36a4d29601627a1a67da  gcc/diagnostic-core.h
  be405b20597be971120eee5709db8c4a  gcc/diagnostic-diagram.h
  464f9293a5979b80b6bc2271616a7c79  gcc/diagnostic-digraphs.cc
! 4133431076d9245cf51c3faf424728e9  gcc/diagnostic-digraphs.h
  a24233a009f0c9d29e034e6ba63082de  gcc/diagnostic-event-id.h
  b2690a6e98ac797223d7202794c41601  gcc/diagnostic-format-html.cc
  ebcf925d650be4ee570760e6dc64702a  gcc/diagnostic-format-html.h
--- 5877,5883 ----
  b14c12c33aee36a4d29601627a1a67da  gcc/diagnostic-core.h
  be405b20597be971120eee5709db8c4a  gcc/diagnostic-diagram.h
  464f9293a5979b80b6bc2271616a7c79  gcc/diagnostic-digraphs.cc
! fcb6ed742d3249e66ed6302ccb9291a6  gcc/diagnostic-digraphs.h
  a24233a009f0c9d29e034e6ba63082de  gcc/diagnostic-event-id.h
  b2690a6e98ac797223d7202794c41601  gcc/diagnostic-format-html.cc
  ebcf925d650be4ee570760e6dc64702a  gcc/diagnostic-format-html.h
*************** da65429c71b4fa43fe8a32a4a073b4d7  gcc/di
*** 5895,5905 ****
  b3ce84de2a59b7673f4ed0887c4f34db  gcc/diagnostic-path.cc
  d368f70a65d9c4125f8440d91dded353  gcc/diagnostic-path.h
  cde9b376952f76ba61798ba6e4cb4f6b  gcc/diagnostic-show-locus.cc
! 7647e73c385e607426bf1e92ad468b09  gcc/diagnostic-spec.cc
  375a39d1eff397ae7fcdce6e05c76d50  gcc/diagnostic-spec.h
  d2869ace5760e8df245accf7765dd13f  gcc/diagnostic-state-graphs.cc
  0d39634f418b8220e258f405ac55f110  gcc/diagnostic-state-graphs.h
! 3d77ebc49d859c3020e5103d106425e8  gcc/diagnostic-state-to-dot.cc
  dabd477d68c54372f8519e7c917d4a11  gcc/diagnostic-url.h
  53ba40a82691983ff26a03a15d41c587  gcc/diagnostic.cc
  03b04b0fb78353ca76570e5ef92cf756  gcc/diagnostic.def
--- 5899,5909 ----
  b3ce84de2a59b7673f4ed0887c4f34db  gcc/diagnostic-path.cc
  d368f70a65d9c4125f8440d91dded353  gcc/diagnostic-path.h
  cde9b376952f76ba61798ba6e4cb4f6b  gcc/diagnostic-show-locus.cc
! 6b93e61211f8001b7a53df197d64a3e4  gcc/diagnostic-spec.cc
  375a39d1eff397ae7fcdce6e05c76d50  gcc/diagnostic-spec.h
  d2869ace5760e8df245accf7765dd13f  gcc/diagnostic-state-graphs.cc
  0d39634f418b8220e258f405ac55f110  gcc/diagnostic-state-graphs.h
! 47c9fcb4830ef835cb2d6c8c288bd305  gcc/diagnostic-state-to-dot.cc
  dabd477d68c54372f8519e7c917d4a11  gcc/diagnostic-url.h
  53ba40a82691983ff26a03a15d41c587  gcc/diagnostic.cc
  03b04b0fb78353ca76570e5ef92cf756  gcc/diagnostic.def
*************** ee4c7654f733cefcb73d4fd24f3e1b82  gcc/do
*** 5944,5969 ****
  9512a9fe27682edff7dd2ed171bbb853  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! 8e229b4231160873fbe34414e9f77cf9  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! 4c2c3be0e5074b7a133470c74ebd235f  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
  8258127c283eb86e07e4235453e8f336  gcc/doc/libgdiagnostics/conf.py
  ad0e2d047092c8659655e677a43966ee  gcc/doc/libgdiagnostics/index.rst
  642a964912e66e816e321e71891b81ec  gcc/doc/libgdiagnostics/make.bat
! 63e76ac67ca07c00847062ca5afb6f3b  gcc/doc/libgdiagnostics/topics/compatibility.rst
  4761a880e4b1105b0fdcdc91ec2a42a9  gcc/doc/libgdiagnostics/topics/diagnostic-manager.rst
! a7bea9ecf04c0cd9ecf9672ecf8322c5  gcc/doc/libgdiagnostics/topics/diagnostics.rst
! 1f63cad855ba6a1f526a9e6f34fad68a  gcc/doc/libgdiagnostics/topics/execution-paths.rst
  250f44ab2a231fb8b791329c27af8d3f  gcc/doc/libgdiagnostics/topics/fix-it-hints.rst
  6d039d959cbe81bb3a2221d73a4a2cf1  gcc/doc/libgdiagnostics/topics/graphs.rst
! b89283653109c18e68baadfe50c936b2  gcc/doc/libgdiagnostics/topics/index.rst
  d1893dd33c0eff5611e2d5074c4bcdf5  gcc/doc/libgdiagnostics/topics/logical-locations.rst
! 94567ac644895fb88b40155f06787984  gcc/doc/libgdiagnostics/topics/message-formatting.rst
  40685321954d4fa5d32a979167f6cb18  gcc/doc/libgdiagnostics/topics/metadata.rst
! 183c104feaddaeab02d7705dce8f67d4  gcc/doc/libgdiagnostics/topics/physical-locations.rst
  534ab14553cfa381509e11ccaff7c1e7  gcc/doc/libgdiagnostics/topics/retrofitting.rst
  9bc72c12625c40dd6808a39a5c45edd7  gcc/doc/libgdiagnostics/topics/sarif.rst
  88d9f17024ba6da5d5e27b7d2e7103e5  gcc/doc/libgdiagnostics/topics/text-output.rst
--- 5948,5974 ----
  9512a9fe27682edff7dd2ed171bbb853  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! 4305959a834ee61a00e9e5b499d8d116  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! e868f5445e612f5e68a6d79f5e400f3b  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
  8258127c283eb86e07e4235453e8f336  gcc/doc/libgdiagnostics/conf.py
  ad0e2d047092c8659655e677a43966ee  gcc/doc/libgdiagnostics/index.rst
  642a964912e66e816e321e71891b81ec  gcc/doc/libgdiagnostics/make.bat
! 3dbbc5e211bf46b54037d94121cfc68a  gcc/doc/libgdiagnostics/topics/compatibility.rst
  4761a880e4b1105b0fdcdc91ec2a42a9  gcc/doc/libgdiagnostics/topics/diagnostic-manager.rst
! d4f064f41d2354a7c3b85b373c9ac47d  gcc/doc/libgdiagnostics/topics/diagnostics.rst
! 4bc5e362e544520246f160590ccbe6e0  gcc/doc/libgdiagnostics/topics/execution-paths.rst
  250f44ab2a231fb8b791329c27af8d3f  gcc/doc/libgdiagnostics/topics/fix-it-hints.rst
  6d039d959cbe81bb3a2221d73a4a2cf1  gcc/doc/libgdiagnostics/topics/graphs.rst
! 2d7958f0f1e8190bc398fb175a4bf512  gcc/doc/libgdiagnostics/topics/index.rst
  d1893dd33c0eff5611e2d5074c4bcdf5  gcc/doc/libgdiagnostics/topics/logical-locations.rst
! 628d5ff1e2f48f6c201e0e1c5eeb0e2c  gcc/doc/libgdiagnostics/topics/message-buffers.rst
! 0752956422ba087dd7516beb7b222566  gcc/doc/libgdiagnostics/topics/message-formatting.rst
  40685321954d4fa5d32a979167f6cb18  gcc/doc/libgdiagnostics/topics/metadata.rst
! 67d8d400035479fd942d4446374cd27e  gcc/doc/libgdiagnostics/topics/physical-locations.rst
  534ab14553cfa381509e11ccaff7c1e7  gcc/doc/libgdiagnostics/topics/retrofitting.rst
  9bc72c12625c40dd6808a39a5c45edd7  gcc/doc/libgdiagnostics/topics/sarif.rst
  88d9f17024ba6da5d5e27b7d2e7103e5  gcc/doc/libgdiagnostics/topics/text-output.rst
*************** a6692cc7804ad0cff13d1791b8008032  gcc/do
*** 5974,5982 ****
  5d22b5f5e5f0f4b8fa2e10a3a2fe166b  gcc/doc/libgdiagnostics/tutorial/04-notes.rst
  082aed6f429f621f1272ece15582d1e6  gcc/doc/libgdiagnostics/tutorial/05-warnings.rst
  053b367b91dc75073bc9355bae36c16c  gcc/doc/libgdiagnostics/tutorial/06-fix-it-hints.rst
! 232f4480c9f8e69ab71831d39dbbdc27  gcc/doc/libgdiagnostics/tutorial/07-execution-paths.rst
  e0cdf1b3b23ffeebe52940c4ad627db6  gcc/doc/libgdiagnostics/tutorial/example-1.png
! 5402cddcce87202cec6f30b8bb787a75  gcc/doc/libgdiagnostics/tutorial/index.rst
  a1f65f3aec3cc5d5b6505fb976d4c216  gcc/doc/loop.texi
  124b06847fae76f01f1c6a0b1adf9a15  gcc/doc/lto-dump.texi
  c98feb0a43876ed3ef2fca3c8448e8f8  gcc/doc/lto.texi
--- 5979,5988 ----
  5d22b5f5e5f0f4b8fa2e10a3a2fe166b  gcc/doc/libgdiagnostics/tutorial/04-notes.rst
  082aed6f429f621f1272ece15582d1e6  gcc/doc/libgdiagnostics/tutorial/05-warnings.rst
  053b367b91dc75073bc9355bae36c16c  gcc/doc/libgdiagnostics/tutorial/06-fix-it-hints.rst
! acf1cff7c0e3e0b93d2b5258eb06e4e5  gcc/doc/libgdiagnostics/tutorial/07-execution-paths.rst
! 60833ed9614761b764ced16abc85871c  gcc/doc/libgdiagnostics/tutorial/08-message-buffers.rst
  e0cdf1b3b23ffeebe52940c4ad627db6  gcc/doc/libgdiagnostics/tutorial/example-1.png
! 15963e4af10abf9c6fa11d9b4dfa074e  gcc/doc/libgdiagnostics/tutorial/index.rst
  a1f65f3aec3cc5d5b6505fb976d4c216  gcc/doc/loop.texi
  124b06847fae76f01f1c6a0b1adf9a15  gcc/doc/lto-dump.texi
  c98feb0a43876ed3ef2fca3c8448e8f8  gcc/doc/lto.texi
*************** cc8e010fe28e3129f0f50cb24cfca188  gcc/do
*** 5990,5999 ****
  2cd0efa7c8a7f870d4a0c0b2eed69798  gcc/doc/plugins.texi
  0603ab3940871fa2a55ddbd7c2719eb7  gcc/doc/poly-int.texi
  ee33d902cd60afae792843ff15ad6706  gcc/doc/portability.texi
! 1a9eb871f5f2f24159e18390feeb3c11  gcc/doc/riscv-ext.texi
  8489e4a02a5daa1d1ae726383b330653  gcc/doc/rtl.texi
  bd20fd07c5ee8f444bf1d3f5e64e066a  gcc/doc/service.texi
! 3c3105596d0ba4f191b01df9e1bfcf8b  gcc/doc/sourcebuild.texi
  324bbfba4e1ce0b6019ce86e466edde0  gcc/doc/standards.texi
  fd3bf27e33907464460ab9208cdd2240  gcc/doc/tm.texi
  06d0869eb2bec892f989f31bcd7da233  gcc/doc/tm.texi.in
--- 5996,6005 ----
  2cd0efa7c8a7f870d4a0c0b2eed69798  gcc/doc/plugins.texi
  0603ab3940871fa2a55ddbd7c2719eb7  gcc/doc/poly-int.texi
  ee33d902cd60afae792843ff15ad6706  gcc/doc/portability.texi
! 0c865035eff364f0166f1a05e30b23ff  gcc/doc/riscv-ext.texi
  8489e4a02a5daa1d1ae726383b330653  gcc/doc/rtl.texi
  bd20fd07c5ee8f444bf1d3f5e64e066a  gcc/doc/service.texi
! cdeab873fffaddbd520f6837429ae728  gcc/doc/sourcebuild.texi
  324bbfba4e1ce0b6019ce86e466edde0  gcc/doc/standards.texi
  fd3bf27e33907464460ab9208cdd2240  gcc/doc/tm.texi
  06d0869eb2bec892f989f31bcd7da233  gcc/doc/tm.texi.in
*************** ada0afb884a142f8214291990679be13  gcc/fo
*** 6057,6063 ****
  6dd1484a5224f1070c3b6065080cb93d  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! 396cb6d70adf8d45b4b594388be93cae  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6063,6069 ----
  6dd1484a5224f1070c3b6065080cb93d  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! dbc6c48baeb4a524d39961220006c227  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** e2cec99de05b647cb16807fa80637b97  gcc/fo
*** 6098,6104 ****
  b7e224f665bb5044ce35ed09435bd4fb  gcc/fortran/cpp.h
  a232f4d280ad08511e2718281b3d1ab6  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
! 8d7df189b0a47a29f29025d0be83cae3  gcc/fortran/decl.cc
  c33e2c4c7527bec8a125dd093dc59f2a  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  b6cce6988f87edda182aec1b6c3cd291  gcc/fortran/dump-parse-tree.cc
--- 6104,6110 ----
  b7e224f665bb5044ce35ed09435bd4fb  gcc/fortran/cpp.h
  a232f4d280ad08511e2718281b3d1ab6  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
! 0bc81dcceecfd364e3a394dcf7d7a1ba  gcc/fortran/decl.cc
  c33e2c4c7527bec8a125dd093dc59f2a  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  b6cce6988f87edda182aec1b6c3cd291  gcc/fortran/dump-parse-tree.cc
*************** db184b6596cd9f39834087b0dc7d0ed8  gcc/fo
*** 6108,6117 ****
  e188a9b3cb73106cab46a15d36a12b66  gcc/fortran/frontend-passes.cc
  a39f360f255f1ef6dfd91ccefef63e05  gcc/fortran/gfc-diagnostic.def
  bd08c55098f00394b9922e6163c27b92  gcc/fortran/gfc-internals.texi
! 022efbb5903fcbd2473329fe62c51f74  gcc/fortran/gfortran.h
  d29bb6813221f46b4cde9df77292c412  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
! d3fd647d14d10316a01447090ed2bbac  gcc/fortran/interface.cc
  18ca0ff7b9d543b25078031bfadf0d2f  gcc/fortran/intrinsic.cc
  751fb9c42a3297fe53e0e7de9564bb27  gcc/fortran/intrinsic.h
  e201f79869851c4fac61004ffd907741  gcc/fortran/intrinsic.texi
--- 6114,6123 ----
  e188a9b3cb73106cab46a15d36a12b66  gcc/fortran/frontend-passes.cc
  a39f360f255f1ef6dfd91ccefef63e05  gcc/fortran/gfc-diagnostic.def
  bd08c55098f00394b9922e6163c27b92  gcc/fortran/gfc-internals.texi
! 03fba586e92d2a8043690f35ab3a54fc  gcc/fortran/gfortran.h
  d29bb6813221f46b4cde9df77292c412  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
! 9253f176e44c2708e2c503251b27d6b8  gcc/fortran/interface.cc
  18ca0ff7b9d543b25078031bfadf0d2f  gcc/fortran/intrinsic.cc
  751fb9c42a3297fe53e0e7de9564bb27  gcc/fortran/intrinsic.h
  e201f79869851c4fac61004ffd907741  gcc/fortran/intrinsic.texi
*************** e0ae917f78fe49a1e67153dca52a68b2  gcc/fo
*** 6136,6142 ****
  f9dfcfe624705f792e9784bfbd2020f8  gcc/fortran/parse.cc
  c1b40e866a8bbe611aa65278fe2508d3  gcc/fortran/parse.h
  8282ea5f4e00d5c64da552ea2f31dcc6  gcc/fortran/primary.cc
! 02d902c172e38606089698e4b64910d1  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fortran/simplify.cc
--- 6142,6148 ----
  f9dfcfe624705f792e9784bfbd2020f8  gcc/fortran/parse.cc
  c1b40e866a8bbe611aa65278fe2508d3  gcc/fortran/parse.h
  8282ea5f4e00d5c64da552ea2f31dcc6  gcc/fortran/primary.cc
! 16389ecb7ba7112a7bf2b5e4ccc9ee97  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fortran/simplify.cc
*************** d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fo
*** 6144,6159 ****
  7fc6fb7f159830fc0d98a9cd72e5cdf9  gcc/fortran/symbol.cc
  c9238712914e77b971fde08221a31bf7  gcc/fortran/target-memory.cc
  50451f5a575ab606948f8e72d8cc4721  gcc/fortran/target-memory.h
! b637bbf1b4362769a8e5bf098ea923f0  gcc/fortran/trans-array.cc
  a4f5f15bbfd3cf3b780e3a8875ebf0df  gcc/fortran/trans-array.h
  134a72b3349d427eccb35198acc48a71  gcc/fortran/trans-common.cc
  d555f911945a83db335013815934e941  gcc/fortran/trans-const.cc
  857805820c2a6ac77d2652c610d23de8  gcc/fortran/trans-const.h
  d8e305ea46f72c347ae93f0ab9d8337a  gcc/fortran/trans-decl.cc
! f2b893974de6e6bfb2084ebaf6f1f144  gcc/fortran/trans-expr.cc
  3ad3e35ee05a5e83c9c5fde26d452722  gcc/fortran/trans-intrinsic.cc
  9cf7c294c06fdaea67dcd2b9ff2cf5ad  gcc/fortran/trans-io.cc
! a29b3916884e7a58f175008eccd0820b  gcc/fortran/trans-openmp.cc
  fb800e2974a1e338a5366fdb5819d11a  gcc/fortran/trans-stmt.cc
  9caf8a2f93e6cf5e2a567a3aa18f957c  gcc/fortran/trans-stmt.h
  23c951c4924ba8a16582a8b9e5065a87  gcc/fortran/trans-types.cc
--- 6150,6165 ----
  7fc6fb7f159830fc0d98a9cd72e5cdf9  gcc/fortran/symbol.cc
  c9238712914e77b971fde08221a31bf7  gcc/fortran/target-memory.cc
  50451f5a575ab606948f8e72d8cc4721  gcc/fortran/target-memory.h
! f46b8f88b0634e92490a82980d24996c  gcc/fortran/trans-array.cc
  a4f5f15bbfd3cf3b780e3a8875ebf0df  gcc/fortran/trans-array.h
  134a72b3349d427eccb35198acc48a71  gcc/fortran/trans-common.cc
  d555f911945a83db335013815934e941  gcc/fortran/trans-const.cc
  857805820c2a6ac77d2652c610d23de8  gcc/fortran/trans-const.h
  d8e305ea46f72c347ae93f0ab9d8337a  gcc/fortran/trans-decl.cc
! 67d9ed79c93a6bd0af7ea803b4387c72  gcc/fortran/trans-expr.cc
  3ad3e35ee05a5e83c9c5fde26d452722  gcc/fortran/trans-intrinsic.cc
  9cf7c294c06fdaea67dcd2b9ff2cf5ad  gcc/fortran/trans-io.cc
! ec953a4922656d79301eb36337b9d297  gcc/fortran/trans-openmp.cc
  fb800e2974a1e338a5366fdb5819d11a  gcc/fortran/trans-stmt.cc
  9caf8a2f93e6cf5e2a567a3aa18f957c  gcc/fortran/trans-stmt.h
  23c951c4924ba8a16582a8b9e5065a87  gcc/fortran/trans-types.cc
*************** cfc9ab0c22b99f57253142ecc5b4e462  gcc/gc
*** 6189,6195 ****
  75b76f17591eaadacbf2760164205f52  gcc/gcov.cc
  2a8393570ec2f0f06d815562e3e84f78  gcc/gcse-common.cc
  592e70d614695b5fba65cd68c9112587  gcc/gcse-common.h
! f71783194d63d3c2bcbe8eb098359232  gcc/gcse.cc
  e5a3a3a1ad466d441c8c2f6c2ac6c208  gcc/gcse.h
  af83e4b4719ee065872080b713d24c2f  gcc/gdbasan.in
  73e9039221d34e77933a5626ce0294a5  gcc/gdbhooks.py
--- 6195,6201 ----
  75b76f17591eaadacbf2760164205f52  gcc/gcov.cc
  2a8393570ec2f0f06d815562e3e84f78  gcc/gcse-common.cc
  592e70d614695b5fba65cd68c9112587  gcc/gcse-common.h
! a44c1a607d9b75afc7b5bd869ae5342a  gcc/gcse.cc
  e5a3a3a1ad466d441c8c2f6c2ac6c208  gcc/gcse.h
  af83e4b4719ee065872080b713d24c2f  gcc/gdbasan.in
  73e9039221d34e77933a5626ce0294a5  gcc/gdbhooks.py
*************** da09d1e31d3994eb3d6958074d7b7ce5  gcc/gi
*** 6246,6252 ****
  fea7635818b5d7cefd4c7a0b268a254c  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
! b7e7d16c1d3f5a2ef24a98ecf3d12f60  gcc/gimple-fold.cc
  11c53c7404f0a514ba936db118da8027  gcc/gimple-fold.h
  43ad47e8cd99d438040cf6937a3cbe5e  gcc/gimple-harden-conditionals.cc
  78586a1c0ce6834da91809b77f98c6d7  gcc/gimple-harden-control-flow.cc
--- 6252,6258 ----
  fea7635818b5d7cefd4c7a0b268a254c  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
! 6379ff4ed1ffcbf4c1b80ab31386cb8d  gcc/gimple-fold.cc
  11c53c7404f0a514ba936db118da8027  gcc/gimple-fold.h
  43ad47e8cd99d438040cf6937a3cbe5e  gcc/gimple-harden-conditionals.cc
  78586a1c0ce6834da91809b77f98c6d7  gcc/gimple-harden-control-flow.cc
*************** b417ca4d3d865879d0e642790dafa8cf  gcc/gi
*** 6297,6303 ****
  7cc5761502132b3ca93063369ba8f5c0  gcc/gimple-ssa-sccopy.cc
  b551cb1f1566bf3aa2bca3816f2b1c98  gcc/gimple-ssa-split-paths.cc
  c7ec9ee38b6e99c1260bd3e794ead05f  gcc/gimple-ssa-sprintf.cc
! 827b9a16d251acce8466dcb4fc8420da  gcc/gimple-ssa-store-merging.cc
  5081e3b07e7210c50573a328ecd9e1b9  gcc/gimple-ssa-strength-reduction.cc
  66204acf1955fed6a7d167d0683a9eb4  gcc/gimple-ssa-warn-access.cc
  3ae7b597d9d5e0c5ba61dc7ee8a7f2c2  gcc/gimple-ssa-warn-access.h
--- 6303,6309 ----
  7cc5761502132b3ca93063369ba8f5c0  gcc/gimple-ssa-sccopy.cc
  b551cb1f1566bf3aa2bca3816f2b1c98  gcc/gimple-ssa-split-paths.cc
  c7ec9ee38b6e99c1260bd3e794ead05f  gcc/gimple-ssa-sprintf.cc
! 8f1815709a32b0e5c4ba7a1b88614d35  gcc/gimple-ssa-store-merging.cc
  5081e3b07e7210c50573a328ecd9e1b9  gcc/gimple-ssa-strength-reduction.cc
  66204acf1955fed6a7d167d0683a9eb4  gcc/gimple-ssa-warn-access.cc
  3ae7b597d9d5e0c5ba61dc7ee8a7f2c2  gcc/gimple-ssa-warn-access.h
*************** b42b320008114fef074bfc7fdb234491  gcc/gi
*** 6316,6322 ****
  0d2ea6d085781aa930769ca37d5d3a08  gcc/gimple.h
  140b5c45a362b9c0c981b683560d4ef8  gcc/gimplify-me.cc
  84814cb09300f3db388dd0d22133ccb4  gcc/gimplify-me.h
! f0a53386866ab2a3ee350d3ed98f8271  gcc/gimplify.cc
  06f2b5470f6bc6f77e9b7966e34e5785  gcc/gimplify.h
  7df17d7c2bcdff0a474d633a02195544  gcc/ginclude/float.h
  d22f0a286107015428c4b28c0d17abda  gcc/ginclude/iso646.h
--- 6322,6328 ----
  0d2ea6d085781aa930769ca37d5d3a08  gcc/gimple.h
  140b5c45a362b9c0c981b683560d4ef8  gcc/gimplify-me.cc
  84814cb09300f3db388dd0d22133ccb4  gcc/gimplify-me.h
! 73e34bd428b8e4493a229bf917e9eda5  gcc/gimplify.cc
  06f2b5470f6bc6f77e9b7966e34e5785  gcc/gimplify.h
  7df17d7c2bcdff0a474d633a02195544  gcc/ginclude/float.h
  d22f0a286107015428c4b28c0d17abda  gcc/ginclude/iso646.h
*************** d7408ac6c915c3e2f58cd40bdb6a0671  gcc/gi
*** 6335,6341 ****
  18dd241fd4e77ac61edc90586b9fb2b6  gcc/ginclude/unwind-arm-common.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
  b41648f499a7db07e24806aae26998b5  gcc/glimits.h
! 4e259b2b9655a5bfefd7ad9ed75efab1  gcc/go/ChangeLog
  e697a6a6e7d6942b7375c665c70d34b4  gcc/go/Make-lang.in
  60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
  88217f68368328f3ce651c46f0830df8  gcc/go/config-lang.in
--- 6341,6347 ----
  18dd241fd4e77ac61edc90586b9fb2b6  gcc/ginclude/unwind-arm-common.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
  b41648f499a7db07e24806aae26998b5  gcc/glimits.h
! b62287412904be40f5aa091236357f21  gcc/go/ChangeLog
  e697a6a6e7d6942b7375c665c70d34b4  gcc/go/Make-lang.in
  60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
  88217f68368328f3ce651c46f0830df8  gcc/go/config-lang.in
*************** c08c0bc386a3e50faacf99daf94c080f  gcc/go
*** 6375,6381 ****
  ead5ac25b7b99d361225e0fd940e286a  gcc/go/gofrontend/go-optimize.h
  5b59619fab7e543c5bb28dd8a6d62793  gcc/go/gofrontend/go-sha1.h
  8dded449a650e2e8c365f702612afc24  gcc/go/gofrontend/go.cc
! de2305aa7bc4990b7b5eaeb21c3a856f  gcc/go/gofrontend/gogo.cc
  4b5329e9d8c401009b4b1ca29c4c4c29  gcc/go/gofrontend/gogo.h
  f9015ccccf7764d4c6eeae1bd5e01c7f  gcc/go/gofrontend/import-archive.cc
  e79da7b293afd4faedb3f5e30c60ef51  gcc/go/gofrontend/import.cc
--- 6381,6387 ----
  ead5ac25b7b99d361225e0fd940e286a  gcc/go/gofrontend/go-optimize.h
  5b59619fab7e543c5bb28dd8a6d62793  gcc/go/gofrontend/go-sha1.h
  8dded449a650e2e8c365f702612afc24  gcc/go/gofrontend/go.cc
! fab057ac93544c90861c9f7d8bddf49f  gcc/go/gofrontend/gogo.cc
  4b5329e9d8c401009b4b1ca29c4c4c29  gcc/go/gofrontend/gogo.h
  f9015ccccf7764d4c6eeae1bd5e01c7f  gcc/go/gofrontend/import-archive.cc
  e79da7b293afd4faedb3f5e30c60ef51  gcc/go/gofrontend/import.cc
*************** b3d2e0a4fdb1acc7d7c1d1222ec7077d  gcc/in
*** 6451,6459 ****
  0dc4e5a1c70a5b34153b06594dd3ae85  gcc/insn-addr.h
  eec072fb4c8277a3634cf4cdc0846598  gcc/insn-notes.def
  769443add1b7187045688cd8b1129647  gcc/int-vector-builder.h
! 65e5ea57a7635be3ed1a50490c0cc786  gcc/internal-fn.cc
  9f50a396585727515baa235ec39f1f04  gcc/internal-fn.def
! 329c266487376ce133d0e9e580fc7a58  gcc/internal-fn.h
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
--- 6457,6465 ----
  0dc4e5a1c70a5b34153b06594dd3ae85  gcc/insn-addr.h
  eec072fb4c8277a3634cf4cdc0846598  gcc/insn-notes.def
  769443add1b7187045688cd8b1129647  gcc/int-vector-builder.h
! 072b5fe703f4a0dcbcfb4af0dff9645b  gcc/internal-fn.cc
  9f50a396585727515baa235ec39f1f04  gcc/internal-fn.def
! ef535a32c5b6f227a666c63523f6bb80  gcc/internal-fn.h
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
*************** e02101954d14c2f0b6a7667db7690ade  gcc/ip
*** 6492,6498 ****
  d4930f12a999a28238b013539b631f2f  gcc/ipa-reference.h
  6a30eb3fed6340a45b517d7507d8f96a  gcc/ipa-split.cc
  128fc9f66e07a64e6ebecfe0e1f78765  gcc/ipa-sra.cc
! acc1e51dba066adf0e91320e5f538606  gcc/ipa-strub.cc
  7441ae66ef417a1eed323b8c98c8e589  gcc/ipa-strub.h
  15fb2e7205c9068dc163478055d814aa  gcc/ipa-utils.cc
  3123c1da10da09196605cf2b230afdcd  gcc/ipa-utils.h
--- 6498,6504 ----
  d4930f12a999a28238b013539b631f2f  gcc/ipa-reference.h
  6a30eb3fed6340a45b517d7507d8f96a  gcc/ipa-split.cc
  128fc9f66e07a64e6ebecfe0e1f78765  gcc/ipa-sra.cc
! 1277e7fb1c75f935550a926b823894bf  gcc/ipa-strub.cc
  7441ae66ef417a1eed323b8c98c8e589  gcc/ipa-strub.h
  15fb2e7205c9068dc163478055d814aa  gcc/ipa-utils.cc
  3123c1da10da09196605cf2b230afdcd  gcc/ipa-utils.h
*************** dc9c6fb11d3b3fffe354eff3daf0454c  gcc/la
*** 6611,6622 ****
  82e3d15b2545a4e7a7397d6396eb74fe  gcc/lcm.cc
  bdf8ae675ae5000d854fe2874116b2f8  gcc/lcm.h
  027270d0be504f25a7efb49e1e3179bb  gcc/libfuncs.h
! 19bffdb58ca2390191a33f6e3959fea3  gcc/libgdiagnostics++.h
! bb66c68907e71f082f95f778ff54577f  gcc/libgdiagnostics-private.h
! 3a6748e0b91c1eb7127d32e9bb137a37  gcc/libgdiagnostics.cc
! 94edd60f6c82a0ae7cda33e4031da235  gcc/libgdiagnostics.h
! 06464aef81a880d0ddcf7d22159a5521  gcc/libgdiagnostics.map
! 028f8ae1adfa36c6822ea0c4be8d5b9c  gcc/libsarifreplay.cc
  5e320a3249f5b8b266e2c69c6282315e  gcc/libsarifreplay.h
  5c6a6e21474ca46c652e3149d4068fe3  gcc/limitx.h
  83de5c6450456e215a5484083afcd32a  gcc/limity.h
--- 6617,6628 ----
  82e3d15b2545a4e7a7397d6396eb74fe  gcc/lcm.cc
  bdf8ae675ae5000d854fe2874116b2f8  gcc/lcm.h
  027270d0be504f25a7efb49e1e3179bb  gcc/libfuncs.h
! 4934dab1d3161ae645ccdd3dac3052e5  gcc/libgdiagnostics++.h
! bce08e1b835bdbc920273360f191e171  gcc/libgdiagnostics-private.h
! 50ac57870c0750f8487e1ad7668dd606  gcc/libgdiagnostics.cc
! ca1796ca207d8fcda43cdef3d49a39fb  gcc/libgdiagnostics.h
! 02da43cd6bde252a34ecb0feb6468592  gcc/libgdiagnostics.map
! b880ba39f0ac4bfd6f9a6202231ebada  gcc/libsarifreplay.cc
  5e320a3249f5b8b266e2c69c6282315e  gcc/libsarifreplay.h
  5c6a6e21474ca46c652e3149d4068fe3  gcc/limitx.h
  83de5c6450456e215a5484083afcd32a  gcc/limity.h
*************** e44c0bf9cc0411d7bd57c6585eb6d0e4  gcc/lt
*** 6681,6687 ****
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 47eeb810b7bd1b230e60753ac1b8905e  gcc/m2/ChangeLog
  33352ea845a8d2399793299f3e58a218  gcc/m2/Make-lang.in
  93fe99bf456561cd217f1c93d2ab7da7  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
--- 6687,6693 ----
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! aaffdd064a07b0d2264930fa08c87dfb  gcc/m2/ChangeLog
  33352ea845a8d2399793299f3e58a218  gcc/m2/Make-lang.in
  93fe99bf456561cd217f1c93d2ab7da7  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
*************** bdf8e4e5301538b72767dc22581f3f7f  gcc/m2
*** 7158,7164 ****
  6066eff2e23b028b779eab8f65a6cdb8  gcc/m2/gm2-libs-min/libc.c
  28dd7c1333503f47c1b34cbbedb9bd6c  gcc/m2/gm2-libs-min/libc.def
  a536407a602f6237b202eb11c825a25e  gcc/m2/gm2-libs/ARRAYOFCHAR.def
! ff9cd201ed5e5f197014f5ae68373fc0  gcc/m2/gm2-libs/ARRAYOFCHAR.mod
  0c0b70f740fb2aa15f3cd8ffa440bcad  gcc/m2/gm2-libs/ASCII.def
  8029a2f255a54f322fdd3b21c36b55f7  gcc/m2/gm2-libs/ASCII.mod
  68badbf0d3b417721274234d3a599134  gcc/m2/gm2-libs/Args.def
--- 7164,7170 ----
  6066eff2e23b028b779eab8f65a6cdb8  gcc/m2/gm2-libs-min/libc.c
  28dd7c1333503f47c1b34cbbedb9bd6c  gcc/m2/gm2-libs-min/libc.def
  a536407a602f6237b202eb11c825a25e  gcc/m2/gm2-libs/ARRAYOFCHAR.def
! e4d6174f6234cab567e116421712d7e3  gcc/m2/gm2-libs/ARRAYOFCHAR.mod
  0c0b70f740fb2aa15f3cd8ffa440bcad  gcc/m2/gm2-libs/ASCII.def
  8029a2f255a54f322fdd3b21c36b55f7  gcc/m2/gm2-libs/ASCII.mod
  68badbf0d3b417721274234d3a599134  gcc/m2/gm2-libs/Args.def
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7637,7643 ****
  88e10618d6f39a411b34e2245b93307b  gcc/machmode.def
  db2ee1a68662c8370d59f7e4f6cf917b  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! 207c7d095fc92ca26e7292cb2ce2ec0d  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
--- 7643,7649 ----
  88e10618d6f39a411b34e2245b93307b  gcc/machmode.def
  db2ee1a68662c8370d59f7e4f6cf917b  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! c845d5d7e04ea934ec3a5ca0ea44a754  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
*************** f731cb7ebdb94eb79e6d1f93d1f488ec  gcc/op
*** 7704,7710 ****
  301353d263ba0e1eac3f3242d9e7af47  gcc/optabs-libfuncs.h
  b5fc1a94542b80b1683d2bee465e42be  gcc/optabs-query.cc
  28bb97827aab6913c7fa55727bd8cea0  gcc/optabs-query.h
! 1d9d6d592d7b2cb3aa9ed6f5fc04ebfc  gcc/optabs-tree.cc
  295bbec8fcdeeac30d6f914e52d4adc4  gcc/optabs-tree.h
  c9fef63de59454b93afa15203c1e321c  gcc/optabs.cc
  4e3c77b6001e2e7044652824b6551d11  gcc/optabs.def
--- 7710,7716 ----
  301353d263ba0e1eac3f3242d9e7af47  gcc/optabs-libfuncs.h
  b5fc1a94542b80b1683d2bee465e42be  gcc/optabs-query.cc
  28bb97827aab6913c7fa55727bd8cea0  gcc/optabs-query.h
! 933d872e7e60ed7a16f387f74cf5dcd7  gcc/optabs-tree.cc
  295bbec8fcdeeac30d6f914e52d4adc4  gcc/optabs-tree.h
  c9fef63de59454b93afa15203c1e321c  gcc/optabs.cc
  4e3c77b6001e2e7044652824b6551d11  gcc/optabs.def
*************** fccd951e3de91d49d3824e482c12e070  gcc/or
*** 7729,7735 ****
  c77558a1c1f43463b3acae9243006ef9  gcc/output.h
  c9e6163e1eaa8f82c57f03f76e86da75  gcc/pair-fusion.cc
  b2f692287d25760afcef126c010f7078  gcc/pair-fusion.h
! 2207e1b3f2ea3f9a38dca4896d14b62c  gcc/params.opt
  2cc794e23d80a8c9f057a7e402c65fb8  gcc/params.opt.urls
  818628b1b793b8f87f62d0c18fd1219a  gcc/pass_manager.h
  38b9f60b5fd192ab2d5c201b4aff3f29  gcc/passes.cc
--- 7735,7741 ----
  c77558a1c1f43463b3acae9243006ef9  gcc/output.h
  c9e6163e1eaa8f82c57f03f76e86da75  gcc/pair-fusion.cc
  b2f692287d25760afcef126c010f7078  gcc/pair-fusion.h
! 9f740832b80d1afc73e79184f1e84f22  gcc/params.opt
  2cc794e23d80a8c9f057a7e402c65fb8  gcc/params.opt.urls
  818628b1b793b8f87f62d0c18fd1219a  gcc/pass_manager.h
  38b9f60b5fd192ab2d5c201b4aff3f29  gcc/passes.cc
*************** a4c4b609df2262702bd9691ce3ef1b39  gcc/pr
*** 7775,7784 ****
  5494603f698198c1a7d327aa6bbdb09a  gcc/predict.h
  00fb3c12fcc945bd00d0da1986741e41  gcc/prefix.cc
  5181d614dc205a1b7acf823c34e596ed  gcc/prefix.h
! 0afaaeb5db635f56227acae416021586  gcc/pretty-print-format-impl.h
! ed550d9201c53b2e183ac8da7882fb20  gcc/pretty-print-markup.h
  445beb21a2f28b79808b2eebd0fe4856  gcc/pretty-print-urlifier.h
! 789a283532c12d0634290baa6a4de8dc  gcc/pretty-print.cc
  191fccc415dd02373e9969178df93d03  gcc/pretty-print.h
  3612c0ba4344ce8d21ab5bab244d397b  gcc/prime-paths.cc
  a6e4e4fab174379976dcb09269c8de98  gcc/print-rtl-function.cc
--- 7781,7790 ----
  5494603f698198c1a7d327aa6bbdb09a  gcc/predict.h
  00fb3c12fcc945bd00d0da1986741e41  gcc/prefix.cc
  5181d614dc205a1b7acf823c34e596ed  gcc/prefix.h
! a2fed47b1d856d59ba7f1884ca1e7282  gcc/pretty-print-format-impl.h
! 7d14f068456642f4e7720c1cad9bc313  gcc/pretty-print-markup.h
  445beb21a2f28b79808b2eebd0fe4856  gcc/pretty-print-urlifier.h
! a9d12e1bd0b6346eb6833a4bdc6138dd  gcc/pretty-print.cc
  191fccc415dd02373e9969178df93d03  gcc/pretty-print.h
  3612c0ba4344ce8d21ab5bab244d397b  gcc/prime-paths.cc
  a6e4e4fab174379976dcb09269c8de98  gcc/print-rtl-function.cc
*************** cd06e8a941b6bfa758b3577f67840bab  gcc/pr
*** 7790,7795 ****
--- 7796,7803 ----
  c7ec57b92f248e2ae077376c61321dda  gcc/profile-count.h
  bc21f26b6df11eea0b28a669f74f6e24  gcc/profile.cc
  cd641a4dec9a0a4cf7cf888cfa37e386  gcc/profile.h
+ be6c71b25f10a45cfc8d05a37affe9ed  gcc/pta-andersen.cc
+ 06e1fae8a3a5e17b39e472f88eb11819  gcc/pta-andersen.h
  555a319d44f0f4857aa378a1691e1d27  gcc/range-op-float.cc
  6b98a6ea5f4292196168184e5e0f4476  gcc/range-op-mixed.h
  111e7e65fb598a1d21148e1b0f23744b  gcc/range-op-ptr.cc
*************** fdc04e5af7ee387dce07c6ba9a99eaa8  gcc/se
*** 8400,8407 ****
  430469e71b555502fe14de847bb52093  gcc/sparseset.h
  30b258c94e9c5e21b4c84c8f366a0fd7  gcc/spellcheck-tree.cc
  052441b1bd31b5e7d4cceb37bf2c9826  gcc/spellcheck-tree.h
! ac7c31fb50a4a969a86fb2b70a82b19c  gcc/spellcheck.cc
! b04523a4dcb80da0bc3cf9bc360978f4  gcc/spellcheck.h
  ac49ee54195f30bc26eaa8fcf56ba0b1  gcc/splay-tree-utils.cc
  866649742d9abe95e754165b1dc31763  gcc/splay-tree-utils.h
  84bd78cc881371c105169fb8707256d3  gcc/splay-tree-utils.tcc
--- 8408,8415 ----
  430469e71b555502fe14de847bb52093  gcc/sparseset.h
  30b258c94e9c5e21b4c84c8f366a0fd7  gcc/spellcheck-tree.cc
  052441b1bd31b5e7d4cceb37bf2c9826  gcc/spellcheck-tree.h
! a561a2dda38e505ced9995f00ed53950  gcc/spellcheck.cc
! 378df0219a72e33cae0531f835e7c9a5  gcc/spellcheck.h
  ac49ee54195f30bc26eaa8fcf56ba0b1  gcc/splay-tree-utils.cc
  866649742d9abe95e754165b1dc31763  gcc/splay-tree-utils.h
  84bd78cc881371c105169fb8707256d3  gcc/splay-tree-utils.tcc
*************** b1497a03867668af210c32280876fdd7  gcc/sy
*** 8448,8454 ****
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! defcbc27ee11ca6cdc86b6bb1971a30d  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8456,8462 ----
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! ce7969661ea3c6cf59c9bc077bded17b  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** d92682d7170159e697a1e85d7da6c88a  gcc/te
*** 17000,17005 ****
--- 17008,17019 ----
  58c71bfa32dceabcc982bf01c2613efd  gcc/testsuite/c-c++-common/Wtautological-compare-ranges.c
  faf99b6b0a20a061a95d9af7dbeea418  gcc/testsuite/c-c++-common/Wunused-function-1.c
  f79bc4a80b6890a56ed93a450311aa3f  gcc/testsuite/c-c++-common/Wunused-local-typedefs.c
+ ab9ee0ad0ed342e0cb5d758f89cfaab3  gcc/testsuite/c-c++-common/Wunused-parm-1.c
+ 76471ed7ee74f1b000f42c1989d0d813  gcc/testsuite/c-c++-common/Wunused-parm-2.c
+ c3ee807981d1bdb0a8c686faced30d6f  gcc/testsuite/c-c++-common/Wunused-parm-3.c
+ 1fa47d6533e736fdbe9bb371b7fdc0f3  gcc/testsuite/c-c++-common/Wunused-parm-4.c
+ f496e8f09d9c03f4761c228ce8db3429  gcc/testsuite/c-c++-common/Wunused-parm-5.c
+ dc5b316ea5857f7357a5b40a0b903107  gcc/testsuite/c-c++-common/Wunused-parm-6.c
  5ae90ca6d3757f39b6bf72f9c7b03800  gcc/testsuite/c-c++-common/Wunused-value-1.c
  7f0011fe4d80291b412d4a643ab94cc8  gcc/testsuite/c-c++-common/Wunused-var-1.c
  0880bcc58a4ae32455c59a0c3e1950b4  gcc/testsuite/c-c++-common/Wunused-var-10.c
*************** f79bc4a80b6890a56ed93a450311aa3f  gcc/te
*** 17011,17022 ****
  9c1e8e695b2a8304922b1e0f0874f4cd  gcc/testsuite/c-c++-common/Wunused-var-16.c
  f7cf252f8fb24838c4491a1b681216d3  gcc/testsuite/c-c++-common/Wunused-var-17.c
  64cb9f09ee8144d6c20610746cdb14c4  gcc/testsuite/c-c++-common/Wunused-var-18.c
  5f69d6398e9b0fc829351a16f994916d  gcc/testsuite/c-c++-common/Wunused-var-2.c
  8504217c544401c14012c8e1a1c18970  gcc/testsuite/c-c++-common/Wunused-var-3.c
  43839f1fa5726ea0a0d6e063d7980642  gcc/testsuite/c-c++-common/Wunused-var-4.c
  75fdd7e7424b32b232b6b71167d558aa  gcc/testsuite/c-c++-common/Wunused-var-5.c
  d67fb11d2c7db6b14c7fce493613a33e  gcc/testsuite/c-c++-common/Wunused-var-6.c
! 3acd34af9a98cb4913d6b6310f170f6c  gcc/testsuite/c-c++-common/Wunused-var-7.c
  a246090268978dba24e38ee345e883c0  gcc/testsuite/c-c++-common/Wunused-var-8.c
  521676114b454f97187cc76d533621e6  gcc/testsuite/c-c++-common/Wunused-var-9.c
  47095408bb7fd6842b216b9c049e5877  gcc/testsuite/c-c++-common/Wuse-after-free-2.c
--- 17025,17042 ----
  9c1e8e695b2a8304922b1e0f0874f4cd  gcc/testsuite/c-c++-common/Wunused-var-16.c
  f7cf252f8fb24838c4491a1b681216d3  gcc/testsuite/c-c++-common/Wunused-var-17.c
  64cb9f09ee8144d6c20610746cdb14c4  gcc/testsuite/c-c++-common/Wunused-var-18.c
+ b372c8cb3e59dd7221b2c3efa6d58cc7  gcc/testsuite/c-c++-common/Wunused-var-19.c
  5f69d6398e9b0fc829351a16f994916d  gcc/testsuite/c-c++-common/Wunused-var-2.c
+ e406eeb003ed75500f717ac3d6d6427c  gcc/testsuite/c-c++-common/Wunused-var-20.c
+ c2e2b6cb6e88988daf3cdb6603e71392  gcc/testsuite/c-c++-common/Wunused-var-21.c
+ 10252b30516090a948416497fe8fbf99  gcc/testsuite/c-c++-common/Wunused-var-22.c
+ 019e3d2a7c2ad5686bdd091232caee89  gcc/testsuite/c-c++-common/Wunused-var-23.c
+ a647f153779eb1c1024af32311c86f52  gcc/testsuite/c-c++-common/Wunused-var-24.c
  8504217c544401c14012c8e1a1c18970  gcc/testsuite/c-c++-common/Wunused-var-3.c
  43839f1fa5726ea0a0d6e063d7980642  gcc/testsuite/c-c++-common/Wunused-var-4.c
  75fdd7e7424b32b232b6b71167d558aa  gcc/testsuite/c-c++-common/Wunused-var-5.c
  d67fb11d2c7db6b14c7fce493613a33e  gcc/testsuite/c-c++-common/Wunused-var-6.c
! 5bf482af941435b264cc0e6f717ab0eb  gcc/testsuite/c-c++-common/Wunused-var-7.c
  a246090268978dba24e38ee345e883c0  gcc/testsuite/c-c++-common/Wunused-var-8.c
  521676114b454f97187cc76d533621e6  gcc/testsuite/c-c++-common/Wunused-var-9.c
  47095408bb7fd6842b216b9c049e5877  gcc/testsuite/c-c++-common/Wuse-after-free-2.c
*************** e627e94303559061b566ee6a67d2e153  gcc/te
*** 17780,17785 ****
--- 17800,17806 ----
  b11e87307044446d68555332a0f37924  gcc/testsuite/c-c++-common/attr-used-8.c
  7e4e1b68ca991560ece1eee831e8bacd  gcc/testsuite/c-c++-common/attr-used-9.c
  0765b8273c3c0c19396e32788dd03b94  gcc/testsuite/c-c++-common/attr-used.c
+ 56409185f7b7927b907d72545ba8aa31  gcc/testsuite/c-c++-common/attr-warn-unused-result-2.c
  c16cfe2fc05f8ec7fa89428b9e32fef6  gcc/testsuite/c-c++-common/attr-warn-unused-result.c
  0757d414096e0b54b72399cfd533c8fc  gcc/testsuite/c-c++-common/attributes-1.c
  6d7e356a55667553550e9cd33323e1f5  gcc/testsuite/c-c++-common/attributes-2.c
*************** f4f262de9adf968192a3da56a3c4adc1  gcc/te
*** 22573,22578 ****
--- 22594,22600 ----
  0a27a7a45bdad25c5a48b1f4e3bfcb8b  gcc/testsuite/g++.dg/cpp0x/constexpr-array26.C
  3100c3b4b2ec90a6762a56edc16076a1  gcc/testsuite/g++.dg/cpp0x/constexpr-array27.C
  216c8de64dd9752d2d84eb202e80c708  gcc/testsuite/g++.dg/cpp0x/constexpr-array28.C
+ 1c4a44e298a16b855d3f955b665c3dc6  gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C
  8b7c8e7c1b64cfa0626f7f2311c9fef5  gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C
  6451aa5bb5fa736dda3ebad1dc2e8336  gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C
  1d46f32449f9e0292d662928246ec784  gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C
*************** d01e805b9f6fdb44547d559f5b04ea4a  gcc/te
*** 26792,26798 ****
  7e2d9cc3e71d52c36118900b7f09ea64  gcc/testsuite/g++.dg/cpp26/decomp22.C
  7ef0ff9bc2a7cfb1ea71f3e0248b6a66  gcc/testsuite/g++.dg/cpp26/decomp23.C
  f462246786df8652f2409939354d0c38  gcc/testsuite/g++.dg/cpp26/decomp24.C
! 157e9f5940a8126f3280a3bdee8a7b03  gcc/testsuite/g++.dg/cpp26/decomp25.C
  04625a49d6c21164c6f7e075e578b4d2  gcc/testsuite/g++.dg/cpp26/decomp3.C
  e0331653ca37862860617d90def1c2d9  gcc/testsuite/g++.dg/cpp26/decomp4.C
  2765a6ddd9be5099086c5f772077d8d1  gcc/testsuite/g++.dg/cpp26/decomp5.C
--- 26814,26820 ----
  7e2d9cc3e71d52c36118900b7f09ea64  gcc/testsuite/g++.dg/cpp26/decomp22.C
  7ef0ff9bc2a7cfb1ea71f3e0248b6a66  gcc/testsuite/g++.dg/cpp26/decomp23.C
  f462246786df8652f2409939354d0c38  gcc/testsuite/g++.dg/cpp26/decomp24.C
! f03ab32088d0fea8cefc516352c939d2  gcc/testsuite/g++.dg/cpp26/decomp25.C
  04625a49d6c21164c6f7e075e578b4d2  gcc/testsuite/g++.dg/cpp26/decomp3.C
  e0331653ca37862860617d90def1c2d9  gcc/testsuite/g++.dg/cpp26/decomp4.C
  2765a6ddd9be5099086c5f772077d8d1  gcc/testsuite/g++.dg/cpp26/decomp5.C
*************** b835b9bb00c8b448e2ac56df5e6cae60  gcc/te
*** 26809,26815 ****
  00412f40d36f1e2f02d8a6dc2f9ea915  gcc/testsuite/g++.dg/cpp26/feat-cxx26.C
  e439504634b8fdea668e10d9fc930c63  gcc/testsuite/g++.dg/cpp26/literals1.C
  24ebebb3be412c0e507595cb8c7458f5  gcc/testsuite/g++.dg/cpp26/literals2.C
! 1eebd6cbce6cabc0490fdd8bf706934d  gcc/testsuite/g++.dg/cpp26/name-independent-decl1.C
  cd432aa62bbbf4b16b93cb38b110d2a5  gcc/testsuite/g++.dg/cpp26/name-independent-decl10.C
  4e8e44f517eeede150069458b1132524  gcc/testsuite/g++.dg/cpp26/name-independent-decl2.C
  4327ebfbe5ebdc6dedbf20e479505a60  gcc/testsuite/g++.dg/cpp26/name-independent-decl3.C
--- 26831,26837 ----
  00412f40d36f1e2f02d8a6dc2f9ea915  gcc/testsuite/g++.dg/cpp26/feat-cxx26.C
  e439504634b8fdea668e10d9fc930c63  gcc/testsuite/g++.dg/cpp26/literals1.C
  24ebebb3be412c0e507595cb8c7458f5  gcc/testsuite/g++.dg/cpp26/literals2.C
! 8f5e59e0f7c8cbf6a6ab946370b7128b  gcc/testsuite/g++.dg/cpp26/name-independent-decl1.C
  cd432aa62bbbf4b16b93cb38b110d2a5  gcc/testsuite/g++.dg/cpp26/name-independent-decl10.C
  4e8e44f517eeede150069458b1132524  gcc/testsuite/g++.dg/cpp26/name-independent-decl2.C
  4327ebfbe5ebdc6dedbf20e479505a60  gcc/testsuite/g++.dg/cpp26/name-independent-decl3.C
*************** c0b015cd02e07242444c2700f64e070a  gcc/te
*** 27550,27555 ****
--- 27572,27578 ----
  5fd97c22b2996faaa87a3aa20de08243  gcc/testsuite/g++.dg/cpp2a/constexpr-union6.C
  22d0d1f2f3c677d12d0e844ae12fd688  gcc/testsuite/g++.dg/cpp2a/constexpr-union7.C
  e94cea4fa4255420603d88768e70b36c  gcc/testsuite/g++.dg/cpp2a/constexpr-union8.C
+ b00a4635a4c11366be17b4b6a45910f7  gcc/testsuite/g++.dg/cpp2a/constexpr-union9.C
  4e80378ab3af70b20b34dcf87e46941d  gcc/testsuite/g++.dg/cpp2a/constexpr-vector1.C
  6d84a7bd78f9867ce0a07e6b0d26241b  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual1.C
  974c3f89c0f3ffa8993db35751b7f993  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual10.C
*************** eccc2b2ed947b72890c78d9f36703c07  gcc/te
*** 38804,38810 ****
  410904ada3f7963a6e257984ca090127  gcc/testsuite/g++.dg/warn/Wformat-2.C
  043066dc34a8f88f0f8349d9f0370f8a  gcc/testsuite/g++.dg/warn/Wformat-3.C
  7176ad1e7207328b46fc3387dcae316c  gcc/testsuite/g++.dg/warn/Wformat-char8_t-1.C
! 16e302f8777aca3c182e6d73f8bce59b  gcc/testsuite/g++.dg/warn/Wformat-gcc_diag-1.C
  6ef49309d5c20d13e1ea70fc21d3b4af  gcc/testsuite/g++.dg/warn/Wformat-gcc_diag-2.C
  beb2a2fbca8c29444f6e9ca9eb833c61  gcc/testsuite/g++.dg/warn/Wformat-gcc_diag-3.C
  c051125966f7b3d00fdd612ba7549043  gcc/testsuite/g++.dg/warn/Wformat-method.C
--- 38827,38833 ----
  410904ada3f7963a6e257984ca090127  gcc/testsuite/g++.dg/warn/Wformat-2.C
  043066dc34a8f88f0f8349d9f0370f8a  gcc/testsuite/g++.dg/warn/Wformat-3.C
  7176ad1e7207328b46fc3387dcae316c  gcc/testsuite/g++.dg/warn/Wformat-char8_t-1.C
! 7ac6c44a2b5195d1cb76bd9acfd5b4fb  gcc/testsuite/g++.dg/warn/Wformat-gcc_diag-1.C
  6ef49309d5c20d13e1ea70fc21d3b4af  gcc/testsuite/g++.dg/warn/Wformat-gcc_diag-2.C
  beb2a2fbca8c29444f6e9ca9eb833c61  gcc/testsuite/g++.dg/warn/Wformat-gcc_diag-3.C
  c051125966f7b3d00fdd612ba7549043  gcc/testsuite/g++.dg/warn/Wformat-method.C
*************** e140cca8081c2c0eae03e581e393acb2  gcc/te
*** 39232,39237 ****
--- 39255,39262 ----
  f4f3cab40f639491cc5a09f1d424f9ce  gcc/testsuite/g++.dg/warn/Wunused-parm-1.C
  848ae9477cb535f02cefe842f45ed6e8  gcc/testsuite/g++.dg/warn/Wunused-parm-10.C
  054afa451b4cbe3068c1711a0332437f  gcc/testsuite/g++.dg/warn/Wunused-parm-11.C
+ d981aa1c5abcafccb44df0496d23b54a  gcc/testsuite/g++.dg/warn/Wunused-parm-12.C
+ adbbc8b3cfd31af65a938acabfc8bd05  gcc/testsuite/g++.dg/warn/Wunused-parm-13.C
  b17926dc040110c67174d5c4203f7fee  gcc/testsuite/g++.dg/warn/Wunused-parm-2.C
  e2b1e313bf63113458031cd03d300763  gcc/testsuite/g++.dg/warn/Wunused-parm-3.C
  f11e1a6a7c64d32c0698605c42c159c1  gcc/testsuite/g++.dg/warn/Wunused-parm-4.C
*************** fba202d17d94d19c21e05a678c6a5ab1  gcc/te
*** 39254,39260 ****
  26afd4814c461a850bb5b98f2faac581  gcc/testsuite/g++.dg/warn/Wunused-var-17.C
  e7d34b3674b2f48e1e13a1327b53930d  gcc/testsuite/g++.dg/warn/Wunused-var-18.C
  aabf762ebe53d9bdf29cd7607fc1fe32  gcc/testsuite/g++.dg/warn/Wunused-var-19.C
! 6f250a1bec102f3ef4c4450109985c6c  gcc/testsuite/g++.dg/warn/Wunused-var-2.C
  e7274165f26fc70eff73fddbd77e3811  gcc/testsuite/g++.dg/warn/Wunused-var-20.C
  0c5df293cc7c104d4640b26ebae4ed15  gcc/testsuite/g++.dg/warn/Wunused-var-21.C
  5d6aae3538559dce1f197ff269ee52f8  gcc/testsuite/g++.dg/warn/Wunused-var-22.C
--- 39279,39285 ----
  26afd4814c461a850bb5b98f2faac581  gcc/testsuite/g++.dg/warn/Wunused-var-17.C
  e7d34b3674b2f48e1e13a1327b53930d  gcc/testsuite/g++.dg/warn/Wunused-var-18.C
  aabf762ebe53d9bdf29cd7607fc1fe32  gcc/testsuite/g++.dg/warn/Wunused-var-19.C
! 4ebf35a24bae9aea2f42ccede2d7021b  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
*************** a0153f267ad41a4cf2f1dec39837d246  gcc/te
*** 39277,39282 ****
--- 39302,39309 ----
  998a3f10f988e7baba9b261f4e42d7fb  gcc/testsuite/g++.dg/warn/Wunused-var-38.C
  34eb935534f258b4cdd6d7f1b0bb2b6e  gcc/testsuite/g++.dg/warn/Wunused-var-39.C
  62e5565091b4ee3f018515196f818bf3  gcc/testsuite/g++.dg/warn/Wunused-var-4.C
+ 606f86572bc9564c5ed0c9466b934826  gcc/testsuite/g++.dg/warn/Wunused-var-40.C
+ 839875d50b4cd9e29a5ec7ec6e3caa5c  gcc/testsuite/g++.dg/warn/Wunused-var-41.C
  d9191ea69f8ac18b1043d3d093b1f0d4  gcc/testsuite/g++.dg/warn/Wunused-var-5.C
  87a6fe8bfeffa1f31aecfb6dc5c8fc8e  gcc/testsuite/g++.dg/warn/Wunused-var-6.C
  b81dd316dd30881afe998cc16667340f  gcc/testsuite/g++.dg/warn/Wunused-var-7.C
*************** ba9d23bf9864be2b6061429c3faa49b7  gcc/te
*** 42897,42902 ****
--- 42924,42931 ----
  3de0947a17512aedda9a0acc7bcb39ed  gcc/testsuite/g++.target/aarch64/sme/exceptions_1.C
  79243c6f16baddd2d73325ca3aa928e2  gcc/testsuite/g++.target/aarch64/sme/exceptions_2.C
  6617c08f1c35a7b00949b2a7c76d1e15  gcc/testsuite/g++.target/aarch64/sme/keyword_macros_1.C
+ c9198836844a7336e686dd975a80fbbd  gcc/testsuite/g++.target/aarch64/sme/sme_throw_1.C
+ 9a3b7e2498f4259da15a71f2850ec227  gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C
  7c9f331f9af372aa80eabfedf84ae4d1  gcc/testsuite/g++.target/aarch64/sme/streaming_mode_1.C
  7fce27ec45311cf4d170ad324de8da10  gcc/testsuite/g++.target/aarch64/sme/streaming_mode_2.C
  d50d2632d11f285298dab758e5afed2c  gcc/testsuite/g++.target/aarch64/sme2/aarch64-sme2-acle-asm.exp
*************** da093a504dd5180ba0a2d674a33283b6  gcc/te
*** 47556,47562 ****
  9460cc0e67fb619fc3dd04804f75c660  gcc/testsuite/gcc.dg/20020607-2.c
  b540c59b566647ef61a8c9670457783b  gcc/testsuite/gcc.dg/20020919-1.c
  00c4bd06c0cec25940b5ddd95e12906c  gcc/testsuite/gcc.dg/20021006-1.c
! db4ae37e58ac25724070033d60b98346  gcc/testsuite/gcc.dg/20021014-1.c
  e0a338b56ef60f7330376e2cca8ee295  gcc/testsuite/gcc.dg/20021018-1.c
  a80fc1e3c09e8ce28290a89b6310c081  gcc/testsuite/gcc.dg/20021023-1.c
  e0d3e010baaffb9e233555a5e987890f  gcc/testsuite/gcc.dg/20021029-1.c
--- 47585,47591 ----
  9460cc0e67fb619fc3dd04804f75c660  gcc/testsuite/gcc.dg/20020607-2.c
  b540c59b566647ef61a8c9670457783b  gcc/testsuite/gcc.dg/20020919-1.c
  00c4bd06c0cec25940b5ddd95e12906c  gcc/testsuite/gcc.dg/20021006-1.c
! c925ef18f0b57f651894a0514dddccf0  gcc/testsuite/gcc.dg/20021014-1.c
  e0a338b56ef60f7330376e2cca8ee295  gcc/testsuite/gcc.dg/20021018-1.c
  a80fc1e3c09e8ce28290a89b6310c081  gcc/testsuite/gcc.dg/20021023-1.c
  e0d3e010baaffb9e233555a5e987890f  gcc/testsuite/gcc.dg/20021029-1.c
*************** c11a907de50c52966dc3fac763e376b5  gcc/te
*** 48889,48895 ****
  f5a2800fc5f21185bd9bdbd69e270c10  gcc/testsuite/gcc.dg/array-init-2.c
  16599e9681376bb41e697edb0bca5c78  gcc/testsuite/gcc.dg/array-quals-1.c
  01c412c33251aced84f6f15e9bb2a7e5  gcc/testsuite/gcc.dg/array-quals-2.c
! 889ad8871787262fb9533d339c717e6a  gcc/testsuite/gcc.dg/aru-2.c
  1dfd00783e706bdef788a25a1b21e8fb  gcc/testsuite/gcc.dg/asan/asan.exp
  eecad27701ac211149a09a067279d393  gcc/testsuite/gcc.dg/asan/has-feature-asan.c
  b8a049317908d7e0078316ad82437346  gcc/testsuite/gcc.dg/asan/nested-1.c
--- 48918,48924 ----
  f5a2800fc5f21185bd9bdbd69e270c10  gcc/testsuite/gcc.dg/array-init-2.c
  16599e9681376bb41e697edb0bca5c78  gcc/testsuite/gcc.dg/array-quals-1.c
  01c412c33251aced84f6f15e9bb2a7e5  gcc/testsuite/gcc.dg/array-quals-2.c
! e8f9574f1002387b520427c731d628de  gcc/testsuite/gcc.dg/aru-2.c
  1dfd00783e706bdef788a25a1b21e8fb  gcc/testsuite/gcc.dg/asan/asan.exp
  eecad27701ac211149a09a067279d393  gcc/testsuite/gcc.dg/asan/has-feature-asan.c
  b8a049317908d7e0078316ad82437346  gcc/testsuite/gcc.dg/asan/nested-1.c
*************** d217543f954eb3f31e246355824f653a  gcc/te
*** 49396,49401 ****
--- 49425,49431 ----
  2cdc0474f10fd564ead32c0c64a2d7c8  gcc/testsuite/gcc.dg/bitint-121.c
  43db7c5f800ce763fcf885501389882a  gcc/testsuite/gcc.dg/bitint-122.c
  7d02ff9539e664bbbcfc85b464d916c1  gcc/testsuite/gcc.dg/bitint-123.c
+ 11e6d8eaf7b16f3f8aeaf1c2e626996f  gcc/testsuite/gcc.dg/bitint-124.c
  aa6e262f1d508ec048e76ac4af6675a4  gcc/testsuite/gcc.dg/bitint-13.c
  e6db29256563268a3c327706e78c79a4  gcc/testsuite/gcc.dg/bitint-14.c
  c748706240385773f27caba61cbbcbd8  gcc/testsuite/gcc.dg/bitint-15.c
*************** ee94511375797117140ca777fd1695b1  gcc/te
*** 51469,51475 ****
  704c9a2dca0a451cca6e5855f7f2347f  gcc/testsuite/gcc.dg/darwin-minversion-7.c
  5a8b775f8ce1e0cafb8782fbc39b58e4  gcc/testsuite/gcc.dg/darwin-minversion-8.c
  aa9dfa39c42ef65a88c0a708412fb842  gcc/testsuite/gcc.dg/darwin-minversion-9.c
! b663e3641887fa62bae033abee133eae  gcc/testsuite/gcc.dg/darwin-minversion-link.c
  b66bb093837bda7692b73c8aa9711e00  gcc/testsuite/gcc.dg/darwin-sections.c
  f7857b3d082c7452ee5a60411d5f02bc  gcc/testsuite/gcc.dg/darwin-segaddr.c
  e3d2d2840d7d23dee7e2cd94e097a114  gcc/testsuite/gcc.dg/darwin-version-1.c
--- 51499,51505 ----
  704c9a2dca0a451cca6e5855f7f2347f  gcc/testsuite/gcc.dg/darwin-minversion-7.c
  5a8b775f8ce1e0cafb8782fbc39b58e4  gcc/testsuite/gcc.dg/darwin-minversion-8.c
  aa9dfa39c42ef65a88c0a708412fb842  gcc/testsuite/gcc.dg/darwin-minversion-9.c
! c4adb9fbe996928419d7acb79ac559cd  gcc/testsuite/gcc.dg/darwin-minversion-link.c
  b66bb093837bda7692b73c8aa9711e00  gcc/testsuite/gcc.dg/darwin-sections.c
  f7857b3d082c7452ee5a60411d5f02bc  gcc/testsuite/gcc.dg/darwin-segaddr.c
  e3d2d2840d7d23dee7e2cd94e097a114  gcc/testsuite/gcc.dg/darwin-version-1.c
*************** d0f7ad775f7535709bd76a4c558f1a51  gcc/te
*** 54454,54460 ****
  797c5b8279b119e196b60ddd82ff6200  gcc/testsuite/gcc.dg/max-1.c
  1a4cdf01852ee814e663ce4a12f81332  gcc/testsuite/gcc.dg/max.c
  2eb99e685dc27ff7c74d04a147795043  gcc/testsuite/gcc.dg/memchr-2.c
! 7253243e752b28339ab60d7858fa1d33  gcc/testsuite/gcc.dg/memchr-3.c
  9d87244d84141f68f68c9df9b9943fae  gcc/testsuite/gcc.dg/memchr.c
  acab1de0cea85ee2b9b2dbae5000854c  gcc/testsuite/gcc.dg/memcmp-1.c
  d46511208ba88b755c518bb5aa8112c3  gcc/testsuite/gcc.dg/memcmp-2.c
--- 54484,54490 ----
  797c5b8279b119e196b60ddd82ff6200  gcc/testsuite/gcc.dg/max-1.c
  1a4cdf01852ee814e663ce4a12f81332  gcc/testsuite/gcc.dg/max.c
  2eb99e685dc27ff7c74d04a147795043  gcc/testsuite/gcc.dg/memchr-2.c
! bdfc8c87006d14c0ee31f6a4c43f456e  gcc/testsuite/gcc.dg/memchr-3.c
  9d87244d84141f68f68c9df9b9943fae  gcc/testsuite/gcc.dg/memchr.c
  acab1de0cea85ee2b9b2dbae5000854c  gcc/testsuite/gcc.dg/memcmp-1.c
  d46511208ba88b755c518bb5aa8112c3  gcc/testsuite/gcc.dg/memcmp-2.c
*************** fa7e2ec267c69f9aa6ae24b29640585d  gcc/te
*** 54506,54512 ****
  b87d71c2f1bfd0836125574d83354c7f  gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c
  e493111d21e55c655eba6eaa3ebdda47  gcc/testsuite/gcc.dg/multiword-1.c
  81e6e40eddcff3122bc5a5a43a41acdc  gcc/testsuite/gcc.dg/nand.c
! 91404a997a88187ebc04b74582beae0f  gcc/testsuite/gcc.dg/nest.c
  954b75a10cc7c4acd20d0a13dd9b8a0f  gcc/testsuite/gcc.dg/nested-calls-1.c
  d07d9c82b2a97d45b09c04346a5ac493  gcc/testsuite/gcc.dg/nested-func-1.c
  a3b278a6d5f73bf284eb0317400dedc3  gcc/testsuite/gcc.dg/nested-func-10.c
--- 54536,54542 ----
  b87d71c2f1bfd0836125574d83354c7f  gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c
  e493111d21e55c655eba6eaa3ebdda47  gcc/testsuite/gcc.dg/multiword-1.c
  81e6e40eddcff3122bc5a5a43a41acdc  gcc/testsuite/gcc.dg/nand.c
! 8b243eadc57016a9a984dd81e030ee2b  gcc/testsuite/gcc.dg/nest.c
  954b75a10cc7c4acd20d0a13dd9b8a0f  gcc/testsuite/gcc.dg/nested-calls-1.c
  d07d9c82b2a97d45b09c04346a5ac493  gcc/testsuite/gcc.dg/nested-func-1.c
  a3b278a6d5f73bf284eb0317400dedc3  gcc/testsuite/gcc.dg/nested-func-10.c
*************** fa5bb8fde0acecb33a479faffc86bd94  gcc/te
*** 55681,55686 ****
--- 55711,55717 ----
  d2c0f87695635c09b6a893cd2d5c5478  gcc/testsuite/gcc.dg/pr120661-1.c
  799c5822cecd54a85c86ba442df0a63e  gcc/testsuite/gcc.dg/pr120661-2.c
  3617a8786eb32339e9abd40e5a0323eb  gcc/testsuite/gcc.dg/pr120701.c
+ c57884e34f257e33d206372fc675b716  gcc/testsuite/gcc.dg/pr121035.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** ed16befde6c8a1872f3b428d5b8ec674  gcc/te
*** 55953,55959 ****
  6989f81f45263c78d14dac55c9cd9110  gcc/testsuite/gcc.dg/pr32338-2.c
  bbcf89428a53027116f738ebeb0279aa  gcc/testsuite/gcc.dg/pr32370.c
  40d9c1be205a16b2df51e265f7dad83e  gcc/testsuite/gcc.dg/pr32374.c
! be3e07c28f6c7e01eee65fb82051b527  gcc/testsuite/gcc.dg/pr32450.c
  02076881055977d63706c40842de7c17  gcc/testsuite/gcc.dg/pr32559.c
  4f94bb5ec2c9746f5cf4ceb867151e62  gcc/testsuite/gcc.dg/pr32573.c
  1cd571b1500619697e33cdb824b0e175  gcc/testsuite/gcc.dg/pr32721.c
--- 55984,55990 ----
  6989f81f45263c78d14dac55c9cd9110  gcc/testsuite/gcc.dg/pr32338-2.c
  bbcf89428a53027116f738ebeb0279aa  gcc/testsuite/gcc.dg/pr32370.c
  40d9c1be205a16b2df51e265f7dad83e  gcc/testsuite/gcc.dg/pr32374.c
! 617dbe3888b2cd4ca2149dd3904de319  gcc/testsuite/gcc.dg/pr32450.c
  02076881055977d63706c40842de7c17  gcc/testsuite/gcc.dg/pr32559.c
  4f94bb5ec2c9746f5cf4ceb867151e62  gcc/testsuite/gcc.dg/pr32573.c
  1cd571b1500619697e33cdb824b0e175  gcc/testsuite/gcc.dg/pr32721.c
*************** bdf225977f6fa941dd47201d70740d51  gcc/te
*** 56217,56223 ****
  a538ba5435cd3b326641d9fa1ec6bd10  gcc/testsuite/gcc.dg/pr43557-2.c
  d99f23b3a3c3fc3eb2ae1a4a37dcab7a  gcc/testsuite/gcc.dg/pr43562.c
  da3a11a81d6baa587f3928a163d7f343  gcc/testsuite/gcc.dg/pr43564.c
! e415d69104a6c3a1501ac297eac4da71  gcc/testsuite/gcc.dg/pr43643.c
  124390b09843414aa638992f3a4705a2  gcc/testsuite/gcc.dg/pr43670.c
  c0057c21378b571cccb57351b9ef9acd  gcc/testsuite/gcc.dg/pr43730.c
  e7531c0be062d752d1ed493e5d39c393  gcc/testsuite/gcc.dg/pr43783.c
--- 56248,56254 ----
  a538ba5435cd3b326641d9fa1ec6bd10  gcc/testsuite/gcc.dg/pr43557-2.c
  d99f23b3a3c3fc3eb2ae1a4a37dcab7a  gcc/testsuite/gcc.dg/pr43562.c
  da3a11a81d6baa587f3928a163d7f343  gcc/testsuite/gcc.dg/pr43564.c
! c717c30e6f5dc28d8f41dd2946f276d2  gcc/testsuite/gcc.dg/pr43643.c
  124390b09843414aa638992f3a4705a2  gcc/testsuite/gcc.dg/pr43670.c
  c0057c21378b571cccb57351b9ef9acd  gcc/testsuite/gcc.dg/pr43730.c
  e7531c0be062d752d1ed493e5d39c393  gcc/testsuite/gcc.dg/pr43783.c
*************** d9a43196d2efe2fcc49c98e125a9d6b3  gcc/te
*** 59424,59429 ****
--- 59455,59461 ----
  a789d5fa70ddcb7ea1760ee8688e331c  gcc/testsuite/gcc.dg/torture/pr120813.c
  e23df6b1422011499b9a500d2bf25add  gcc/testsuite/gcc.dg/torture/pr120944.c
  2109362b50e367ef8730288e7461163d  gcc/testsuite/gcc.dg/torture/pr120951-1.c
+ e0878b10bf90cdd28ee181056e4566f9  gcc/testsuite/gcc.dg/torture/pr121116.c
  ded4330fd1cd52783bd9b1761db038ef  gcc/testsuite/gcc.dg/torture/pr16104-1.c
  fc265ee05da2f29f0e92804661cd1f28  gcc/testsuite/gcc.dg/torture/pr17526.c
  01c583edb41b632b835aa892b9c1cb14  gcc/testsuite/gcc.dg/torture/pr17933-1.c
*************** e9fd20c6a5ee817fc329cc085c9032eb  gcc/te
*** 60580,60586 ****
  8d1595003065ecd1d4556067ec7e25cc  gcc/testsuite/gcc.dg/tree-prof/20041218-1.c
  3efe9018c42617fad26ca176fc3306fd  gcc/testsuite/gcc.dg/tree-prof/20050826-2.c
  9c537759c05659b9e3cc8ad98d65510a  gcc/testsuite/gcc.dg/tree-prof/afdo-crossmodule-1.c
! be751d428ac7acd0bb5ba316dc89cbca  gcc/testsuite/gcc.dg/tree-prof/afdo-crossmodule-1b.c
  752f7da7123552ecbd5f01fb7952d252  gcc/testsuite/gcc.dg/tree-prof/afdo-inline.c
  6002203bc07005ca0e9c543037930992  gcc/testsuite/gcc.dg/tree-prof/afdo-vpt-earlyinline.c
  7fea89044d1cae3c25a1775dd049cbe7  gcc/testsuite/gcc.dg/tree-prof/bb-reorg.c
--- 60612,60618 ----
  8d1595003065ecd1d4556067ec7e25cc  gcc/testsuite/gcc.dg/tree-prof/20041218-1.c
  3efe9018c42617fad26ca176fc3306fd  gcc/testsuite/gcc.dg/tree-prof/20050826-2.c
  9c537759c05659b9e3cc8ad98d65510a  gcc/testsuite/gcc.dg/tree-prof/afdo-crossmodule-1.c
! c5768a698cd9d7a3225b3924d427c6cc  gcc/testsuite/gcc.dg/tree-prof/afdo-crossmodule-1b.c
  752f7da7123552ecbd5f01fb7952d252  gcc/testsuite/gcc.dg/tree-prof/afdo-inline.c
  6002203bc07005ca0e9c543037930992  gcc/testsuite/gcc.dg/tree-prof/afdo-vpt-earlyinline.c
  7fea89044d1cae3c25a1775dd049cbe7  gcc/testsuite/gcc.dg/tree-prof/bb-reorg.c
*************** c63db0d7b0286fa5d6126a140d4d11e4  gcc/te
*** 61733,61738 ****
--- 61765,61771 ----
  2d7373f628fe9cdb0e85e3b348618627  gcc/testsuite/gcc.dg/tree-ssa/pr116406.c
  5dd2285e0a64c83e08b6d68b6cd36eba  gcc/testsuite/gcc.dg/tree-ssa/pr117142.c
  f0d353ee8a84646d78fc80b6dd84a990  gcc/testsuite/gcc.dg/tree-ssa/pr117420.c
+ 5f36d3d6eda4211f506ed2e65fc779c4  gcc/testsuite/gcc.dg/tree-ssa/pr117423.c
  ec2377e16f3af2ba261ea020faa3f718  gcc/testsuite/gcc.dg/tree-ssa/pr117692.c
  e91a50025559d9a809c8a2fcfde46c2e  gcc/testsuite/gcc.dg/tree-ssa/pr117892.c
  3097c3d4bb30c35ef14a5afc79ceb420  gcc/testsuite/gcc.dg/tree-ssa/pr117927.c
*************** bb6370e51fdfc71eb406f2d9d7e1f004  gcc/te
*** 63366,63371 ****
--- 63399,63405 ----
  a0d21e844c69e57b42877341fb99cf0d  gcc/testsuite/gcc.dg/uninit-pr111397.c
  499c474f28073285766d0bb22cfa9e09  gcc/testsuite/gcc.dg/uninit-pr111489.c
  1f3e810920438ffd137d7d7c1975faef  gcc/testsuite/gcc.dg/uninit-pr112909.c
+ aa0889e8d086eec285bed548dc7a6709  gcc/testsuite/gcc.dg/uninit-pr120924.c
  58c1fce493b489aff04e0b2f66635e90  gcc/testsuite/gcc.dg/uninit-pr19430-2.c
  79f653fd913dfd35f07e5b3890168e74  gcc/testsuite/gcc.dg/uninit-pr19430-O0.c
  0ba39e72d317abfcfd3703541b7f8a41  gcc/testsuite/gcc.dg/uninit-pr19430.c
*************** e3db8ed02ca0ecad28455ac3f0b93696  gcc/te
*** 63470,63476 ****
  b9094e47fb1bcf5228d5a172f181d34c  gcc/testsuite/gcc.dg/unused-7.c
  a356a547d4f122d4cbb05a15d0ae98a9  gcc/testsuite/gcc.dg/unused-8a.c
  615e1e240a379f560bb499664764aa19  gcc/testsuite/gcc.dg/unused-8b.c
! 9a3cc991317dbcc7a05600e051eee3a6  gcc/testsuite/gcc.dg/unused-9.c
  2d4474648183006b06c5f9854456f93f  gcc/testsuite/gcc.dg/unused-variable-1.c
  a2064d0ab63f355ec70a8ba78cc0aad3  gcc/testsuite/gcc.dg/unused-variable-2.c
  24b35e461fad54da15489dc416f4b3e6  gcc/testsuite/gcc.dg/unused-variable-3.c
--- 63504,63510 ----
  b9094e47fb1bcf5228d5a172f181d34c  gcc/testsuite/gcc.dg/unused-7.c
  a356a547d4f122d4cbb05a15d0ae98a9  gcc/testsuite/gcc.dg/unused-8a.c
  615e1e240a379f560bb499664764aa19  gcc/testsuite/gcc.dg/unused-8b.c
! 6b148d345c0ca5c976aa0c8e6baf461b  gcc/testsuite/gcc.dg/unused-9.c
  2d4474648183006b06c5f9854456f93f  gcc/testsuite/gcc.dg/unused-variable-1.c
  a2064d0ab63f355ec70a8ba78cc0aad3  gcc/testsuite/gcc.dg/unused-variable-2.c
  24b35e461fad54da15489dc416f4b3e6  gcc/testsuite/gcc.dg/unused-variable-3.c
*************** f270872fadd92760313d996e3897ae0d  gcc/te
*** 63562,63568 ****
  167edde777120c9bbb2baa8d8b1962a6  gcc/testsuite/gcc.dg/vect/bb-slp-36.c
  d9b82f24ec441bd4ed9946db9792733c  gcc/testsuite/gcc.dg/vect/bb-slp-37.c
  7bcff90b9863e84eae294cff0b865427  gcc/testsuite/gcc.dg/vect/bb-slp-38.c
! 9a6ae4d79a0aa4df13f4774657d827d5  gcc/testsuite/gcc.dg/vect/bb-slp-39.c
  2d3a915ced26b6be766341dc7de50ad8  gcc/testsuite/gcc.dg/vect/bb-slp-4.c
  094d2618b84be18ada044275f13cbf29  gcc/testsuite/gcc.dg/vect/bb-slp-40.c
  1a8c85485adbd610681c731a9fe4b821  gcc/testsuite/gcc.dg/vect/bb-slp-41.c
--- 63596,63602 ----
  167edde777120c9bbb2baa8d8b1962a6  gcc/testsuite/gcc.dg/vect/bb-slp-36.c
  d9b82f24ec441bd4ed9946db9792733c  gcc/testsuite/gcc.dg/vect/bb-slp-37.c
  7bcff90b9863e84eae294cff0b865427  gcc/testsuite/gcc.dg/vect/bb-slp-38.c
! 190410e1fef8da664b76927524f2d9c4  gcc/testsuite/gcc.dg/vect/bb-slp-39.c
  2d3a915ced26b6be766341dc7de50ad8  gcc/testsuite/gcc.dg/vect/bb-slp-4.c
  094d2618b84be18ada044275f13cbf29  gcc/testsuite/gcc.dg/vect/bb-slp-40.c
  1a8c85485adbd610681c731a9fe4b821  gcc/testsuite/gcc.dg/vect/bb-slp-41.c
*************** ae171ef5347c321225b18e5907b1331b  gcc/te
*** 64149,64154 ****
--- 64183,64191 ----
  7df91aea22a8a2dc08bd0d355fa30fae  gcc/testsuite/gcc.dg/vect/pr120817.c
  cb063349fff16961efef1c8645314115  gcc/testsuite/gcc.dg/vect/pr120922.c
  2be1877919c42126fe95ae4d0c3f1c3f  gcc/testsuite/gcc.dg/vect/pr121034.c
+ ea5b3c05fffa7f697082308298dd7c5c  gcc/testsuite/gcc.dg/vect/pr121049.c
+ 3ccd618a730abdb13ec305c26f14ac22  gcc/testsuite/gcc.dg/vect/pr121059.c
+ 2820048815e23cc9b1e22c9d0eae0575  gcc/testsuite/gcc.dg/vect/pr121126.c
  42d48d2ecd5682545b12ac42f879a831  gcc/testsuite/gcc.dg/vect/pr16105.c
  231c99dba9475fe09525bbf6f4374124  gcc/testsuite/gcc.dg/vect/pr18308.c
  915cf38408eaa7fee5013d90ec1c3251  gcc/testsuite/gcc.dg/vect/pr18400.c
*************** a0fd49ab473516c9610de45e68c1d2a2  gcc/te
*** 65494,65499 ****
--- 65531,65539 ----
  0f4af0d0347b33a4fe5e55c707df1a5d  gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-2.c
  190c8787f98acde286950b67d8a0e781  gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-3.c
  9b8d64f48db60867dc60b9217f03555b  gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-4.c
+ 137e839c836da0efd1abf91162990b5a  gcc/testsuite/gcc.dg/vect/vect-reduc-cond-1.c
+ 6e03f3ea11f72547023ed45e5e473a05  gcc/testsuite/gcc.dg/vect/vect-reduc-cond-2.c
+ 8973a625b6511f40e4e03b24bbcf3159  gcc/testsuite/gcc.dg/vect/vect-reduc-cond-3.c
  1c446ff114c972abcfb111d361bd107f  gcc/testsuite/gcc.dg/vect/vect-reduc-cond-sub.c
  78bdeb760d9d97cdc35bbb827cdcf29d  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-1.c
  8766f1e32dd79e5d368ecf7021fdac0f  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-10.c
*************** c6cf8bf0cb1b39440a64d8f476f6edc2  gcc/te
*** 67035,67040 ****
--- 67075,67081 ----
  47ecf70940c2c8939e2d79a162064898  gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-3.c
  a19c70499df83a0df6b609719e946240  gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-4.c
  47a568763e86163c952b5b17243e396a  gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-5.c
+ 702b2037dd57663f46b3925af934a1bf  gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-be.c
  2e34b4d658642fa31028e6c77888d89c  gcc/testsuite/gcc.target/aarch64/bb-slp-pr113091.c
  b46f641f0dcc38f3e3de3f9a90702753  gcc/testsuite/gcc.target/aarch64/bfloat16_scalar_1.c
  855cfd1a9802da7ce78ef8175531090b  gcc/testsuite/gcc.target/aarch64/bfloat16_scalar_2.c
*************** a897ae01d807185bd4ca7f1587e181d9  gcc/te
*** 67463,67471 ****
  a2e2c14972d8ad4675b55c041ef37bd5  gcc/testsuite/gcc.target/aarch64/lane-bound-3.c
  81256a6fac965eea861536637ff35013  gcc/testsuite/gcc.target/aarch64/large_struct_copy.c
  508532c90ef5da7602402b5f0076c554  gcc/testsuite/gcc.target/aarch64/large_struct_copy_2.c
! aa51cad6adc25f2ceabe6717f164d378  gcc/testsuite/gcc.target/aarch64/ldapr-sext.c
  d8466196c5738675b4083dd4447f2cdc  gcc/testsuite/gcc.target/aarch64/ldapr-zext.c
  68214d6b949317dd07f6359cdaaaf7d5  gcc/testsuite/gcc.target/aarch64/ldapr.c
  e44d2a3726404fa7172221c7b20729b8  gcc/testsuite/gcc.target/aarch64/ldar_1.c
  8d2d09f7823d54ba6cd111f061a9329c  gcc/testsuite/gcc.target/aarch64/ldar_2.c
  224ea6dd9cff3c49a64b8a3bc14b1f50  gcc/testsuite/gcc.target/aarch64/ldp_aligned.c
--- 67504,67514 ----
  a2e2c14972d8ad4675b55c041ef37bd5  gcc/testsuite/gcc.target/aarch64/lane-bound-3.c
  81256a6fac965eea861536637ff35013  gcc/testsuite/gcc.target/aarch64/large_struct_copy.c
  508532c90ef5da7602402b5f0076c554  gcc/testsuite/gcc.target/aarch64/large_struct_copy_2.c
! 62c012b4c7538ce969e5111f5f65ea32  gcc/testsuite/gcc.target/aarch64/ldapr-sext.c
  d8466196c5738675b4083dd4447f2cdc  gcc/testsuite/gcc.target/aarch64/ldapr-zext.c
  68214d6b949317dd07f6359cdaaaf7d5  gcc/testsuite/gcc.target/aarch64/ldapr.c
+ 6492402d8581a7944221089a0d003267  gcc/testsuite/gcc.target/aarch64/ldapur.c
+ 7947fa5c9683636bc0e2075dc13f1204  gcc/testsuite/gcc.target/aarch64/ldapur_avoid.c
  e44d2a3726404fa7172221c7b20729b8  gcc/testsuite/gcc.target/aarch64/ldar_1.c
  8d2d09f7823d54ba6cd111f061a9329c  gcc/testsuite/gcc.target/aarch64/ldar_2.c
  224ea6dd9cff3c49a64b8a3bc14b1f50  gcc/testsuite/gcc.target/aarch64/ldp_aligned.c
*************** cce0e0d17f23232b9c556c2da6266969  gcc/te
*** 67998,68004 ****
  57e434af27228fcb7e2c9f0c3879026b  gcc/testsuite/gcc.target/aarch64/simd/armv9p5.c
  75bb088332efbda09d2d687c5f3affd0  gcc/testsuite/gcc.target/aarch64/simd/bcax_d.c
  0ec852a5bebc92dc4db3c9cef0bf4621  gcc/testsuite/gcc.target/aarch64/simd/bic_orn_1.c
! b3fcc4775b5b55ec84e865310ce24c99  gcc/testsuite/gcc.target/aarch64/simd/eor3_d.c
  6aef5c8c46a252fab1f15291c3545ce4  gcc/testsuite/gcc.target/aarch64/simd/ext_f32.x
  ddc6725ef357d85f1e09e4c10067f0cd  gcc/testsuite/gcc.target/aarch64/simd/ext_f32_1.c
  c1e72dac8ab01a1a17aeec90718b60d2  gcc/testsuite/gcc.target/aarch64/simd/ext_f64_1.c
--- 68041,68047 ----
  57e434af27228fcb7e2c9f0c3879026b  gcc/testsuite/gcc.target/aarch64/simd/armv9p5.c
  75bb088332efbda09d2d687c5f3affd0  gcc/testsuite/gcc.target/aarch64/simd/bcax_d.c
  0ec852a5bebc92dc4db3c9cef0bf4621  gcc/testsuite/gcc.target/aarch64/simd/bic_orn_1.c
! 16006fd02427e5686f254ac115ef7715  gcc/testsuite/gcc.target/aarch64/simd/eor3_d.c
  6aef5c8c46a252fab1f15291c3545ce4  gcc/testsuite/gcc.target/aarch64/simd/ext_f32.x
  ddc6725ef357d85f1e09e4c10067f0cd  gcc/testsuite/gcc.target/aarch64/simd/ext_f32_1.c
  c1e72dac8ab01a1a17aeec90718b60d2  gcc/testsuite/gcc.target/aarch64/simd/ext_f64_1.c
*************** e21253a0b461c19afa3bd87ea01f5460  gcc/te
*** 68049,68054 ****
--- 68092,68103 ----
  130ed80c2898435d5fc9dfcf66f84214  gcc/testsuite/gcc.target/aarch64/simd/faminmax-codegen-no-flag.c
  399d5df3159ff055750df6674198eb73  gcc/testsuite/gcc.target/aarch64/simd/faminmax-codegen.c
  44555094578d421e50878e79e956f43b  gcc/testsuite/gcc.target/aarch64/simd/faminmax-no-codegen.c
+ 8da4ebe81998ed1bfd39b7435e9f9076  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_1.c
+ 048c05fd5d8a233357c18cd4fac0af1d  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_2.c
+ 231fbc62550eac68af09fe0296ecc2b7  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_3.c
+ 597879377be3eeffce3944b61e8c8aec  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_4.c
+ 7acd4d756517b7c857659e2ff1d7809a  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c
+ 5c902aa373684ae8f9089744aa438e3a  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c
  504f31916b3f274eea930e1fc7da2e3c  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons.x
  22d82645ad53737e5bfbe2ba9b98cc05  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons_1.c
  f1c9e2aa3c435c9efdc1ea83da4e1eeb  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons_2.c
*************** afa7e585db839996b7ab991a21ae5c22  gcc/te
*** 68086,68092 ****
  3bdc28b0037a305b18bdc0489c55e433  gcc/testsuite/gcc.target/aarch64/simd/ssra.c
  6cc70e998362cc09840837fba67910d8  gcc/testsuite/gcc.target/aarch64/simd/trn_zip_p64_1.c
  5de7a6e0814e5fb97ee3b61393d07d26  gcc/testsuite/gcc.target/aarch64/simd/usra.c
- 620e5ff16ce4b53a27dc1881cdbb5e4b  gcc/testsuite/gcc.target/aarch64/simd/vabal_combine.c
  433cb4ec4520c807f8d4a73e400502ae  gcc/testsuite/gcc.target/aarch64/simd/vadd_poly_1.c
  674bb632e572dd98991d41294ce32e90  gcc/testsuite/gcc.target/aarch64/simd/vaddlv_1.c
  644c7b6ceda9f8b60fb839e127602e3c  gcc/testsuite/gcc.target/aarch64/simd/vbsl_f64_1.c
--- 68135,68140 ----
*************** af0c9bfd94289339a9a89b18b0914058  gcc/te
*** 68740,68745 ****
--- 68788,68805 ----
  c803cc21302ec827d923660d7eb5e3c3  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/add_za64_s64_vg1x4.c
  c51004424d10e799288e22af07498fb2  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/add_za64_u64_vg1x2.c
  426a8a4dcae7a2798501404234b1c876  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/add_za64_u64_vg1x4.c
+ acca1e8862a54cfe7c45f0f06c4101fc  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c
+ 949d8d32cae0862c4c0e0ab6ff0bb12c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c
+ be65f0f22a5b8a13adbccb4b512c7730  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c
+ aaaa34c9524b4b4583999b5a128f3eaf  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c
+ 8833b730be80e8caab2151fd5e0c77af  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c
+ 166e4486be7c18ce059b105a4a407646  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c
+ 7094ed706ad2cfa792a639b6350b8049  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c
+ 78b98fb0df0856cb99625a3064366b36  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c
+ 60c8585de63f2bc869cc07e43a2f2ff6  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c
+ ddb396d7ecaa479fe9bac140f886f1f9  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c
+ d7825152ab6a6faee4b8091f48870a30  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c
+ 37c63cecf7d13becf981f40e1afca527  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c
  f8d8aaffa00b9b5a5a44792d09e55495  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/bfmlslb_f32.c
  63d1cbaa5c0d97381df956921930ebc8  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/bfmlslb_lane_f32.c
  e78d7953d4a32db3c0601bb046b7e3ff  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/bfmlslt_f32.c
*************** a2b8cc7a8d9d0d79ca11573d406f7f6d  gcc/te
*** 72843,72848 ****
--- 72903,72910 ----
  ea24ecb4164b07ea882a7df9a25bae2e  gcc/testsuite/gcc.target/aarch64/sve/unpacked_cvtf_3.c
  30ed6269d6e0348a31d60f5834b0f4a6  gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_1.c
  c64a67d6ed2bf2b1ee2654a6ab54faec  gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_2.c
+ f97f494d93b00c2c0927d5724526059c  gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_combines_1.c
+ 2fbc0aba3bac940317167f6b66bc8a52  gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_combines_2.c
  274cee25dc1d6c69e609830904c1c0a9  gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_1.c
  cc5ae2e9ab4c84fdefc8af75fc17d5ab  gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvt_2.c
  53191c2f3e19f7d558c0a0e9ad1a7755  gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcvtz_1.c
*************** db510fed2a207b35df2126caab14bc03  gcc/te
*** 74337,74347 ****
--- 74399,74411 ----
  c0db897049451d05160e3d761c3e6da0  gcc/testsuite/gcc.target/aarch64/sve2/div-by-bitmask_1.c
  4c1f47b22f95b90c917c3c6e70530e4e  gcc/testsuite/gcc.target/aarch64/sve2/dupq_1.c
  89d5827d6649de87899d14beeaa9a82b  gcc/testsuite/gcc.target/aarch64/sve2/dupq_1_run.c
+ 6cf392a332495a2c13ccb608c1258a78  gcc/testsuite/gcc.target/aarch64/sve2/eon_bsl2n.c
  601e2a51cde2e0a9fd3515f4fbdf4eb7  gcc/testsuite/gcc.target/aarch64/sve2/eor3_1.c
  c2a0ae9f14c1928de3aea64ee37d1b25  gcc/testsuite/gcc.target/aarch64/sve2/extq_1.c
  15b722686c47673716a78737275cada5  gcc/testsuite/gcc.target/aarch64/sve2/extq_1_run.c
  6699c8d574b87c7018fc5b494c65cb7f  gcc/testsuite/gcc.target/aarch64/sve2/gather_earlyclobber.c
  34c844ca053b9c871341786139fbf872  gcc/testsuite/gcc.target/aarch64/sve2/mulhrs_1.c
+ 0b91cc9cabeae09648d1f1532c0ecf1c  gcc/testsuite/gcc.target/aarch64/sve2/nbsl_nor_nand_neon.c
  b360e0ac1da1500645df64fce4fab7dd  gcc/testsuite/gcc.target/aarch64/sve2/nlogic_1.c
  4446107d252cac5778f692095515b222  gcc/testsuite/gcc.target/aarch64/sve2/nlogic_2.c
  d58c6c7544d2d10908ad86e2a7eb5617  gcc/testsuite/gcc.target/aarch64/sve2/pfalse-binary.c
*************** c2682b969fcec66bb2ebb2442ff4221b  gcc/te
*** 78241,78246 ****
--- 78305,78311 ----
  39327fb26a438561d0617a9bfe99c59f  gcc/testsuite/gcc.target/arm/pr115188.c
  01f3623877a32b45af0d229eab49f4cf  gcc/testsuite/gcc.target/arm/pr117675.c
  bc84b25bc522b6ed07bd7885605c00d7  gcc/testsuite/gcc.target/arm/pr120351.c
+ ac8dc8b9b19050248df37eef095827b0  gcc/testsuite/gcc.target/arm/pr121065.c
  3ce2c6a399da67ae36390d522e1f1296  gcc/testsuite/gcc.target/arm/pr19599.c
  3425143e88f989a8f52f345e6237106a  gcc/testsuite/gcc.target/arm/pr26702.c
  fc0dd660f56108005b4f0b142e94d10d  gcc/testsuite/gcc.target/arm/pr37780_1.c
*************** d3f15f077bac4fdd98e262ff70319e29  gcc/te
*** 79975,79984 ****
  99e6ee6f6a0dd25151f9bd8e0350a8c3  gcc/testsuite/gcc.target/i386/amx-helper.h
  a93a298f547274ed3c2b935fceada10f  gcc/testsuite/gcc.target/i386/amxavx512-asmatt-1.c
  6a5fd66cc81baab9cac7cbbacb5f044a  gcc/testsuite/gcc.target/i386/amxavx512-asmintel-1.c
! 086de4ec2b822f365800b525b968e32f  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c
! b3dadadaf5b2a3516befbed4547e7457  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c
! 6ca460c28ecf6578a2f9ea76b0f25008  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c
! a085494420c0f8c81550255b2f48f14e  gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c
  3e5ed8f51d1403b179db592f12cb019c  gcc/testsuite/gcc.target/i386/amxbf16-asmatt-1.c
  215b9569abd57352c2d13ba5129e07cd  gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c
  c4406ef230e7a6bb0e7b45b2f94958e9  gcc/testsuite/gcc.target/i386/amxbf16-dpbf16ps-2.c
--- 80040,80049 ----
  99e6ee6f6a0dd25151f9bd8e0350a8c3  gcc/testsuite/gcc.target/i386/amx-helper.h
  a93a298f547274ed3c2b935fceada10f  gcc/testsuite/gcc.target/i386/amxavx512-asmatt-1.c
  6a5fd66cc81baab9cac7cbbacb5f044a  gcc/testsuite/gcc.target/i386/amxavx512-asmintel-1.c
! 03b019d3c75ebd24b04404c883e8fb8f  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c
! 6752e96664d9f58cb984fa646411e1a8  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c
! de43766ff547a704d67f8c662bc93c66  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c
! cc0603febc979dbf700b27494eacbc42  gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c
  3e5ed8f51d1403b179db592f12cb019c  gcc/testsuite/gcc.target/i386/amxbf16-asmatt-1.c
  215b9569abd57352c2d13ba5129e07cd  gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c
  c4406ef230e7a6bb0e7b45b2f94958e9  gcc/testsuite/gcc.target/i386/amxbf16-dpbf16ps-2.c
*************** eb14eddf6e5656136e935eaa1eb82b99  gcc/te
*** 85573,85579 ****
  edf62206a68a4c58a0dec6fbdc090c31  gcc/testsuite/gcc.target/i386/pr104441-1a.c
  7847083e5431fa0d0f90a6966b944b11  gcc/testsuite/gcc.target/i386/pr104441-1b.c
  9db2b13a34fc86475d27728a925461c5  gcc/testsuite/gcc.target/i386/pr104446.c
! eb1e8167d404b6acfac2b490f5061493  gcc/testsuite/gcc.target/i386/pr104447.c
  9afbd8cbff177a7e555fe32de7558c2e  gcc/testsuite/gcc.target/i386/pr104451.c
  f34a56063b53daa2722dd66e280f5aab  gcc/testsuite/gcc.target/i386/pr104453.c
  30d7b1638a5f604ac4353737e0db1816  gcc/testsuite/gcc.target/i386/pr104458.c
--- 85638,85644 ----
  edf62206a68a4c58a0dec6fbdc090c31  gcc/testsuite/gcc.target/i386/pr104441-1a.c
  7847083e5431fa0d0f90a6966b944b11  gcc/testsuite/gcc.target/i386/pr104441-1b.c
  9db2b13a34fc86475d27728a925461c5  gcc/testsuite/gcc.target/i386/pr104446.c
! 64d3f21fd2e4a710ff40b27d7be49163  gcc/testsuite/gcc.target/i386/pr104447.c
  9afbd8cbff177a7e555fe32de7558c2e  gcc/testsuite/gcc.target/i386/pr104451.c
  f34a56063b53daa2722dd66e280f5aab  gcc/testsuite/gcc.target/i386/pr104453.c
  30d7b1638a5f604ac4353737e0db1816  gcc/testsuite/gcc.target/i386/pr104458.c
*************** a6040be6551808763efaec7c170a9508  gcc/te
*** 85920,85926 ****
  c0b37433c7943e84ab87d5475c8dee7b  gcc/testsuite/gcc.target/i386/pr113090.c
  985d15f4237e366d808d224318b78cb2  gcc/testsuite/gcc.target/i386/pr113122-1.c
  d150e8020454e98754c7dabfd41ad2ea  gcc/testsuite/gcc.target/i386/pr113122-2.c
! 122f757ff15551df2a5ee4ba2135d85f  gcc/testsuite/gcc.target/i386/pr113122-3.c
  2f2dbd2c371a9961cb21196f2ee6f88d  gcc/testsuite/gcc.target/i386/pr113122-4.c
  234a82d280e8430bcdddf0d13ef70971  gcc/testsuite/gcc.target/i386/pr113133-1.c
  9fb3fb011da6ec53a9b79e09b5677dbc  gcc/testsuite/gcc.target/i386/pr113133-2.c
--- 85985,85991 ----
  c0b37433c7943e84ab87d5475c8dee7b  gcc/testsuite/gcc.target/i386/pr113090.c
  985d15f4237e366d808d224318b78cb2  gcc/testsuite/gcc.target/i386/pr113122-1.c
  d150e8020454e98754c7dabfd41ad2ea  gcc/testsuite/gcc.target/i386/pr113122-2.c
! 992a68b5060631d9f38e6f543a7791f0  gcc/testsuite/gcc.target/i386/pr113122-3.c
  2f2dbd2c371a9961cb21196f2ee6f88d  gcc/testsuite/gcc.target/i386/pr113122-4.c
  234a82d280e8430bcdddf0d13ef70971  gcc/testsuite/gcc.target/i386/pr113133-1.c
  9fb3fb011da6ec53a9b79e09b5677dbc  gcc/testsuite/gcc.target/i386/pr113133-2.c
*************** e2c348310fb018fd99488d16afdd02a4  gcc/te
*** 86088,86095 ****
  bd75c2f2962774fbfe5a6a6007998c0b  gcc/testsuite/gcc.target/i386/pr119171-1.c
  ccbd1332987abb6ae1d43a2bbd8cc701  gcc/testsuite/gcc.target/i386/pr119171-2.c
  4443ac3c8ec04223080890b714b6e79c  gcc/testsuite/gcc.target/i386/pr119307.c
! 887f2ee11a76629bd882751d010b3b68  gcc/testsuite/gcc.target/i386/pr119386-1.c
! 4933ca639383e3622b4fa3eacfce8d96  gcc/testsuite/gcc.target/i386/pr119386-2.c
  0bbc89787e90da2fb5dd023fb83ca22b  gcc/testsuite/gcc.target/i386/pr119386-3.c
  9bebd659a3111fbba4fff6c39483b911  gcc/testsuite/gcc.target/i386/pr119425.c
  ef2cdb48cbe0dedfce0d7eb770a1f30f  gcc/testsuite/gcc.target/i386/pr119450.c
--- 86153,86160 ----
  bd75c2f2962774fbfe5a6a6007998c0b  gcc/testsuite/gcc.target/i386/pr119171-1.c
  ccbd1332987abb6ae1d43a2bbd8cc701  gcc/testsuite/gcc.target/i386/pr119171-2.c
  4443ac3c8ec04223080890b714b6e79c  gcc/testsuite/gcc.target/i386/pr119307.c
! 585957011c1a198acac62a364eb8cc3a  gcc/testsuite/gcc.target/i386/pr119386-1.c
! f2f4c3891b4c7711105299435de5a9c0  gcc/testsuite/gcc.target/i386/pr119386-2.c
  0bbc89787e90da2fb5dd023fb83ca22b  gcc/testsuite/gcc.target/i386/pr119386-3.c
  9bebd659a3111fbba4fff6c39483b911  gcc/testsuite/gcc.target/i386/pr119425.c
  ef2cdb48cbe0dedfce0d7eb770a1f30f  gcc/testsuite/gcc.target/i386/pr119450.c
*************** c1a42e6abf341c78082c17c60365086c  gcc/te
*** 86118,86123 ****
--- 86183,86194 ----
  b69eb677daef92be04da1f0e0218c44e  gcc/testsuite/gcc.target/i386/pr120840-1b.c
  90c426e3f9f68074b3688e77c0a85c20  gcc/testsuite/gcc.target/i386/pr120840-1c.c
  b157fbe2632de5156079590d5faadfd7  gcc/testsuite/gcc.target/i386/pr120840-1d.c
+ 906e507034982c533b2ad0a2614d8730  gcc/testsuite/gcc.target/i386/pr120881-1a.c
+ 99479cd9600e1e2a8ae9b7781b9895ea  gcc/testsuite/gcc.target/i386/pr120881-1b.c
+ dc5699b1ed908f2743344eb7eccdf1b4  gcc/testsuite/gcc.target/i386/pr120881-1c.c
+ ee181f50a327c5ee8df5da7cab955ca5  gcc/testsuite/gcc.target/i386/pr120881-1d.c
+ 9e01dd8a47d1204b9266fddba59ae6da  gcc/testsuite/gcc.target/i386/pr120881-2a.c
+ 307d8a4169ca59164e9e13b544538eab  gcc/testsuite/gcc.target/i386/pr120881-2b.c
  e33b63cd8f6d60b286b2286424f25714  gcc/testsuite/gcc.target/i386/pr120908.c
  b03b1d817538a863277c823b5e4cdf75  gcc/testsuite/gcc.target/i386/pr12092-1.c
  90f0a4cd64e0d1518eb33e96a887ea31  gcc/testsuite/gcc.target/i386/pr120936-1.c
*************** dc16be3575b02803198cc00eac4f0ffe  gcc/te
*** 86132,86137 ****
--- 86203,86218 ----
  e46459a506a641702fdeaa8713b478db  gcc/testsuite/gcc.target/i386/pr120936-7.c
  b56b7319ec16cc733aa742b3020839be  gcc/testsuite/gcc.target/i386/pr120936-8.c
  c76df20d01878e92fcfede59dff4d377  gcc/testsuite/gcc.target/i386/pr120936-9.c
+ 56e6214e78411271065383bb6b1486a7  gcc/testsuite/gcc.target/i386/pr121015.c
+ 515b72df52c2bf5b6d8e75709651af68  gcc/testsuite/gcc.target/i386/pr121062-1.c
+ 5652a3df7a8eedd930822cda2fa45a36  gcc/testsuite/gcc.target/i386/pr121062-2.c
+ 24252ca24cbd1c83a159d66504360be7  gcc/testsuite/gcc.target/i386/pr121062-3a.c
+ b8ed1da53d7ba7c91e9b2842fb7537a1  gcc/testsuite/gcc.target/i386/pr121062-3b.c
+ 183b6220a84aa496944825165f599d72  gcc/testsuite/gcc.target/i386/pr121062-3c.c
+ c2c742123569404e7198c6df1a36f70c  gcc/testsuite/gcc.target/i386/pr121062-4.c
+ ea3bd3c87f1bfab3ecd4b10938603f3e  gcc/testsuite/gcc.target/i386/pr121062-5.c
+ 83011205f508dd00327e23a37b671164  gcc/testsuite/gcc.target/i386/pr121062-6.c
+ 2eba911200c45b8588594a65f754ab19  gcc/testsuite/gcc.target/i386/pr121062-7.c
  f99f88a6e994ad6e55e065e41bc58f8f  gcc/testsuite/gcc.target/i386/pr12329.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
  9a752a4b3b77930d91d3c8b0c8897b90  gcc/testsuite/gcc.target/i386/pr13685.c
*************** af640e6417bda894b964dcafe04ebb19  gcc/te
*** 87327,87333 ****
  ad0f59e4fe0e9407ebaddb65a2989530  gcc/testsuite/gcc.target/i386/pr82659-6.c
  e73aed461dc16fd9b7669c6321cda770  gcc/testsuite/gcc.target/i386/pr82662.c
  fcb18a6ebf93b2667c4106b03dea5945  gcc/testsuite/gcc.target/i386/pr82673.c
! 63efe3801cd250766ce11b7933f4bcf7  gcc/testsuite/gcc.target/i386/pr82699-1.c
  4bacd6d34ff9fea3fd2f47f877ea4d79  gcc/testsuite/gcc.target/i386/pr82699-2.c
  13e9bbe297f4f4f90fb9a5e5135b57dd  gcc/testsuite/gcc.target/i386/pr82699-3.c
  2ce43f369a7a3b048a6cdb447bb9890e  gcc/testsuite/gcc.target/i386/pr82699-4.c
--- 87408,87414 ----
  ad0f59e4fe0e9407ebaddb65a2989530  gcc/testsuite/gcc.target/i386/pr82659-6.c
  e73aed461dc16fd9b7669c6321cda770  gcc/testsuite/gcc.target/i386/pr82662.c
  fcb18a6ebf93b2667c4106b03dea5945  gcc/testsuite/gcc.target/i386/pr82673.c
! 0a176b418a2f7b11b154e2af29cd8110  gcc/testsuite/gcc.target/i386/pr82699-1.c
  4bacd6d34ff9fea3fd2f47f877ea4d79  gcc/testsuite/gcc.target/i386/pr82699-2.c
  13e9bbe297f4f4f90fb9a5e5135b57dd  gcc/testsuite/gcc.target/i386/pr82699-3.c
  2ce43f369a7a3b048a6cdb447bb9890e  gcc/testsuite/gcc.target/i386/pr82699-4.c
*************** a7ba2e5c68834495ccecdd75f123f220  gcc/te
*** 89497,89502 ****
--- 89578,89584 ----
  dbfbd76701c5c3e6c8ed37ced1ba9cc7  gcc/testsuite/gcc.target/loongarch/pr119084.c
  bfebec3a4dbfa9680a4285589498905c  gcc/testsuite/gcc.target/loongarch/pr119127.c
  dde2cba27bc4292492e4c0dd492a70e0  gcc/testsuite/gcc.target/loongarch/pr119408.c
+ 359760e5160f4b52d2fa349806589a0d  gcc/testsuite/gcc.target/loongarch/pr121064.c
  1eac553341d725c6e59615b593aedb0d  gcc/testsuite/gcc.target/loongarch/pragma-push-pop.c
  3adba2a8ae6f671eb22ec8228777c1ac  gcc/testsuite/gcc.target/loongarch/prolog-opt.c
  1bfa30f99dc5f04f569fbff68640ab19  gcc/testsuite/gcc.target/loongarch/recip-divf.c
*************** b8b52424b352c9c8f70592d6f03b5a86  gcc/te
*** 93810,93815 ****
--- 93892,93898 ----
  a919202ce244d49003df5ad24d6682bd  gcc/testsuite/gcc.target/pru/pr106564-3.c
  cf8d82ddb80b76405af0214285246746  gcc/testsuite/gcc.target/pru/pr106564-4.c
  95d60ee7241a44ee286f73a59e590913  gcc/testsuite/gcc.target/pru/pr64366.c
+ 5f7730ea294934e3f6cf1feee72812d4  gcc/testsuite/gcc.target/pru/pragma-ctable_entry-2.c
  aa63cbae8ab220e484f3dfce0053edb2  gcc/testsuite/gcc.target/pru/pragma-ctable_entry.c
  48d111b0bd9bb535a363448cda4d7313  gcc/testsuite/gcc.target/pru/pru.exp
  7a1298d80f26753aedd3f2268299e382  gcc/testsuite/gcc.target/pru/pru_irq_map.c
*************** df1e6186129f1056cb9287da6e0a2c85  gcc/te
*** 94506,94511 ****
--- 94589,94595 ----
  3311f6659838594b5135f5297b263bd1  gcc/testsuite/gcc.target/riscv/mem-extend.c
  16126a8d4ef67d573cd4276fa7c8cb6f  gcc/testsuite/gcc.target/riscv/memcpy-nonoverlapping.c
  2dd2de1f802134107e9ed820836a3aa7  gcc/testsuite/gcc.target/riscv/memset-nonoverlapping.c
+ 155b4b4616cf38c809b507b28b13ffd5  gcc/testsuite/gcc.target/riscv/mipscondmov.c
  ec03a01a1787f67f3d9feb5acba7fd89  gcc/testsuite/gcc.target/riscv/mode-switch-ice-1.c
  dac2e910720bdf6a800fc9ba5980ff14  gcc/testsuite/gcc.target/riscv/modifier-H-error-1.c
  5a41a6a8ba4701ce0738ab05274c8fcf  gcc/testsuite/gcc.target/riscv/modifier-H-error-2.c
*************** bcfaff8c96a5626a9e266625ed326c1c  gcc/te
*** 94983,95014 ****
  c06e6ed768abf01be45f07cd0f30d0f2  gcc/testsuite/gcc.target/riscv/rv32i_zcmp.c
  3e4bfa9ed1e14f800d0563ed26507250  gcc/testsuite/gcc.target/riscv/rvv/autovec/align-1.c
  1331d22c6b347ed0f6bbf2533892ae7e  gcc/testsuite/gcc.target/riscv/rvv/autovec/align-2.c
! aaa81c96ac467d4f428ed13b3a12b601  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg.h
! e1d6485e0aa259551489ed62980019fe  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i32.c
! 78f9d5f72ae542de31e4ae1f8ab556cd  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i64.c
! 84c40fa236aef7913b6773891e80a5be  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i32-from-i64.c
! 48fa56954356e702faa8b1b55a4396d8  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i16.c
! fa2be3e0b7306d27df8607b7b1cbed59  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i32.c
! 44f4eedc2d9224298a86315fc7119f82  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i64.c
! af6653e2e32f0b1f6e153a7b476ec8f2  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i32.c
! 891dd9dc35f87c068f46f93e5ad66180  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i64.c
! fe53f601206bab816ad7a5bf728787dd  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i32-from-i64.c
! 2b6fb6c484989ade64ea8c517ca6f796  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i16.c
! 6140bdd7a1e913756db9fac3b3309a45  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i32.c
! 2f8729a91ead1cff35931466d83c4ce9  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i64.c
! 9fe3f977c34ad6766f00f208bc7f24d1  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_data.h
! 69e76564b4fe14441fdbab3fe9d86230  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c
! 317573095b091e8e0bf3bea23476f91d  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c
! 76cc49f4d01d4c6c9921f8e9d67ed2ec  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c
! 03151e9b6effb2473607ec8b58009389  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c
! 647a42c25b1b1afb623dc95cdac155b3  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c
! df8e47c40339f640d7a56eb5f8f7bb57  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c
! 111a5c6db053dabd42b492ca8dd578b2  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c
! 82184d992308f929fad9c9530cb7566e  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c
! 697077860d252792660950a1249e29f2  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c
! e7321dd181eeec3b57e977ecae2c5bd6  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c
! a7b448328c7597335e45b71033ae0c8e  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c
! c09231d04f636ba67afb00333382e76a  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c
  c741cae5e21d28ce38de150928d9ac2e  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_run.h
  703460f530006a4fc7115645853f1a43  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/copysign-run.c
  cbdfece595adf310fc82fb6d6a77a7e9  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/copysign-rv32gcv.c
--- 95067,95102 ----
  c06e6ed768abf01be45f07cd0f30d0f2  gcc/testsuite/gcc.target/riscv/rv32i_zcmp.c
  3e4bfa9ed1e14f800d0563ed26507250  gcc/testsuite/gcc.target/riscv/rvv/autovec/align-1.c
  1331d22c6b347ed0f6bbf2533892ae7e  gcc/testsuite/gcc.target/riscv/rvv/autovec/align-2.c
! 081392dfe0eff61072d6f16699ed95c9  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg.h
! c45b2fad78a59db52de9e340233e554c  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i32.c
! c168a13dbbf727aedfd7a56a8b1e112a  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i64.c
! d8436d1e4dcf3a4805b94701ca0bb43e  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i32-from-i64.c
! 293bc9acc0586578dfa342259102e743  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i64-from-i128.c
! ee01ca88385c684737d307e788a41992  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i16.c
! 1146f80f452656812102f2ce916ba71a  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i32.c
! 0fe5a2dadcde4ae9a1902e619e2f74ad  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i64.c
! e1d678b716113456b7b617d600c7cf3f  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i32.c
! cf9e6991145427abf209cb49676043f8  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i64.c
! c080d0497a19845884cce7376c6f1b88  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i32-from-i64.c
! 8d3c0335fd038d44b8474636677c66df  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i64-from-i128.c
! b567d064b633bcc5892587abf126cbd2  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i16.c
! e3cb3e16ba0a638aad631d2d0e569d51  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i32.c
! 40f241f8ba9ecb4dcf6979b282bf9f85  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i64.c
! 5a13bc625c651e6dc843fa123870f429  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_data.h
! 36ac1a6d2a8dbd6f318aa551328354b6  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c
! c1e6533b08293d4b5dcaacb46a4a858b  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c
! 01037ff3f982a375eb56f210bdcede74  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c
! 41d6c1ce41b0a4c7a50e37180afd71a8  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i64-from-i128.c
! 3194b24560b37628ac4a337f916bf99f  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c
! 2c05874b923bd9d5e40b17be6acca4dd  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c
! 4607959c420c20b650d970e94a003457  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c
! 30f94d053f8447641715854a36bf0666  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c
! 0530db6b2bf8021f61791373def267cc  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c
! 282c281b56556ba1271e97e8962e8710  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c
! 2e56de0c9e39628d011caf40f18aa7c7  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i64-from-i128.c
! 26dcd6a99568a0e0c15d4f88c23fa327  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c
! ccebf9d0d5590c48c6cfdda69f1c8842  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c
! 46c16130d5bb1abea67af9f76eae9369  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c
  c741cae5e21d28ce38de150928d9ac2e  gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_run.h
  703460f530006a4fc7115645853f1a43  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/copysign-run.c
  cbdfece595adf310fc82fb6d6a77a7e9  gcc/testsuite/gcc.target/riscv/rvv/autovec/binop/copysign-rv32gcv.c
*************** a98d30dc75773026799b3df3f3f8381a  gcc/te
*** 95791,95801 ****
  a0d3c0787f790a47ce268b55b81d62dd  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc_zvfh_run-10.c
  979e78c5ed1d2ba91a46584480362b26  gcc/testsuite/gcc.target/riscv/rvv/autovec/riscv_vector.h
  0e18415d78f87bdf98f3eb96f98969b3  gcc/testsuite/gcc.target/riscv/rvv/autovec/rotr.c
! e5bdd2391549b046e96aee664c44dafa  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
  6f530e5176febab88f9aeaf7130a08e2  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_binary_vvv_run.h
  2051a9c90b6c265bff2dcbd75138e2be  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_binary_vvx_run.h
  4b3a9b370d9da4cbc5629a1633cc4b37  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_binary_vx_run.h
! 806468c0d3cb1d1d91493a0362a283df  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h
  ad82cda06983f97da259909744286ef6  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add-1-s16.c
  ef5d162de2581d4ca808b2873f2c688a  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add-1-s32.c
  7c33cbff6d939e62cb26f72c6b52a89b  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add-1-s64.c
--- 95879,95889 ----
  a0d3c0787f790a47ce268b55b81d62dd  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc_zvfh_run-10.c
  979e78c5ed1d2ba91a46584480362b26  gcc/testsuite/gcc.target/riscv/rvv/autovec/riscv_vector.h
  0e18415d78f87bdf98f3eb96f98969b3  gcc/testsuite/gcc.target/riscv/rvv/autovec/rotr.c
! 5fa95aaa8929bc6e9eec7e2afd1138f1  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
  6f530e5176febab88f9aeaf7130a08e2  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_binary_vvv_run.h
  2051a9c90b6c265bff2dcbd75138e2be  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_binary_vvx_run.h
  4b3a9b370d9da4cbc5629a1633cc4b37  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_binary_vx_run.h
! f4d542c8b9470f87144c5b8a93008508  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h
  ad82cda06983f97da259909744286ef6  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add-1-s16.c
  ef5d162de2581d4ca808b2873f2c688a  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add-1-s32.c
  7c33cbff6d939e62cb26f72c6b52a89b  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add-1-s64.c
*************** db97640af72813d09c8b3b9bc1943e59  gcc/te
*** 96098,96103 ****
--- 96186,96199 ----
  4ad4a175202e79d85e4d26d92c3758f6  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-10-u32.c
  14cc9f69845755eb7e39ccba01ba6cc5  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-10-u64.c
  9deed2277d7764555ff3ef8c93208bcf  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-10-u8.c
+ 6f84fbeb2081fbc4e9afa8f609371d94  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u16.c
+ 26b375b5757effa251014b2aeea89e65  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u32.c
+ fab50cfa57eb272c16250055597282cc  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u64.c
+ 3de47c532a820fea8a61724c8d2aae4c  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u8.c
+ 2ddc13db5aa35517b9e45037ad214871  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u16.c
+ 08a4f66722cab0c63feaa074f282a90b  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u32.c
+ e0018dda37bc4f1c7f0f488b09e96f99  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u64.c
+ f930c5d5e44169f220f06b1cd2f96eef  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u8.c
  1288f584403d519ccca1ad54872e0861  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-2-u16.c
  23ab78b3569fb86e5a4b883cd8a6141f  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-2-u32.c
  18d04e65c25b72b8fc78e14f0f6d304c  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-2-u64.c
*************** b4ee88850bdf58ae558a9834969c2bd1  gcc/te
*** 96130,96175 ****
  d1a2f48de120d997f6d0b718795d782e  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-9-u32.c
  cf37e6e1f5eec99c02662d2f6841b529  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-9-u64.c
  b6861d16f49fc7a7b5ffbec989cf792f  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-9-u8.c
! b66ef20ce0176ee155e68d60e3e5a2fe  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c
! d760db4f2e7849537f5c5b82b2505611  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c
! 5ae9d1255503123c38f27ad01bd5931c  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c
! c300924e9ab37009bc121e6961b7489c  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c
! ff8273e5e89cd14025221f87057a84c9  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c
! fb24acc6a84355f29bd79385e350d0c1  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c
! 39b1b0d70c9cf62c01bef97a0f1c1ee1  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c
! 842957e8ccfcc6a57c345c76e210c324  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c
! dbebc34d0bdf4ff4c84e48afd9fae142  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c
! ff6e0c13955ff102b39c891f053a8331  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c
! 670aa463bac6f91147df3e61e01f6f5e  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c
! e1234f6f0f7eddc6128453431c4d1557  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c
! ee8aa489f363dd391cddb7f162598f03  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c
! 50b3e2ffdd33e1a01c199a3cb499655a  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c
! aada0fd7647cae86af90f1e1f3904273  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c
! a1e39fb2e09ce71de74e3fa8fe0e86f9  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c
! b10267a60e7c5c1acb3a9d1b3635e450  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c
! bf7bf4ddd0044872ab4d67026b41e761  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c
! 81c2c13ca8ca8c03ecbf72d0d58b4d87  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c
! 2d26fe205da638a319802793f07a1c05  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c
! bd74c9647c5ffae722ce375363b3fe03  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c
! 90263b35a963119b251d4067e4166a5c  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c
! 54bdda56680a98af15b7195eaac9adf7  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c
! e7df4312de8e33a5e491e62ab2379cc7  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c
! c9d6a041e8f351e185e7bc4b6c6d603e  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c
! bbea5fcfbc8acba31edfab5b884be0ff  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c
! 81a763702428901bacc769645027fc19  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c
! 485fdf02321f4fc7e0571153561386da  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c
! 7aeb2e347ca347f0c61d0a1f15a941c1  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c
! b6d7d45c87e409ea8aca5c7a8c186204  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c
! e74ff98ca394a51ebfe2fd57d176dd0d  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c
! cc34502678afc6146f7171927aded0d1  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c
! 00fde478e123b90c4ea9a36446374e1e  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c
! e6d637f918d9bda5ed432dbbecff7292  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c
! 99cbf005e9d9ca982b2a37632580b7b4  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c
! a7ded269974b5396cef5bd1d912e7066  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c
! e21e82d06265dce169613b1fab4b02c7  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c
! ac7a793580c6ee13865ca8f605bcafdb  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c
! 659b6b013df2d75b2701572d3a2b59d6  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c
! 6ccb9a067b660a6c3fcc3ca2b33ad5df  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c
  e25c69ca06210af1c9680b1ff1b97fc0  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-1-u16.c
  29fa84993f4685be54a0f1c74cacacbf  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-1-u32.c
  2cc7d967119a941899b8674c73ef4eea  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-1-u64.c
--- 96226,96279 ----
  d1a2f48de120d997f6d0b718795d782e  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-9-u32.c
  cf37e6e1f5eec99c02662d2f6841b529  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-9-u64.c
  b6861d16f49fc7a7b5ffbec989cf792f  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-9-u8.c
! 8f608be3eecadc9f0be5a6383342dfb1  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c
! 3f1a58ca5b432be7de19ddbdf6ddd3e7  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c
! 4b833feaf0686c75695ba1811d182f9a  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c
! 64cabf82fe96e6da83c52a57d76e07a6  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c
! d0f4e1ebfb3a4452f38c27fcbe6187a1  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c
! b9a1e6677f05d3195ee22a2ba95598bb  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c
! 9b3d63c635ab6d65e410c337808581b7  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c
! 7557869a70d1ea3a3edd7a36db126eb8  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c
! 62d322ca89add23ee52a474bbb312931  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u16.c
! 95ddd520c04d6ddde2c3f1b74a941809  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u32.c
! 60c725e1e63afa32b9ec3418b98352b4  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u64.c
! 4d4d997f28239cb11a94eaa90bda465a  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u8.c
! dcff374177da8d30583a9f8d443fccc2  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u16.c
! fa72041d63e924f8e89aa3302613359a  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u32.c
! cdfe442b3e9d767ee463d9097459b1f1  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u64.c
! 1f997c8b005e2b61a28fce9da97bc948  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u8.c
! b3d176cfcd760672647efa717606b07c  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c
! f11f8f3eb9ce96d158fb3a7c5db50e29  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c
! 4214ffd951c980fda045446344bd3869  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c
! 4f14dae70156a1102ce2706044f7be8e  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c
! 0f68505f164777d629bb95f60c6e4e68  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c
! 8d09dd92135bb2491e304d31b76d0117  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c
! b9a053d1ed345ce1387b2625d420410c  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c
! 9c82fef27027289d4d5e26ffb4cc1a2f  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c
! eb9cbe7ab99e4c6b6c95e91649b597a6  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c
! 803081753c964cfedc9041bcfc45b44f  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c
! 15eff335d61f2b3b9a90a96d01b0405a  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c
! 21278f446a2360a6e03c736647ed0e88  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c
! 85ec54099ffd2b1708f68258bbc648e5  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c
! a8fda7eaf246ff64acda34a070f5c2af  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c
! d4b5ae51d0af091d14937af990345b74  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c
! 2339e58e7f4149fcfe9c9ca34429b78b  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c
! 48b5d4b25832811e63c337aa0b51cc50  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c
! 70ab33ae01cd9245439d29577137ea7a  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c
! 89438cd0f66da50806546efd8d45ef51  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c
! 1d3bb8db39ce8e20213c2e56b9bffa8a  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c
! 6cece2eb16be87fdf72dee64255140cf  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c
! 6423cf8401f51ad0fb7ac9fcca2f08d5  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c
! a4f86fec892f49bfbc4d43464e0384c5  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c
! ee792e53392bf711f786d141e08a2110  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c
! d3acc94eeb93bfab5d49dc343798bd32  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c
! be39a29690fbfda4a4070e5faad0a2dc  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c
! b2c0e1e164b2263ebb650bdb336aaf71  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c
! 1870f348266d40ecebcbade07d293519  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c
! 8ac343958de658cee77fa386ba90a415  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c
! f17a285f95404b0095894e611af1f067  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c
! f9a39f302ae414450b78d60c9901d039  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c
! 5859f4039f23186dd2bfa8b1f1b4d95a  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c
  e25c69ca06210af1c9680b1ff1b97fc0  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-1-u16.c
  29fa84993f4685be54a0f1c74cacacbf  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-1-u32.c
  2cc7d967119a941899b8674c73ef4eea  gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub_imm-1-u64.c
*************** f95d4e0ecca41e722099be6b52b3efe7  gcc/te
*** 97205,97225 ****
  35044d6a949091b4c23addf451f035ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-rv64.c
  0026b1e2310b7242895d290cff3f1e9e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-template.h
  2d052315288cbb1a315add9fb76abbc3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vreinterpet-fixed.c
! 7c9da26a36d1399c84c04f88bfa33670  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c
! 50728df578c72141c84e19539aa9a936  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c
  fea54bb5a266eff0820350de1af77b72  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c
! 2153285f7fded17c7f8f30fdff3b49a1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c
! 38388be2ff42d5bb10ca4cf7dccc5077  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c
  5daea474bc1bfdba230c7dac9ff7eef5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c
! eb1f45d4fcd35f278e7709b660455f04  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c
! 1320b062477b98c6fe14d5846140fbf6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c
  6cfd7ead5e3067abad015bc85be198f5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c
! 2852596345847f098b0fe72cd12b105e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c
! 29c3cd53b83ec02101bcaa183d0cc3aa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c
  80f6cd8c4545ede87b8410857115bc89  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c
! 5e9dea14b882222608d901654711d9f5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h
  1c4119935df2b0a9b4ab87cf47a3cdd7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_data.h
  2714f0d833a302283af9fa8d888862ad  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_run.h
  dd30805eacb1ee8bb47eadcb330548a0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c
  7eb8dc7e69dd9f6638980e77cd6e6efe  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f32.c
  db6c9fd046686fdd17cc7ffc5fbfe33a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f64.c
--- 97309,97330 ----
  35044d6a949091b4c23addf451f035ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-rv64.c
  0026b1e2310b7242895d290cff3f1e9e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-template.h
  2d052315288cbb1a315add9fb76abbc3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vreinterpet-fixed.c
! 8a9af5b9b6be10c20f56239fe068b3c1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c
! ecaec8c66f1a55ec41b320124b20cac1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c
  fea54bb5a266eff0820350de1af77b72  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c
! b71903d3401892805ff8563dcf4f6340  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c
! a9aef7f2b64ef61131265008345821f4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c
  5daea474bc1bfdba230c7dac9ff7eef5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c
! db5b1cfcfc45d15afc842e61baaf632e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c
! ba43fd40137d2e6509066eaad9266691  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c
  6cfd7ead5e3067abad015bc85be198f5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c
! 32eb343d9efbeb1d62134a7b91c40c5d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c
! 30056c447fc7da2899e948f7de4552f7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c
  80f6cd8c4545ede87b8410857115bc89  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c
! 5ac387603c0d24689924b3d78ba4bbf9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h
  1c4119935df2b0a9b4ab87cf47a3cdd7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_data.h
  2714f0d833a302283af9fa8d888862ad  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_run.h
+ 941e2ccb37cdbf0216c404d1a4cd6745  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_widen_run.h
  dd30805eacb1ee8bb47eadcb330548a0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c
  7eb8dc7e69dd9f6638980e77cd6e6efe  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f32.c
  db6c9fd046686fdd17cc7ffc5fbfe33a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f64.c
*************** bdefbf3eeea1f08fffd42d2bde350dea  gcc/te
*** 97244,97249 ****
--- 97349,97362 ----
  018f106afd1a02469cdc269e5476f8ef  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c
  dfc52616a58f523908e41a5a4e0f72b2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f32.c
  813960aebe71c2622a67c2b2649a8973  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f64.c
+ 88d0a5ad2b4bec245f134652c1d08554  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c
+ 3d2a7164ecf998191c3df62b3eb98cb0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f32.c
+ bafa6f54ebead2e225773e895d5d5654  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c
+ c8ea40c4b9abb00be5f9636824cb84e2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f32.c
+ afc1560698bb7aa6343a80f07aef828e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c
+ 12dbee70f513595c141538484edde7ca  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f32.c
+ 43b815effcfa51f4135a489d2c07c8d0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c
+ 99b2ebb0aea4ec8f59a77cce1a6130c5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f32.c
  55a91078489ade32c51f8e4e2c6efb27  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
  6c4d3bb12b5bf6e00c3cedc0f432a18a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
  70954d5e009a5c0bebb0b80760f293b9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
*************** bd5fe2ac8c7ea125bd674e1aa8150399  gcc/te
*** 98362,98367 ****
--- 98475,98481 ----
  8b2c7404cd85cf68ef9f9b68577ae5cc  gcc/testsuite/gcc.target/riscv/rvv/base/zvksh-intrinsic.c
  c408b1a7f84e4b815e85476963221ae9  gcc/testsuite/gcc.target/riscv/rvv/base/zvl-unimplemented-1.c
  527003a16d82851a0dd57a93c29bcab7  gcc/testsuite/gcc.target/riscv/rvv/base/zvl-unimplemented-2.c
+ 2865ee85ce614d77ff279bf2235dfe51  gcc/testsuite/gcc.target/riscv/rvv/pr120297.c
  abcf176e84612215d7a4bb01e5aafc34  gcc/testsuite/gcc.target/riscv/rvv/rvv.exp
  ecf4c4ab418350831d4471534a47d02a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/attribute-1.c
  0886d2586a892610401ae61b27c200f1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/attribute-2.c
*************** fe865d9009af7551d830f6d4e3008ebe  gcc/te
*** 98858,98879 ****
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
  14b5de1cfd9e7e5da8f6205e783399b5  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  89d90b13c13c2658dcc8319771cd755f  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
! 3ab4643679c40f024b38869976721fb5  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
! b5bd745f6b9117ac4e1b1964f07756fb  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
! 7466b8499bd6396823fc38e8b79b1523  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i64.c
! c47935615fdc1013c93dcc8cd51657fa  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i8.c
! 74e2e5f739876cd6b6b8288a3ae22af9  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i16.c
! 04d86a86fbc311f723b4f2ac1cdceea9  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i32.c
! afa570df0e3b3b0f3b71f688d82f8a84  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i64.c
! d65b2c7ace72213d8b7b2604ae2998c5  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i8.c
! 8e87e3bec12fd993f916d79964a60703  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i16.c
! a639e104716d174485c3b15dd0cd52d5  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i32.c
! 4ccef6b467e4f19b1cdbf6a07bdf4790  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i64.c
! 377800bd6ea342e6a16d71973ad9a058  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i8.c
! 31c82f3063f3c57504eb9241f56e02be  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i16.c
! 2e0e87c0b8227177ded2e8acfd65a53f  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i32.c
! c754450bca8be3c54815350677ac6f0b  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i64.c
! 5ab8ec41996e9185e872a23b19f48964  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i8.c
  634ba98e940c9c6f33677dcfefc6b104  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i16.c
  7b6c5db714705b4afa9ebd15fa90a65c  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i32.c
  8b100542d57ff431e5765209e4853e43  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i64.c
--- 98972,98993 ----
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
  14b5de1cfd9e7e5da8f6205e783399b5  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  89d90b13c13c2658dcc8319771cd755f  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
! e52f03a6378cd78f7ea04149c2b8215a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
! 1de70dbaccb7e9fe73b8e90ec7430b4d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
! 6dd05b951b562cf5989d09deeb486a57  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i64.c
! 27764d8afbb61f9070bd0b735160ba5c  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i8.c
! 4b3df78c3237864a2593004c110032ba  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i16.c
! 7b813f073dc70ee38e89cd23a34933ce  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i32.c
! 8288eaac7cd985bf5c7e650f6cf4c22d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i64.c
! c1bc61394089055ab8f40daf316920cc  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i8.c
! 5bf4a08714346f57fad73d1e0f18e374  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i16.c
! fd00fb810a3f1b91a1c6c74e81b5ee39  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i32.c
! 11ca6a34c066dd6f617fe2c9428e9775  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i64.c
! 4fdef1719975a88ceef8628a2668abb8  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i8.c
! 93b62cadbbf9d5cea4386780fcb6f9d1  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i16.c
! c41617da0fe4cbbda84bd21222cbd454  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i32.c
! 77476b6088eaeb539602541abcd36ce9  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i64.c
! cc6928ab3ee4c4c4f4456720930ef771  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i8.c
  634ba98e940c9c6f33677dcfefc6b104  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i16.c
  7b6c5db714705b4afa9ebd15fa90a65c  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i32.c
  8b100542d57ff431e5765209e4853e43  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i64.c
*************** edc07df569a4e6d093432c6521d37de9  gcc/te
*** 98890,98903 ****
  6e83c7922f64fc9d85b2170bafc28fac  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i32.c
  2428660a63725b50a7e40a560fc733f6  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i64.c
  cf4917bef60ef16a75366154ef792dfa  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i8.c
! e11e93f672c95ede30a7d5026b91f367  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i16.c
! a94361e04473a2c6b07f0006cc21020d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c
! 97d8b0836937f8fe659245f11700da42  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c
! 30f5c02a7e982b6c8bb655d3137af05e  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c
! 68c2e02f6bafdf67ded027684a93f05a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i16.c
! 60adfd52c884a1fa3d7ec034c35bfc1a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i32.c
! baa326a38e2ab47e69028a797e5b2fe9  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i64.c
! 7879041333441934c447baabd7cac72c  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i8.c
  194d1aa63a23ecbc52c282602dee47e8  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i16.c
  b6c05474c1e42c3da50dba2524519d3e  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i32.c
  bebbfe3ec914363870604dd8ac4deb8c  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i64.c
--- 99004,99017 ----
  6e83c7922f64fc9d85b2170bafc28fac  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i32.c
  2428660a63725b50a7e40a560fc733f6  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i64.c
  cf4917bef60ef16a75366154ef792dfa  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i8.c
! 528cb7a35dfa376168d45ce4e432fbb6  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i16.c
! 426d6e58fcf9a8a31cdcdc51feea6e0c  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c
! b9dae29e2ea3744b52a5f6bab457861a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c
! c6e4ce21d17d15acdd34b41ad652ea63  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c
! 2a44ea85f7a78b2af64db039222401a0  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i16.c
! 1c1c35e8b0946be1b650de2f0590d5be  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i32.c
! 9a51b6e0ed0a2b467e90457cf4301ebb  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i64.c
! 57415f0ddc6f3507841dcef4d2134207  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i8.c
  194d1aa63a23ecbc52c282602dee47e8  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i16.c
  b6c05474c1e42c3da50dba2524519d3e  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i32.c
  bebbfe3ec914363870604dd8ac4deb8c  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i64.c
*************** a4b60331fe2f752ce161081b8bcdd275  gcc/te
*** 98912,98933 ****
  846b4c034c52e1ba01068025a5e77f24  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i16.c
  5355149b6c04b1eae8c847ab040357a9  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i32.c
  de74c9cd17a3a83f5892b7207aba8ec2  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i8.c
! 72810fff8f00c0146a77f13c9741cbbf  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i16.c
! 9361bec687751a64dfe2b0a3c1e1f4ab  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i32.c
! 51af994b03c7a92302c8bdbbc2dc6ac1  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c
! 24a0855adef35d698fa44d445bd74c76  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i8.c
! e9ffccb6d88d33abd815eda327c5312f  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i16.c
! 6b01abe9524e873eb01eba9896ab0314  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i32.c
! 1e02b9b127e155de233ff1ba81007165  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c
! 400c625309fb628a82db7b0be9492eed  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i8.c
! 6726329ff6ae774b69c92511ae5e0c5a  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i16.c
! c0e2ce9a5e3ae3f94fc127429bf3562f  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i32.c
! 86bd36a4551f84b47f3ab01940d73844  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c
! fb9a7e1e4a86102c2722e4233cb31ec2  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i8.c
! 768df5756688efa4a1029d2fba657730  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i16.c
! 21592f0a4bcb721302c54448b168a585  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i32.c
! 5989f14d48365a185e58a9a3c36e15df  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c
! 99dd3f638ec00946d2af0f79e8cd1353  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i8.c
  608daf4ba32a68765f9e052a74e116c8  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-1-i16.c
  b2bf0b435fd59a395185c4bd9d88618e  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-1-i32.c
  fb41d1cad35931aaed241983ee217259  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-1-i64.c
--- 99026,99047 ----
  846b4c034c52e1ba01068025a5e77f24  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i16.c
  5355149b6c04b1eae8c847ab040357a9  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i32.c
  de74c9cd17a3a83f5892b7207aba8ec2  gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-2-i8.c
! 3f8ec8f95a74b0df73797de97bcd199f  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i16.c
! 2063a27ee5a05f3d6d6c62dd43ac1c61  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i32.c
! 3a8d63861616f3c3a91509c405a46751  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c
! db0b5e11da23362ca56469c02c0dba89  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i8.c
! ed5497d08897d1963576a768d7c415bf  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i16.c
! d73b6c215cfb07dd79728efbc5ad7b53  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i32.c
! 08070e1fc649ef17c1f163d4326a3cfc  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c
! 285833db66c91a28456cf044bf8b6af4  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i8.c
! fd2ff297b74fc12237edb50568babe26  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i16.c
! a089aea28e92ab662acba5de9e11d072  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i32.c
! 29667297cbbbd694eed79ed314b7428d  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c
! effc06f49b0c83f3db34cf456618a600  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i8.c
! 31e952e03ec40fdc7e9c413fddcf6a6d  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i16.c
! 6eb5d76b0903754dd2dcb47a81144b4d  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i32.c
! 90fead7533a3d82bf90ba3d1f780f5dc  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c
! 3668dde205ff5fd297fedc643edf2081  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i8.c
  608daf4ba32a68765f9e052a74e116c8  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-1-i16.c
  b2bf0b435fd59a395185c4bd9d88618e  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-1-i32.c
  fb41d1cad35931aaed241983ee217259  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-1-i64.c
*************** fb41d1cad35931aaed241983ee217259  gcc/te
*** 98944,98997 ****
  5de395d3d2261a36f2c67a42c328637c  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-4-i32.c
  d30aada616d652468a6453cd505a87f9  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-4-i64.c
  7f2e175b5a241a0127316a36d567eca6  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-4-i8.c
! e65d2157a8c69efced312fcdba227417  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i16-to-i8.c
! c20a473257529a82c08f01ad30ec76b8  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i16.c
! 88217f6351577c90bf53c992223d527c  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i8.c
! ce2e503993f467fd167938f8ef3b5d65  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i16.c
! ab2b73b5e2a4da78d7ec19595facffa7  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i32.c
! e700481b6d82aef6a8b2d4a886bb67f8  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i8.c
! 76928c28b9f77194351e282b6d3b3843  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i16-to-i8.c
! dea052537d14c5cf8987058c2053d340  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i16.c
! fe8d0175dec3fb80373f32afcb24bae5  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i8.c
! 497e1737544fee6cdfa28866de7a1bbf  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i16.c
! 0dc50fe5a8805a37cdd9d9ea54166802  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i32.c
! a4610289a4df23a2c6199dfd746eeff5  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i8.c
! 8d5f53a4f1b54b93c69d513dac882e7b  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i16-to-i8.c
! 0bf3bc65a645dc093ad94550ac12dc51  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i16.c
! 234e278f89623c924f4da377f662bdf0  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i8.c
! 418e378ee5b5ef47f20668deb5f424d9  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i16.c
! 6f22748300f6dda53c28e1a846bd9d46  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i32.c
! 2e0e82fd21512aa56e3129c8be3495b0  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i8.c
! 1af065f6620e0a8fc377ec2205e5eada  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i16-to-i8.c
! aa85d596297a6b8c53664dde00547821  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i16.c
! 4bb3eefc4db765f1fcf2244b302de3ef  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i8.c
! a9a05cbd8491f8376b0f909163ae7617  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i16.c
! 92fe0ec563f8d55a01c9ac3151f40ec7  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i32.c
! 3520c43b1816a211914d5df1c1a72b45  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i8.c
! ead440a98e51c664362d44beb3215986  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i16-to-i8.c
! 8d3ba94b0056eb1c4c922e97cc0043f8  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i16.c
! 2fa4e841813983d441c4d2070c3fca20  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i8.c
! 2332b82132ef45fecf1939935941c291  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i16.c
! d25c57f5b7c3f5889599ce0995d4709b  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i32.c
! 8be258ef5ea269017aaf7ae2042ec9fe  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i8.c
! 756a47fc916386e9c4ac77e55c3cd88b  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i16-to-i8.c
! 6cdd83538b42eb4209a6033401cb68ff  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i16.c
! b18d79da422d51e85d45d8f2ff29913d  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i8.c
! 3f9c8cced0e63b07f6e28bf789d33368  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i16.c
! 44e27b26b393e7fd80a5661648c3ae34  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i32.c
! 501ab2f06e8cf0665b8e5e66023a3e8b  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i8.c
! 58bfb491aa1fa0434681dbb0802b11d1  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i16-to-i8.c
! a5cf509018ad14ee6b63d3870c58f6d3  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i16.c
! 015720e41193edb93d2ace754fc5a542  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i8.c
! 7974c3cfeb43a4c327fa580d26708f8b  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i16.c
! 684c0249fd2d7752fd90fc51ec3c6dd9  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i32.c
! c3d7f2ebdbd8fc464cbd248cef6fed21  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i8.c
! 786df668b0d3d86a5864ef3e7a1b476d  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i16-to-i8.c
! e7d93bdd48ed0a7e711a13f99f32a71b  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i16.c
! 03eaaf0899ee1399345970fe784dc497  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i8.c
! fffb6f5a8931d1bb44bdfc445811c660  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i16.c
! cefd04d350cb789920393cee8cc583f1  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i32.c
! cff353b94f58a25419d43e0ff0562683  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i8.c
  9b3408d796cc81aced32ade98e5a7b0e  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-1-i16-to-i8.c
  52718ac49f76f29ba9a537bc9c5ff3f0  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-1-i32-to-i16.c
  e4b93bad5603f57a110af30271df8c36  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-1-i32-to-i8.c
--- 99058,99111 ----
  5de395d3d2261a36f2c67a42c328637c  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-4-i32.c
  d30aada616d652468a6453cd505a87f9  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-4-i64.c
  7f2e175b5a241a0127316a36d567eca6  gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-run-4-i8.c
! 6b7cbe616d69e8002ebd0f4b0067b5df  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i16-to-i8.c
! 44e2a8b7d1e73bc8d062f77e142f9f68  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i16.c
! 94acb05397d00399508dddfa3034ec06  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i8.c
! 12dcc04571ac997e7b037cf716d903c8  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i16.c
! d1f254339cd5e0762630843b6edac077  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i32.c
! 8e8b6c510d207375e0d0276e96ba0f3f  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i8.c
! 228ac55ab6d7111c06363e13d19fe50f  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i16-to-i8.c
! a01e23057ea28a6fb13d1fada7ddbca8  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i16.c
! ef10965b3cfde44b9bf974869b21ef56  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i8.c
! 158d341cabeafef8504550a7d6cd07bf  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i16.c
! b79fb96183b6f96efcf8b0280830319a  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i32.c
! 9f157b00dfb5b2a7a3c64d2a4064685f  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i8.c
! a3d6d0b083a20b93a23a85674ff4666a  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i16-to-i8.c
! 6e77fbd6ee3d4dad58f5eb27d9f70bc4  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i16.c
! 48cebdc85697c74a07c3042fa8f19921  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i8.c
! 3282b63afda093c9856ede38ce898d96  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i16.c
! 70659a7b53c57debdd4fbb9b0b3d216a  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i32.c
! 4cb91ffbcf000a8c78e09bf92f918475  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i8.c
! b58092921f9f5ed1bc01c6858fb69798  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i16-to-i8.c
! 10222501b9ac8c27d651849be35a9eb1  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i16.c
! 03871064edcf36fe041865548adf7244  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i8.c
! ee98663c680265bad007a5be4128651e  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i16.c
! 149f749a2dc713c3bd9ed776a0fe52b9  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i32.c
! 8a7d9528543c25f8a8c0a99b4f2ad185  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i8.c
! 7ca9dd32914258a328470ec729f2a620  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i16-to-i8.c
! eaf2ba4daf21699f2f0d523c2fc35463  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i16.c
! ac4123938642d2ebe2b239762c4371a3  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i8.c
! d1aa194f89d6a286d63633ac74a40077  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i16.c
! e78e525e5ea93b66fc310418944902ea  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i32.c
! a7be7544ebd8761d44a7df68a0ebd13b  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i8.c
! 8a4debe179448c3aa08e96587ad5a201  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i16-to-i8.c
! 5040e78211271a20cb3a3704f3c39cbf  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i16.c
! 797076dfc174bde62744163fe8f0692d  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i8.c
! fd1b5bebb669c82f6459c03f79688020  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i16.c
! 41469c0d35c3ebb239d4291b1e7ab5f8  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i32.c
! 70295824389350a088342f8c50654100  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i8.c
! dd3f9961ee4e5143fc99e10a0e44025b  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i16-to-i8.c
! d94702a5014cab132bff4cace1881e26  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i16.c
! 0caf676e214199c448cc25061dfc63f5  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i8.c
! 45142e3d4efb6ad682ebc9617810cc87  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i16.c
! 78600fe058f8188fa79d48172f5e468b  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i32.c
! 08232d512b61be410e6abe3ec8f74975  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i8.c
! 33aa24fe42c6d12f23d8a7de2c8ef93b  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i16-to-i8.c
! 95ec5f375ca379b1fbcfd6b1368de308  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i16.c
! 4862ff82769dcc468e9d736df058ef8c  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i8.c
! 48445fd533561af41aef8cd7593af7ff  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i16.c
! 93028e30ae441fb626eae7675034290d  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i32.c
! 7dcf208bb8615b2de04e71c88a7135c4  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i8.c
  9b3408d796cc81aced32ade98e5a7b0e  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-1-i16-to-i8.c
  52718ac49f76f29ba9a537bc9c5ff3f0  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-1-i32-to-i16.c
  e4b93bad5603f57a110af30271df8c36  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-1-i32-to-i8.c
*************** ed7354d052f4c1044b40d9060a4b31e1  gcc/te
*** 99040,99075 ****
  37df9631b97ce86ff4e8146052561106  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-8-i64-to-i16.c
  5db1216b5077a7673313efe3de23bc18  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-8-i64-to-i32.c
  7a43db355aa45d40fe8d515fe1f83cb1  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-8-i64-to-i8.c
! 4c4b343dcbd3fac78e638d79bd57032e  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u16.c
! 8fd1d3ff4d2bb967dc072a01f190fd7d  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u32.c
! ad17fbf1992950f8c5a18b0d82cf789e  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u64.c
! 6afce0509989276f19bd817137383806  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u8.c
! ca993773ed4fe3d793738e3a71502a43  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u16.c
! 27f11230909511ff29c0772fdc06c963  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u32.c
! 0fbdea8224e377cead12c1334bd3d39b  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u64.c
! dd9fc4bdf32fa85af097cf4eb129d976  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u8.c
! 3ea7faed343aa2ff22c79ce8641018ee  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u16.c
! 5eb6204c6eb41eb8d9fb9aae31f5ac31  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u32.c
! 12724b9d5a9ef8816b19b22e9f41ac1b  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u64.c
! 9d2da8e4e2f79c54cfa8fcdf719c9ffe  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u8.c
! 7486ee4ebe4e75f17c1823998298020f  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u16.c
! 97c430e8a0db713fdcdbf502e8525e8a  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u32.c
! f3785c4556c6a52f2e812efb68359ee3  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u64.c
! 1d800945bc70fa4a2fbb88dfebc309ad  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u8.c
! a5617342f886adfe376f297d3e81b943  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u16.c
! 154ee194ac71214cd7516587abe28f11  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u32.c
! 1986024725d195f56e78fd477c717f49  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u64.c
! 10dcbb771567035ba890a85d86178601  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u8.c
! f8b3e25b0233aa37e4d2d475097ce9ab  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u16.c
! cfa4478eb688e4fed007145740b155e1  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u32.c
! 818c9bcba77a5860dae1511f5c90a8d9  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u64.c
! 4debf74203d0c23ae41d16a6f411bc0d  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u8.c
! da869b32a9e9b00935b051c82ecaa1f1  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c
! 83d74206ad74c7ca571509bc08c91880  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c
! 617dfc75f4e0c320296434898ea5775f  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c
! 1cc6a081781ec74b7685d2e23697e491  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c
! eb03517d7b855c357a4d9edede9c4f80  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c
! 377eae07343244bae32bfa0c5eca7791  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c
  31d76b84da64d10ea5b22fdd4f5be8f2  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u16.c
  9a622f228c3faa95e783147f1370ebf9  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u32.c
  f6c8a38f627a880030c5796f4da2686e  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u64.c
--- 99154,99189 ----
  37df9631b97ce86ff4e8146052561106  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-8-i64-to-i16.c
  5db1216b5077a7673313efe3de23bc18  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-8-i64-to-i32.c
  7a43db355aa45d40fe8d515fe1f83cb1  gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-run-8-i64-to-i8.c
! 2f5174b3384c55554a8843931de1c577  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u16.c
! 0b859b532f995b1292c809e77a82a45f  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u32.c
! a0feedb9361209aacd2d16c5ac8d9f21  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u64.c
! d61efd9be35b655ade76604daa619b6c  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u8.c
! 1bbc67ba82023270e4b3656432eb18f0  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u16.c
! 0ff7bd3be458869f171af2104f0b9ead  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u32.c
! 5c93291a726079a43c09cb25a3f59be9  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u64.c
! c3a88deb178d077c9fc9838786dcefe8  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u8.c
! 2ac6ab1184575c34daec2c9b993afc5c  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u16.c
! 927fad6774572255ce46701115fdfd95  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u32.c
! 218ed5c9ee999e9234cbc07ddf7701ee  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u64.c
! d05c84a83b6d89dd15384dd0874ce003  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u8.c
! b99564528354d049135ace4cfddd405d  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u16.c
! 0b20f40dd20b8aab2dc08b1d2ccba9ab  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u32.c
! 8b2d3ef31f6a93a2c147f0ec38701baa  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u64.c
! 674c138efc0a303117bc82da87ef8df0  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u8.c
! 5691b7b6ce3500368bec193e3dab820c  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u16.c
! 61e2666b4670ed37e98685d0473d544f  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u32.c
! 7d8f0a6d9dd80818ac6b126305b6ed06  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u64.c
! 7d07f6f3fa0e8554f09de6b136b161ef  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u8.c
! 8ab9598065c877f649a71ccb32396d12  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u16.c
! f2eb2991897f99b4a070a321c522bd13  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u32.c
! f8b193c0679d5a3c67abd2571b7d930a  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u64.c
! 179d7cd1db84158fd58658a5da8dfd42  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u8.c
! 196e437e4858fa8f7d27620d5e963366  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c
! 00b8cfaf668487f7a8c8761a1e7fd5a0  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c
! 397d0e246b92c33836c4dc0e9331b56a  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c
! 411db43e27aeb5b779751c7523bbe018  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c
! 2999f54af1e8026e2f1a7e53a0f94cc3  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c
! 71bf5f9ac92822434bc486d6c6913a07  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c
  31d76b84da64d10ea5b22fdd4f5be8f2  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u16.c
  9a622f228c3faa95e783147f1370ebf9  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u32.c
  f6c8a38f627a880030c5796f4da2686e  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u64.c
*************** d07a104e5333ce25cfe9ac473b65d4af  gcc/te
*** 99100,99121 ****
  047d211f5ca3225cdb91697c0cee161a  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u16.c
  137bf5a969a8ee4a5b5233bd668f9530  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u32.c
  59eef9b24b516bcebc311cfb904f64f7  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u64.c
! 918a295b76229a10e40e993b0649c7d2  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u16.c
! 4108927016f00fca561a8d1ac9d070a4  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u32.c
! b086134b1952fa0e763cee271400e09d  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u64.c
! e2368a96e346d115c5ba31efc48c9442  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u8.c
! b56d5b7f0e60032d381caf61bfe42673  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u16.c
! 01985e25e1001f6eae73d5ba36b54aff  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u32.c
! 2275ec72cc795093a586560816db83da  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u64.c
! 5d4b0453eed53e2c439da480cbd5010c  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u8.c
! c4b0c94b42c28327460a3c6060739c21  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u16.c
! fa259f9ff01ddfa6366f9c8a5bacc170  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u32.c
! 2ab9645b2bb3e4fac55efedb4d5c1f6e  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u64.c
! bcf3504910fd7fc54b4ba832fdbc29d6  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u8.c
! 09506e4057fc1d5a0c31026f47e138c7  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u16.c
! b1c7839e173939635b77e8779fd0fea3  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u32.c
! b591fed4e4aa7aa2086d2807999c72d2  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u64.c
! 715e3e8fed56471ff9b4d7b3d2ff80ac  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u8.c
  14a296769249327ac4ffc1d072806ad3  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u16.c
  96bbfa67fb8303644323100ade468639  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u32.c
  61cead759b131bdffbb8c6d881b12cad  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u64.c
--- 99214,99235 ----
  047d211f5ca3225cdb91697c0cee161a  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u16.c
  137bf5a969a8ee4a5b5233bd668f9530  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u32.c
  59eef9b24b516bcebc311cfb904f64f7  gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u64.c
! 1bd9dacdfc4086d15839a2c59a13219a  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u16.c
! aac3af7c06e383040cad10df2cd3aa66  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u32.c
! 2e0635410b88b5548708ed02505d2ef6  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u64.c
! 187ba004d559669cb75c87725113c5fd  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u8.c
! e691bbd3aa47dda8cb1a3b230c20842f  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u16.c
! 5f2f4a9b1ec5264aa52b7802a8c1f81e  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u32.c
! 5dba7badb9c59b4af497764b483ba5f9  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u64.c
! 0e5db2bb45e360a83f40e76ca452558e  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u8.c
! 495d5e49fa7ce734c9a42639c6e73681  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u16.c
! eb4945ea9d66f6197ba3ffb8e9357c06  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u32.c
! b4671a8f1cbf6d434399efc76daccc51  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u64.c
! a6546547a1cd363d1b88279d075e4f05  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u8.c
! ebc554499936854c349a4ce75368d0a7  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u16.c
! 4163848428ee114c89912e5996d803c4  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u32.c
! e8a7272fefa9d1bd994b6ae9567b91bc  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u64.c
! 93b1605fb175df8a6bbea3972bcfed88  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u8.c
  14a296769249327ac4ffc1d072806ad3  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u16.c
  96bbfa67fb8303644323100ade468639  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u32.c
  61cead759b131bdffbb8c6d881b12cad  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u64.c
*************** e1c2f1de82d739e459728af66d5dd616  gcc/te
*** 99192,99253 ****
  26ab9d2e893310bd0526c2776bf2b860  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-7.c
  92a1d75948ed0fe0101d08b6fea95f02  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-8.c
  ba1ba99efa0d2f13ca8024109af75348  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-9.c
! 4dd690d6a671eabda82927853ef5f273  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u16-from-u128.c
! 74b000cb8e001b6f2526214a0aa5129b  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u32-from-u128.c
! 3b067eea656db2696af6c20790a6b386  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u64-from-u128.c
! 14f81423790932c55debda4246d11e3d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u128.c
  bf3cc27ddc2ea3d61c508c988cc37520  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u16-from-u128.c
  cb3764339bb4dd182762014603d2b96d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u32-from-u128.c
  9e81a43db38c46a557e405f8b9c1d1aa  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u64-from-u128.c
  6dc9370e4dcf085a25f0a560f2ac2974  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u8-from-u128.c
! 5a876239a6e33fe975a20d071f250ffc  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u16.c
! 1bfbc36c5a1ba554618b612c09780687  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u32.c
! d39a6c6069a0bfdd9a1e35bab93394a6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u64.c
! a71cebae455b2babd36eff394d66a582  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u8.c
! 8c6bb1dee7f327f2c4d4cb4071c27bbc  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u16.c
! f6980c8d90f9e173ac874c7b4a0481dc  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u32.c
! 55f4d6f87d5562287b34092f56a5a2f4  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u64.c
! adb836eca0a3b88272ed8d27a69929ce  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u8.c
! ab9726fac3f7c7660f2649cf399acb13  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u16.c
! 7eb2ae752d844f2f582284d62d51eb0b  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u32.c
! 2f9dceec5ee848da93c720de502dd4a3  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u64.c
! 6cc73bf0309581dc76bb7bfd67bd94f0  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u8.c
! e58f1924c96c2b10ed5461c08e25338a  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u16.c
! e14b80dc147172abf2075979ee142b00  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u32.c
! fdaf379fe08e63fb6b359149d8d3b573  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u64.c
! 6f1008f6d0a362ab54fbd567bb8c01d4  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u8.c
! d9063fbd5d641699d9633b5fded8ef69  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u16.c
! 31f7f7dbea7fef73943b4e3542ed2c82  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u32.c
! 9751ed35ac535f8c0f33bb46e339fe03  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u64.c
! 9e4038e45a962b910e317eb9894150b0  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u8.c
! aaa16c75d2ccf3bc266794194572f619  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u16.c
! 221b420207691d019dc0daa492c309b1  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u32.c
! 9b0848418bb033a78c39f46bfdd78679  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u64.c
! 37aac924218d6840175f92f06ec5fd31  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u8.c
! d91c0792c5237dc9c664c5c39daf785f  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u16.c
! 2250772571a6ea7857cd962fc3c3dfb6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u32.c
! cd6a272630188a3e13dc879d1c1bf177  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u64.c
! 21e01b894c3cb3311c29aa53ab8eddd6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u8.c
! 0d5876fcde6080ce1760c321ec1e8201  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u16.c
! 382ab47a878f6e49f30fad7c0f03b042  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u32.c
! 1e13832f3517c9ad9901b82d049be16e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u64.c
! fb616219e537169da53ddaaac2301e48  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u8.c
! 14838a7c9c3a85dbdb4571dced04ccca  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u16.c
! 99d008d222797f1acd36fb3d1efe1d55  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u32.c
! 4cd12a23e10fd312caff3930dbf6bcdd  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u64.c
! 1030bdc2d31aab0ba792d50314503f48  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u8.c
! b90cee302702f372b456132ca72365ec  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u16.c
! b83e364b9e684fc822a4a4607306fc4c  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u32.c
! 753ee62ec48e0a8bc806b6bc00d198c2  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u64.c
! 3e2c761495aaa83711de5f644de8f942  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u8.c
! 7a4701179deaa087e5d775708139fa6c  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u16.c
! a3f4b55a61a8b97620c29accc5b9cbff  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u32.c
! 968d0e48e113262a074de612479558df  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u64.c
! ccdb69a0f124872e8dafe474dee2c7ef  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u8.c
! bcbee83ada4ed27c4b28dc3a0be9d297  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u16.c
! fbc57c9cbea22c4f7a0b469542193d8d  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u32.c
! 17739d32e68eddc81c24c0ff5ba3da90  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u64.c
! f820aa7fd00138c6e18612b4b9e64f08  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u8.c
  530c92f46979f3d6c2646f6edc6e3673  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-1-u16.c
  ad3d69a4aeafd738ee3d27c23cfa66c6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-1-u32.c
  706a7f023373f9eb8ffa1791ac4892cc  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-1-u64.c
--- 99306,99373 ----
  26ab9d2e893310bd0526c2776bf2b860  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-7.c
  92a1d75948ed0fe0101d08b6fea95f02  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-8.c
  ba1ba99efa0d2f13ca8024109af75348  gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-9.c
! 56cb4f9b53c87580767ba1d82e03cc0d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u16-from-u128.c
! f2859d2015a9ff09b82d77fb7eb788dc  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u16-from-u64.c
! 58655b9331e61fadd96bcc0c4c763f03  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u32-from-u128.c
! c441c75179a57721800e9edb28ad383a  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u32-from-u64.c
! 210deb5f55d5109d72ae02fb9c8a4d1d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u64-from-u128.c
! 0ab5a9ba4e2a4a91ebda3290517e4de7  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u128.c
! 8f5b49f79c449509292db41d9e65eb55  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u64.c
  bf3cc27ddc2ea3d61c508c988cc37520  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u16-from-u128.c
+ 98fdbce8d68b216052b3e3dfe09c9793  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u16-from-u64.c
  cb3764339bb4dd182762014603d2b96d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u32-from-u128.c
+ babc7afe44f089fdb7866671af0ae2d4  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u32-from-u64.c
  9e81a43db38c46a557e405f8b9c1d1aa  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u64-from-u128.c
  6dc9370e4dcf085a25f0a560f2ac2974  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u8-from-u128.c
! 009245799b01e2a6946a6d4f37a482b6  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u8-from-u64.c
! fdd9d0d3a36236e0472d000f8833d982  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u16.c
! e3e2bd9a544f75219a218a5520d41e4e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u32.c
! 7239f33d03967abfe59724a5530c6c52  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u64.c
! bc87203dc4715841e91a4f984f03734b  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u8.c
! 50dfeaf960ef9370b312708c84ff3b00  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u16.c
! a00815a408e8ad447a89cfffa63ef8aa  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u32.c
! d98c8561b96a09536c7aabf3fe5b89e7  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u64.c
! e51e6155085200931c7217e7b98b4d4e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u8.c
! 38c781031909268a40154f6fab4f1e9e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u16.c
! 7c7456c4e71f6158bcc28dd1b3d33ab1  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u32.c
! dd1d3182a0a8005fa92f3cba1e06f134  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u64.c
! eb5f540aa65588af6e3f6140191b4d2f  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u8.c
! d8293591f25818b453399e042f91f0de  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u16.c
! d812b33970975e0304f6c1262e9fd0db  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u32.c
! 0e02ae17273bec258baa375b4a14d850  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u64.c
! de85dfe94967439a74fb0eebdc03235e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u8.c
! bcb9786bca6ec85f10f1b3c8982492fb  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u16.c
! 5d8c673e8216130fc39b889ad2e4d2da  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u32.c
! f0ac03476a2dc0bb4a6cc08c24afc934  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u64.c
! 86c01a88759b3b20a0040bdefe26da9e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u8.c
! 47141f36397b2beb3b8c039bdaaaf746  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u16.c
! 54108fa9d8d920b7d936e1e9dfdaf119  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u32.c
! 6e35544812b668da8ff0d0c2c7b97e18  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u64.c
! 4926dd615796201acc6b33db30497a97  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u8.c
! ab22934f864b62e9669053bc8865dd7f  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u16.c
! 41539ba1121425fdfd1a42080d4eadf1  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u32.c
! ee5629ed1963de814272164ee3bd2f4d  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u64.c
! dd048d6c81259c96ff0423bb024dc14e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u8.c
! f86bb3025a3c2ab107b24ca459e9be84  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u16.c
! 329e9d7c1a8b7ea109ac560fe66fb030  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u32.c
! 7d910825c809ffec34146a160672dda7  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u64.c
! 22198e9eb2020f2ad91b3dc96be21492  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u8.c
! fff6481478d0284c90ce83203898c7b7  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u16.c
! 6585b94ee8e1176b32d60879d5289c01  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u32.c
! 774a10aaa8e319b4f2a32252fa2a74d1  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u64.c
! 9ea1e53d3ff7b5ff9fccb8b1b8ed524a  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u8.c
! 6cc92596d47fa76577c4798ec9928868  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u16.c
! aab2931690ecc89903055e609459582a  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u32.c
! df3e5320051529e41304d409566bab86  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u64.c
! 6b668ef404663c7be859474ca3971521  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u8.c
! 901409b57d0ee07898d148a2e38e140b  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u16.c
! 1d135ff07fd2bfbc20c1d175cf024a2e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u32.c
! a8f17d4c137a50f6cd8ae6350cacda09  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u64.c
! 5af4d9916b6798cb420dd9a1e3a117a5  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u8.c
! 64b5149164fd8d49db80dd9f49b8bf80  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u16.c
! 15f49c1ba28239f3c73a2f46133a1c7a  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u32.c
! 74d28a417583cb729d13906bc72c62e1  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u64.c
! 34ed215507cc2884804eb3d6cb43633f  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u8.c
  530c92f46979f3d6c2646f6edc6e3673  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-1-u16.c
  ad3d69a4aeafd738ee3d27c23cfa66c6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-1-u32.c
  706a7f023373f9eb8ffa1791ac4892cc  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-1-u64.c
*************** ab692a7c4b6e7f90777609416009d4a4  gcc/te
*** 99296,99353 ****
  dc8b9bb17c1d17f44b141af58786c234  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-9-u32.c
  c2605f40d4d6c9b2c0257b43552ec08d  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-9-u64.c
  ce15d28df2a0d69bed829996ff1060df  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-9-u8.c
! 9cf84eefbb1efdfce108216b916d9545  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-1.c
! c7ef8f5cbf1e691de4f16cec14146683  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-2.c
! 86af3bfc47300a8c9f7a3f30e41ea09e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-3.c
! d405362e55111e4974832337a8da7418  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-4.c
! 83a9a4f2cf4914c84b72f219b0522bcf  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16.c
! d98b57784e4bdb0d944216de8b04d875  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-1.c
! 12e27596a78f72efeab0eac37818e33d  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-2.c
! f626f78e438c5f8e0b0ab9928aa6ca0c  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-3.c
! 586b5daffef32763f28f06d5dc042420  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-4.c
! 08c890f10436bc20ad532a3cc3a45e2f  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32.c
! a7ede8c744febccee7d9d5c448dca3bf  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-1.c
! 6c0b424bf851b302bada8b3befbb7e1e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-2.c
! 1de257779538d172b90730f276595fcd  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64.c
! 599288a1ffa62896df0000ca0bdd84ce  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-1.c
! c853a5a13be91e23efc4b591d07dedf4  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-2.c
! dd7c784bb3e8d12bcc1d5642c8dcdb2d  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-3.c
! 84d4f475024e5cd16df349eaab935e11  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-4.c
! a9defa5c4f39308f92ec67160bf12c12  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8.c
! 8c233be883ec88482bea8184c1540cb4  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-1.c
! 7b8532916f51e33c54277db41012fe94  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-2.c
! 6dbf05e39c26b8aed8a442568af8f780  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-3.c
! 47900845bbb162c96f948b7544d2d7cc  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16.c
! d450f094bfd98b4548f293ad8a9c5dd0  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-1.c
! 7ff0b5fa91d4cbe8ac19d7924205bfe1  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-2.c
! fbd2a8d9a0c70582bc3ea90d1af3a583  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-3.c
! 6e462ef13266e2aa5e78ace8da06993b  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32.c
! 94afa5ab4c73fd4a3ee91050ab8afb83  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64-1.c
! 18d0c82da0b6149f43e55ae0dc8a7cf6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64.c
! 38afd1955e16f7e0a5c4a850d9642e75  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-1.c
! 81b432df5812a1036d34d0c659bf2823  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-2.c
! 2a29c7f6de08b5fea9779b2d307e6a16  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-3.c
! ad552327e689b240905b50f61c7d0fd9  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8.c
! a8ac6d8600d43c48eb6c1dc9c4a09a5b  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-1.c
! 5e7e66c2a8c75348ec08d644e6f8183b  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-2.c
! 4f6d8b2e484c2acae63db1d41e310aba  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16.c
! 8cf2b15ceecc91c8dfa2db82c055e9a3  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-1.c
! 35f054783db02acab5d87b92894f2d0b  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-2.c
! a6e8fc85892f40177fb8946ae55f3afe  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32.c
! 75de6ee354b491698ee49358b1542eac  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u64.c
! 6477c099690b20e845fb41bfca10d8d4  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-1.c
! 5ebfe95d80718f91725e474d06cb9d10  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-2.c
! a84858c04cda7fea1787a1deef93843c  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8.c
! 239991484479e3f2e7e8f17cc54c0f2b  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-1.c
! 5af3498db5ddc283cf6e4a2d5bb998d6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-2.c
! f00630ba5a1270f46993555a3c4778c5  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16.c
! d450f094bfd98b4548f293ad8a9c5dd0  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-1.c
! 7ff0b5fa91d4cbe8ac19d7924205bfe1  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-2.c
! 874b0e76a42a9bc32d68acec066fe29a  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32.c
! 18d0c82da0b6149f43e55ae0dc8a7cf6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u64.c
! 9d6db6db49fae7ebdac9b1fe8bc7aa4c  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-1.c
! f8495be54d5479ddb19df4d485883ca2  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-2.c
! ffac52f3a1221f2f7513e80f1088cf3c  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8.c
  fc8da7422e62b0611413fbb070b094ec  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-1-u16.c
  f50a5ec55f5eb9c52bb6e0a9c9881cfc  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-1-u32.c
  cb056b92cd7764f1d1a02788e8174ba7  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-1-u64.c
--- 99416,99473 ----
  dc8b9bb17c1d17f44b141af58786c234  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-9-u32.c
  c2605f40d4d6c9b2c0257b43552ec08d  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-9-u64.c
  ce15d28df2a0d69bed829996ff1060df  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-run-9-u8.c
! 593efb64cbe327bb73a3a1d5e0c9fec5  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-1.c
! 17d09e0747179808c78ac2b4e3954318  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-2.c
! f3bcc20a5a81e541acfc06d5f940790e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-3.c
! ac4e7a94df7428df95f58b279ea7bc1d  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-4.c
! e893b6b1beb8eb567c5ca7e945f9573e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16.c
! 49a39ae6324d084326aa4fc9e2df3109  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-1.c
! a5b85c46cf4273102a55760d1c9f4a2a  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-2.c
! 41e46e463062a2137eb13ee783c5ce72  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-3.c
! 3415272df9eebc47fd9c08a7fc081424  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-4.c
! 035f9327c0fcbda8e3daf03ae199d509  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32.c
! 6b91c2ec7f410ac4e75f3e6fa07f9bc3  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-1.c
! b765b6b25c92b8aa08b0c1d684472b33  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-2.c
! f66c3b1e35db67a008327a714995870c  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64.c
! 7d2748ad7bae01d85a79ea6f69dd17c6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-1.c
! 97588a74114843fb82c2badd8bff9aac  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-2.c
! 3c21d8951776da652edc2a58715f0929  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-3.c
! 96df2ff2a308b0f51cb83fa5f01d1643  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-4.c
! fe001c98d55954c67a4d829ec65f9405  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8.c
! 1e7d1570740330237d54acbe35d900a3  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-1.c
! 7a494c75be695787780f4f0a91882768  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-2.c
! fbbc29eba93f4104fd6a512a9e8773dc  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-3.c
! abccce240654b75e06ff3a4782670a5a  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16.c
! 35a8b9389cf891632c7bd0ee55ad8e1d  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-1.c
! 66d9b1456c2c2b150f33fe62292b80cf  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-2.c
! 7b9d3d57d59bf61cd0ef920ad4146fce  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-3.c
! b8826485e8d61606a304961ba9844e1f  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32.c
! 9a78cc13bae5d18e4bbf72033381c858  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64-1.c
! 3dd57e69bcb0690ac5445f1881fb8fde  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64.c
! e09438b68fdd6d086435889bddd65677  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-1.c
! 10815e56ef49af9b33bf83e37be52f71  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-2.c
! 988a9e7f952ca50efdf581bd06e7a1af  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-3.c
! 13be41aa821257bc9635796ac59fa62a  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8.c
! dfaaec03958667a711b63944b8139f99  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-1.c
! c7066a3c3ce6bfd6ffc11068f5558a47  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-2.c
! 5684efa70325dc3d05bc27c160e9d63c  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16.c
! f4c02384b2c627cbfd163b1878d9a1e4  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-1.c
! 7d2fc5024ce579ccbf934e347c9498ef  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-2.c
! a3faf7d9afcebd480cebee8aa4f8a81e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32.c
! 23c0ed21bf91afbd7ecbdd158f32f9f3  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u64.c
! 84b5c2d03d8046b83c3b312e390070d5  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-1.c
! d84dce46018a400ae8a98b2a9225ce48  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-2.c
! 5be3ab70b45a2ad1a87050ff44828ca1  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8.c
! 07fc60b08f362176738c3bb10a5e0e17  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-1.c
! 54626bbcc18aada5a58162287204014d  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-2.c
! 17aed0816dac2915253b973d550d10fe  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16.c
! 35a8b9389cf891632c7bd0ee55ad8e1d  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-1.c
! 66d9b1456c2c2b150f33fe62292b80cf  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-2.c
! def66f4892789c813302183fdd7c81ab  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32.c
! 3dd57e69bcb0690ac5445f1881fb8fde  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u64.c
! d634360d120374cf6c1ec5951bd21a5f  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-1.c
! c6670cb6518a6fafadf439205e9f182b  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-2.c
! e6d3e213f4c77a24fbe87f3235d897b6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8.c
  fc8da7422e62b0611413fbb070b094ec  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-1-u16.c
  f50a5ec55f5eb9c52bb6e0a9c9881cfc  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-1-u32.c
  cb056b92cd7764f1d1a02788e8174ba7  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-1-u64.c
*************** a97c066b0167fd5f467fe6944d8c9372  gcc/te
*** 99364,99393 ****
  e62b3b8d94cca737c4b1753309c1dfb6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-4-u32.c
  9289ecf49734c5ae1625db14e779fc26  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-4-u64.c
  42541ae28750ca5f7daa840bbc06e35e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-4-u8.c
! b35b992f82481a3b3561128ca0ebcd9b  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u16.c
! 561b1473a87df79fbba09dee407f4e38  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u32.c
! 07b99fad6734b1554c38ed8a25b3b70c  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u64.c
! ebc9776a8042724da5a4d469fea55ee3  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u8.c
! 2d21704bd379c8e812b685ae27765389  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u16.c
! 540acb795d069bf4bdc5cd9e66874ed0  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u32.c
! 374fe9b5f8c16023dd6c0caf56ed2e4a  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u64.c
! e19aae72a05788f531e7a285c30897e5  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u8.c
! 6577f98bfb52b9f2d13a52f17386d59c  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u16.c
! aa5fb583edbe544152bec9e189268bf2  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u32.c
! ced1905afa2934f6578722b81e9381b7  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u64.c
! b8b2d671052f9fea43f6e7f92ea1988b  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u8.c
! 3e810a74d7d05891182683f6d3deeac8  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u16.c
! 6bf3091ff2723c066b7bba7eb4ed6710  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u32.c
! 1fffbb8261b56d8ce7499fb400168b2e  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u64.c
! 205adc02076dbf76412390d09a332d3f  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u8.c
! cde7a966cf51bcf9566a58a5426e0dba  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u16.c
! 806ff841ef834c43d21588b588e4e7bc  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u32.c
! 264f0681da1be20a4258e2ac289721f7  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u64.c
! 184d187e02e7aed46f2a65c57a343c0a  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u8.c
! a7312ab13cd902b9852b933d30fd44b9  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u16.c
! 0acedfd64e5abfa5f03116be5ff61026  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u32.c
! 706b922c4c39eaa892a71ac157bf149f  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u64.c
! 8bcef5e68df378b4b1c37b4cb1201856  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u8.c
  83485ff93e4a1b1e11f531b2cfa234bf  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-run-1-u16.c
  f4547c37d688a1c07c45242073862ffe  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-run-1-u32.c
  7ed0c7699f4fa7e63f44200a88b71c92  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-run-1-u64.c
--- 99484,99513 ----
  e62b3b8d94cca737c4b1753309c1dfb6  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-4-u32.c
  9289ecf49734c5ae1625db14e779fc26  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-4-u64.c
  42541ae28750ca5f7daa840bbc06e35e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-run-4-u8.c
! dfa425e8b27b976cd03e8c24cb55cecf  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u16.c
! 7c73ce1b5b9c9781d763c4b4e2073089  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u32.c
! 6d29708dcf58e00bdb8f9d9ad78f2476  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u64.c
! 2be7fb60f71475d6451866279af007e0  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u8.c
! 52a7a6b2ce285a93e3c6e8353df9a148  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u16.c
! a27520bdf9f93ee70026add71a26f405  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u32.c
! 1c5c64252be44b44298fb7b952917d69  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u64.c
! 2b941772e801bfa777fba65d44688a2f  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u8.c
! 963b7404d7b1039e409561a3ede9780f  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u16.c
! 110dc3a3ff75a070f9b514345541d5ee  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u32.c
! 7d52f39e98b4c2942a182afc0c1b584b  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u64.c
! 94419403d2725058972b412de22519cc  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u8.c
! 47a102915fb93018e232f3b55654205d  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u16.c
! c1690264ebfa2210cb131ce66b991190  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u32.c
! 6895d66c40b94aac868762362f564e9f  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u64.c
! 49cdaa5f5fac7d1fd84f769ac88d4030  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u8.c
! 79f22fd4fdba665904d179c146a9287b  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u16.c
! 7b0b665c22148b7418663029d84141ea  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u32.c
! 9c683b3e2a5484080ab8451326154278  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u64.c
! 1dce7190a59cf24b3394c68b681ec67e  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u8.c
! 2b69e53cf84efb373a751b2a23d16599  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u16.c
! d46d9155be8e6c3ce642ee9aec2192fc  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u32.c
! 6a9328b7ea2fbbae43ea822b1a3915a2  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u64.c
! a36436a4962a492c19e04dd904fdbc2f  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u8.c
  83485ff93e4a1b1e11f531b2cfa234bf  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-run-1-u16.c
  f4547c37d688a1c07c45242073862ffe  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-run-1-u32.c
  7ed0c7699f4fa7e63f44200a88b71c92  gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-run-1-u64.c
*************** d94841af420f4745c433040de2753088  gcc/te
*** 99976,99983 ****
  baa6d1c3d77baf7c1324df7bb6f4f40c  gcc/testsuite/gcc.target/s390/insv-3.c
  c3e13b2ac420e231a16f2a177383585a  gcc/testsuite/gcc.target/s390/int128load.c
  a9bc35f3b8e2135b6e2d575d37dd20e7  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-1.c
! 6538cdf51fe66dbf089a48c5be30aa10  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c
! 6282d3e4a2f40edd5372d67d15c1228c  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c
  2fac1f3d555a888fa224b855ee080ef3  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit.h
  5ec66e2212ebc6c860d123f507d0b6bc  gcc/testsuite/gcc.target/s390/jump-label.c
  e24d2c019a37c569a797e81173782052  gcc/testsuite/gcc.target/s390/larl-1.c
--- 100096,100103 ----
  baa6d1c3d77baf7c1324df7bb6f4f40c  gcc/testsuite/gcc.target/s390/insv-3.c
  c3e13b2ac420e231a16f2a177383585a  gcc/testsuite/gcc.target/s390/int128load.c
  a9bc35f3b8e2135b6e2d575d37dd20e7  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-1.c
! 2c7b9c55c8431a78c587fa6dfd32e12d  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c
! ef2c5743cfecad7fa099e99612f0f0e1  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c
  2fac1f3d555a888fa224b855ee080ef3  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit.h
  5ec66e2212ebc6c860d123f507d0b6bc  gcc/testsuite/gcc.target/s390/jump-label.c
  e24d2c019a37c569a797e81173782052  gcc/testsuite/gcc.target/s390/larl-1.c
*************** abd82e72aa14d30ef649fb88b2856d0d  gcc/te
*** 100130,100135 ****
--- 100250,100261 ----
  2e57c7c23cac49a65eb61077317a2f1b  gcc/testsuite/gcc.target/s390/section-anchors2.c
  78c4d933475e58d55d22ab5b46b27884  gcc/testsuite/gcc.target/s390/section-anchors3.c
  cf53aab8a3ab2532dd55b65c25e2cda5  gcc/testsuite/gcc.target/s390/sigfpe-eh.c
+ 8c05a71f4e72a0fc48388feb7fdeea99  gcc/testsuite/gcc.target/s390/signbit-1.c
+ 08a01d9c5d63501120c7652975353ce3  gcc/testsuite/gcc.target/s390/signbit-2.c
+ 34ecf5673a8c72ecf06c4978b2aaa1ee  gcc/testsuite/gcc.target/s390/signbit-3.c
+ fb49cb5faaf20b762d43467146af96b8  gcc/testsuite/gcc.target/s390/signbit-4.c
+ ebdfb1a4340375c0ebbb8a412d625890  gcc/testsuite/gcc.target/s390/signbit-5.c
+ b4c0850a8f8c3541e465f59c2166d615  gcc/testsuite/gcc.target/s390/signbit.h
  f7b099f000b8bc666ec6322dfb1ecd5f  gcc/testsuite/gcc.target/s390/stack-clash-1.c
  bc3d746388a64b8efc8d54c61733e6ad  gcc/testsuite/gcc.target/s390/stack-clash-2.c
  2fa5c1396a5010a1cc712e1a8a2aa834  gcc/testsuite/gcc.target/s390/stack-clash-3.c
*************** e75326d3bdf5a961413690c8fac7722a  gcc/te
*** 100355,100360 ****
--- 100481,100489 ----
  99ccc85e66109866ebc14cca03ccf080  gcc/testsuite/gcc.target/s390/vector/pr118696.c
  c9919c66d15a72dcfc7be8b1d30e4de1  gcc/testsuite/gcc.target/s390/vector/pr92950.c
  f37bb3697d3b5ebfcad463b8e97a87bb  gcc/testsuite/gcc.target/s390/vector/pr96128.c
+ 1f884c46b6be0a2bad36df12dce8d9be  gcc/testsuite/gcc.target/s390/vector/reduc-binops-1.c
+ 7d58a5d9183bccd604135c280547e7c5  gcc/testsuite/gcc.target/s390/vector/reduc-minmax-1.c
+ 4e722110a7d4b083bc3359b9158e47ad  gcc/testsuite/gcc.target/s390/vector/reduc-plus-1.c
  67db2f54d1bbc5e3fe9a6446f23bb055  gcc/testsuite/gcc.target/s390/vector/reverse-elements-1.c
  9bfb70af8b7d07ad0ddb6be38531e041  gcc/testsuite/gcc.target/s390/vector/reverse-elements-2.c
  b9994ce66f834212427d6b89b47fa164  gcc/testsuite/gcc.target/s390/vector/reverse-elements-3.c
*************** fe08bebade581e6652104b69d817cb40  gcc/te
*** 100447,100452 ****
--- 100576,100582 ----
  41d8ac568a2a22942ec82fc94f1d73d6  gcc/testsuite/gcc.target/s390/vector/vgm-si-1.c
  ed45b12947aabab368b0ba8d335b8eaf  gcc/testsuite/gcc.target/s390/vector/vgm-tf-1.c
  3f4ea4ed90455e4cdfef8335820b3935  gcc/testsuite/gcc.target/s390/vector/vgm-ti-1.c
+ f84ab1f896460813bbe43f7cea30cb05  gcc/testsuite/gcc.target/s390/vector/vlgv-zero-extend-1.c
  b285e00f64be083356e248425ad42f69  gcc/testsuite/gcc.target/s390/vector/vperm-rev-z14.c
  6a26b9ab98b26ffa11b6e80dd969b1d9  gcc/testsuite/gcc.target/s390/vector/vperm-rev-z15.c
  0ab7b3f2f66d57d1f710645119abd9c8  gcc/testsuite/gcc.target/s390/vector/vrepi-df-1.c
*************** d3d333698144b6bad92425ebed117768  gcc/te
*** 106647,106652 ****
--- 106777,106783 ----
  654126432f7002148884d08affd35699  gcc/testsuite/gfortran.dg/associate_72.f90
  e0fe6119bfcf724ee51375d3156cacc5  gcc/testsuite/gfortran.dg/associate_73.f90
  151edd623643e466e74fa24488fd3142  gcc/testsuite/gfortran.dg/associate_74.f90
+ 9324e6abeab7018b1551e0a075cd2085  gcc/testsuite/gfortran.dg/associate_75.f90
  3c2206420bb8717914aa447789b5f079  gcc/testsuite/gfortran.dg/associate_8.f03
  0406413659a92c10d44ed1f1576987b9  gcc/testsuite/gfortran.dg/associate_9.f03
  51f82584276ab8f411b8d9d7e84fadc8  gcc/testsuite/gfortran.dg/associated_1.f90
*************** a1a9be8c9080ba2ba338bc6f63b406e3  gcc/te
*** 109967,109972 ****
--- 110098,110104 ----
  f523f11e31c8d7a378a90e54f4cc9a88  gcc/testsuite/gfortran.dg/gomp/pr103643.f90
  8d0eb4ba7d5d6e2c9ffeb53bd0b900ec  gcc/testsuite/gfortran.dg/gomp/pr103695.f90
  b229abc8cb06bd3633deb0bb940ede08  gcc/testsuite/gfortran.dg/gomp/pr104131.f90
+ 3a0477f99d8b3db6f5412df79f7e0e6e  gcc/testsuite/gfortran.dg/gomp/pr104428.f90
  39842b4010b4165bbe821ffc8a903991  gcc/testsuite/gfortran.dg/gomp/pr104757.f90
  b0de5c5053146f58fe1939b9523524e5  gcc/testsuite/gfortran.dg/gomp/pr104826.f90
  02981b5d8f6403bdc6a2dfd0100dcc74  gcc/testsuite/gfortran.dg/gomp/pr107214-2.f90
*************** e6959f502764a61ef25925560ccc35a1  gcc/te
*** 110557,110562 ****
--- 110689,110695 ----
  ea1b1f8cf0ee787e7d0c693d6c3fc9e2  gcc/testsuite/gfortran.dg/import10.f90
  16022a993227b688a8bfceb5feae8495  gcc/testsuite/gfortran.dg/import11.f90
  3a3b6144cda61f31853ff73e0f058d0a  gcc/testsuite/gfortran.dg/import12.f90
+ 27134ec24c0219c1db134d0adb0b2d4b  gcc/testsuite/gfortran.dg/import13.f90
  94cf154a5c4d1c75d4ab7c9ed320a2c9  gcc/testsuite/gfortran.dg/import2.f90
  4c9cdc951a2a6aeea2342059d53b0476  gcc/testsuite/gfortran.dg/import3.f90
  149a0814da75f9fc28e2a049ff78ce07  gcc/testsuite/gfortran.dg/import4.f90
*************** eb194938d2c2fe84d215ede719f501c0  gcc/te
*** 111850,111855 ****
--- 111983,111989 ----
  4db68e1eec67942dd893a17d7e547d6e  gcc/testsuite/gfortran.dg/pointer_check_12.f90
  ccf9944fa34b0e93e5415a91ad21e966  gcc/testsuite/gfortran.dg/pointer_check_13.f90
  1c6366ef774f50102935b627497ffda0  gcc/testsuite/gfortran.dg/pointer_check_14.f90
+ 95c3fc2b08b12abf7b0b8eede20fee74  gcc/testsuite/gfortran.dg/pointer_check_15.f90
  7fd59810205e453c2a75b8a7f1ed13b0  gcc/testsuite/gfortran.dg/pointer_check_2.f90
  9e0a1ed208d6678d1a32750be9c66ce8  gcc/testsuite/gfortran.dg/pointer_check_3.f90
  24e0ade37dff0f1eb6006ee3395e17a6  gcc/testsuite/gfortran.dg/pointer_check_4.f90
*************** d6745dcdcf31b04bf69ee5368bf82671  gcc/te
*** 117436,117441 ****
--- 117570,117577 ----
  f687233fcc6d98dbcb96055885a9ee66  gcc/testsuite/gnat.dg/deref1.ads
  f8a4e9fa10d4ee5c8acc1db41a267fe2  gcc/testsuite/gnat.dg/deref2.ads
  f012ebb01ff886347e17f97249598c1c  gcc/testsuite/gnat.dg/deref3.adb
+ e1912a776fb84928609bc2929269d626  gcc/testsuite/gnat.dg/deref4.adb
+ 42e7486d198a133920287766e84ab357  gcc/testsuite/gnat.dg/deref4_pkg.ads
  65ed60d5522e5e74644cec85412ae2c8  gcc/testsuite/gnat.dg/derived_aggregate.adb
  23705667d8765117a7f5ea75d97eefe5  gcc/testsuite/gnat.dg/derived_type1.adb
  d644b0f10aac249229a606bea7e1a485  gcc/testsuite/gnat.dg/derived_type2.adb
*************** eb1595e729e2eaac81c7ffe330d8f24e  gcc/te
*** 121807,121813 ****
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! e09b44fc8d71228282e1a514aff73001  gcc/testsuite/lib/target-supports.exp
  cfe4a2f0a83382048de060dc6669cbb9  gcc/testsuite/lib/target-utils.exp
  e45ee1a35539730bd823a310ad306ded  gcc/testsuite/lib/timeout-dg.exp
  b755c82fb5ee43ef6c852f23fbdc8704  gcc/testsuite/lib/timeout.exp
--- 121943,121949 ----
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! a0246cbe3a685128e4bc90842286b74e  gcc/testsuite/lib/target-supports.exp
  cfe4a2f0a83382048de060dc6669cbb9  gcc/testsuite/lib/target-utils.exp
  e45ee1a35539730bd823a310ad306ded  gcc/testsuite/lib/timeout-dg.exp
  b755c82fb5ee43ef6c852f23fbdc8704  gcc/testsuite/lib/timeout.exp
*************** b755c82fb5ee43ef6c852f23fbdc8704  gcc/te
*** 121818,121824 ****
  abf5053d8fe36a4d6aaee3b64de1525d  gcc/testsuite/lib/verify-sarif-file.py
  3e3173edae5ac6a523acb397d351492f  gcc/testsuite/lib/wrapper.exp
  a4a9359c5b5661d671b4a762e567d302  gcc/testsuite/libgdiagnostics.dg/libgdiagnostics.exp
- b1906d02580c467cf4242e775596ac53  gcc/testsuite/libgdiagnostics.dg/sarif.py
  199042148695ff2141815d1e523d74e5  gcc/testsuite/libgdiagnostics.dg/test-dump.c
  dc0f26e1bea25003e7ee175954088c29  gcc/testsuite/libgdiagnostics.dg/test-error-c.py
  7f24b7e1eaae110159005f90d22b101b  gcc/testsuite/libgdiagnostics.dg/test-error-with-note-c.py
--- 121954,121959 ----
*************** dd4649e4bf88e02656157d5ee3e16bae  gcc/te
*** 121838,121843 ****
--- 121973,121980 ----
  00c816edbc3a50d853332da7e3423c11  gcc/testsuite/libgdiagnostics.dg/test-logical-location-c.py
  5e005c4b2bb45b1bc008da94aef65a7b  gcc/testsuite/libgdiagnostics.dg/test-logical-location.c
  a3ceaadd005179c882a804f755357620  gcc/testsuite/libgdiagnostics.dg/test-logical-location.cc
+ 0954fc5933c71934713867617f72434f  gcc/testsuite/libgdiagnostics.dg/test-message-buffer-c.py
+ d57fc2a0f3c7008b2d60cefb8625c318  gcc/testsuite/libgdiagnostics.dg/test-message-buffer.c
  f1a0e78f1b655e672939cd8c3f01139b  gcc/testsuite/libgdiagnostics.dg/test-metadata-c.py
  8908b5e3eb88ff5a3ef9785ff3ac6bb8  gcc/testsuite/libgdiagnostics.dg/test-metadata.c
  95d9cf174141475f2b01e734e9a5b240  gcc/testsuite/libgdiagnostics.dg/test-multiple-lines-c.py
*************** d97a2ede9b276271fe7da53d984c46c9  gcc/te
*** 121852,121858 ****
  6caf27887b7cf5483cadb8e400e58add  gcc/testsuite/libgdiagnostics.dg/test-note-with-fix-it-hint.c
  d2aafb04b11f754e8a7b58940fb81a01  gcc/testsuite/libgdiagnostics.dg/test-text-sink-options.c
  374e6d77246944f845a8918b230a46ba  gcc/testsuite/libgdiagnostics.dg/test-warning-c.py
! 41bb88418abb3c2dceb336d993318f0d  gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py
  a02790f7323a8705c3fe757ac7eb628b  gcc/testsuite/libgdiagnostics.dg/test-warning-with-path.c
  ae2bb8c35d78ca989bee19306de93d2d  gcc/testsuite/libgdiagnostics.dg/test-warning.c
  39ea3e6a3c64aa59fce2cc514bdd991f  gcc/testsuite/libgdiagnostics.dg/test-write-sarif-to-file-c.py
--- 121989,121995 ----
  6caf27887b7cf5483cadb8e400e58add  gcc/testsuite/libgdiagnostics.dg/test-note-with-fix-it-hint.c
  d2aafb04b11f754e8a7b58940fb81a01  gcc/testsuite/libgdiagnostics.dg/test-text-sink-options.c
  374e6d77246944f845a8918b230a46ba  gcc/testsuite/libgdiagnostics.dg/test-warning-c.py
! b8c9298c1e5181b37249dc384761a1f4  gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py
  a02790f7323a8705c3fe757ac7eb628b  gcc/testsuite/libgdiagnostics.dg/test-warning-with-path.c
  ae2bb8c35d78ca989bee19306de93d2d  gcc/testsuite/libgdiagnostics.dg/test-warning.c
  39ea3e6a3c64aa59fce2cc514bdd991f  gcc/testsuite/libgdiagnostics.dg/test-write-sarif-to-file-c.py
*************** dcca2356651dbcc61d225f2af14de39c  gcc/te
*** 124185,124197 ****
  cc335159bd4b1435e0f6c4bc572bc184  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.40.2-duplicate-node-id.sarif
  c7e878f53efdf3a2d5b1173b2e628b03  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.41.4-unrecognized-node-id.sarif
  7b5a5f8637280fb420dd43c789b33d9b  gcc/testsuite/sarif-replay.dg/2.1.0-unhandled/3.27.10-none-level.sarif
! e3b2cd7e659905aae30293135919e468  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.11.6-embedded-links.sarif
  984abc6c1fa0578f7f070ea81531b615  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-1.sarif
  a5f27c1dd2784330c1b584360a486c85  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-2.sarif
  5dd4a200df47d1689bc6aca933cb9b44  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-3.sarif
  4234e9442988f3b10195df51ecbb9f02  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.28.6-annotations-1.sarif
  e70f2852bac8d2f4f94124af298eb001  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-json-example.sarif
  f7226a417a6156e62d6cb64ecfbb3853  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-xml-example.sarif
  d857a4331f097987a1bb7433f321c1c0  gcc/testsuite/sarif-replay.dg/2.1.0-valid/error-with-note.sarif
  eb63c8ccd144fcb7c3f54ce6920d725c  gcc/testsuite/sarif-replay.dg/2.1.0-valid/escaped-braces.sarif
  3d28ddde7894713de062c1eb3d93e320  gcc/testsuite/sarif-replay.dg/2.1.0-valid/graphs-check-html.py
--- 124322,124336 ----
  cc335159bd4b1435e0f6c4bc572bc184  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.40.2-duplicate-node-id.sarif
  c7e878f53efdf3a2d5b1173b2e628b03  gcc/testsuite/sarif-replay.dg/2.1.0-invalid/3.41.4-unrecognized-node-id.sarif
  7b5a5f8637280fb420dd43c789b33d9b  gcc/testsuite/sarif-replay.dg/2.1.0-unhandled/3.27.10-none-level.sarif
! b5deb27ab6d9cd4607e2e25fbd9a5594  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.11.6-embedded-links.sarif
  984abc6c1fa0578f7f070ea81531b615  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-1.sarif
  a5f27c1dd2784330c1b584360a486c85  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-2.sarif
  5dd4a200df47d1689bc6aca933cb9b44  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.27.30-fixes-3.sarif
  4234e9442988f3b10195df51ecbb9f02  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.28.6-annotations-1.sarif
  e70f2852bac8d2f4f94124af298eb001  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-json-example.sarif
  f7226a417a6156e62d6cb64ecfbb3853  gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.33.7-xml-example.sarif
+ dddd09e297eb5d576285cc24738e03bc  gcc/testsuite/sarif-replay.dg/2.1.0-valid/embedded-links-check-html.py
+ e2b63c4d2b76163b1f31857690b5e899  gcc/testsuite/sarif-replay.dg/2.1.0-valid/embedded-links-check-sarif-roundtrip.py
  d857a4331f097987a1bb7433f321c1c0  gcc/testsuite/sarif-replay.dg/2.1.0-valid/error-with-note.sarif
  eb63c8ccd144fcb7c3f54ce6920d725c  gcc/testsuite/sarif-replay.dg/2.1.0-valid/escaped-braces.sarif
  3d28ddde7894713de062c1eb3d93e320  gcc/testsuite/sarif-replay.dg/2.1.0-valid/graphs-check-html.py
*************** b4a6da1471f279353aaca4956c18cdea  gcc/tr
*** 124274,124280 ****
  bcff760f6710b9047412aba72a381983  gcc/tree-affine.h
  527c9fa3845b2653cafc14c109129179  gcc/tree-assume.cc
  23590c969997d33ec2e1fa1da2a89526  gcc/tree-call-cdce.cc
! 87bb49a4561b7f2a2c43e8f699f6c4a7  gcc/tree-cfg.cc
  591222e5199894b9b5d23b1822f7e309  gcc/tree-cfg.h
  ca2c309862705e4161a11efb32eb1ebf  gcc/tree-cfgcleanup.cc
  b528a0932f50504df146d112f7d01a5c  gcc/tree-cfgcleanup.h
--- 124413,124419 ----
  bcff760f6710b9047412aba72a381983  gcc/tree-affine.h
  527c9fa3845b2653cafc14c109129179  gcc/tree-assume.cc
  23590c969997d33ec2e1fa1da2a89526  gcc/tree-call-cdce.cc
! 9e4acd63de4a8aef23a4a4d4d8e90b72  gcc/tree-cfg.cc
  591222e5199894b9b5d23b1822f7e309  gcc/tree-cfg.h
  ca2c309862705e4161a11efb32eb1ebf  gcc/tree-cfgcleanup.cc
  b528a0932f50504df146d112f7d01a5c  gcc/tree-cfgcleanup.h
*************** f9731b5179d6c364587220c2aea59a3e  gcc/tr
*** 124296,124304 ****
  f3e814f679f1b8d21b1c54ad5ee16856  gcc/tree-emutls.cc
  e046a9c4874579f81515c4b3d9106b63  gcc/tree-hash-traits.h
  7e063b1edd28723f3f432596c39cfbee  gcc/tree-hasher.h
! 3b55b5e5e173904c824977c38dc00a9c  gcc/tree-if-conv.cc
  002c9568898504ca2025dcacf5151fd6  gcc/tree-if-conv.h
! 3ab9dd2d272cf3f061270c2732653577  gcc/tree-inline.cc
  326f91431bfd3c15d8ddd74699d666e6  gcc/tree-inline.h
  90ca59c0844cd326f35f9cae17ec174b  gcc/tree-into-ssa.cc
  ef1cb0fba517532ecda9f4e0dd5218f7  gcc/tree-into-ssa.h
--- 124435,124443 ----
  f3e814f679f1b8d21b1c54ad5ee16856  gcc/tree-emutls.cc
  e046a9c4874579f81515c4b3d9106b63  gcc/tree-hash-traits.h
  7e063b1edd28723f3f432596c39cfbee  gcc/tree-hasher.h
! f31771f899962118452faf887ba629b3  gcc/tree-if-conv.cc
  002c9568898504ca2025dcacf5151fd6  gcc/tree-if-conv.h
! 25f1988c73b1a2d6262ef7081ca2f2d4  gcc/tree-inline.cc
  326f91431bfd3c15d8ddd74699d666e6  gcc/tree-inline.h
  90ca59c0844cd326f35f9cae17ec174b  gcc/tree-into-ssa.cc
  ef1cb0fba517532ecda9f4e0dd5218f7  gcc/tree-into-ssa.h
*************** ebea01b285bb347999736a8da2d7eb94  gcc/tr
*** 124321,124332 ****
  460fc341cb2d78f53e0a27c81de36a7d  gcc/tree-phinodes.h
  10ba4bea4c7470735678acc6088c06d5  gcc/tree-predcom.cc
  529cb4117fb3ff7fd899c570bd97e944  gcc/tree-pretty-print-markup.h
! 5fdac46b7c48b07cde7b3ee6816d646f  gcc/tree-pretty-print.cc
  fd4dd1219acc650a4f7855faa0097964  gcc/tree-pretty-print.h
  7c11aa147a6d02acce5170cb35aed445  gcc/tree-profile.cc
  985d86fcc4c88e8e0b4532b175b34739  gcc/tree-scalar-evolution.cc
  dddd950fe463803c41bc0c7cddf0fe44  gcc/tree-scalar-evolution.h
! e9f74f0a94b92fcf4fafe691fee3c65b  gcc/tree-sra.cc
  c022e816e38c8f399e6a16163c56d6db  gcc/tree-sra.h
  3e42023ef3fe5187ffffddbbb5740208  gcc/tree-ssa-address.cc
  c724c8becbea9eec0f806e3335942c32  gcc/tree-ssa-address.h
--- 124460,124471 ----
  460fc341cb2d78f53e0a27c81de36a7d  gcc/tree-phinodes.h
  10ba4bea4c7470735678acc6088c06d5  gcc/tree-predcom.cc
  529cb4117fb3ff7fd899c570bd97e944  gcc/tree-pretty-print-markup.h
! 263c40144a5ce12ffaf254b09ed4c5b8  gcc/tree-pretty-print.cc
  fd4dd1219acc650a4f7855faa0097964  gcc/tree-pretty-print.h
  7c11aa147a6d02acce5170cb35aed445  gcc/tree-profile.cc
  985d86fcc4c88e8e0b4532b175b34739  gcc/tree-scalar-evolution.cc
  dddd950fe463803c41bc0c7cddf0fe44  gcc/tree-scalar-evolution.h
! ee4b0158282edc26e35fda70ebe934b6  gcc/tree-sra.cc
  c022e816e38c8f399e6a16163c56d6db  gcc/tree-sra.h
  3e42023ef3fe5187ffffddbbb5740208  gcc/tree-ssa-address.cc
  c724c8becbea9eec0f806e3335942c32  gcc/tree-ssa-address.h
*************** c0b0549adb2c1140cf285901abb5a78c  gcc/tr
*** 124368,124374 ****
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
  487192303141111110ed63175019cf4f  gcc/tree-ssa-phiopt.cc
  482f2356d81c3633ca476cd6628908b8  gcc/tree-ssa-phiprop.cc
! 2dc49a3648eb85067602e95bd942eb2a  gcc/tree-ssa-pre.cc
  207e8eba5552b33b5aae2de6e7c1f35d  gcc/tree-ssa-propagate.cc
  fc4f0e674e345822394ee5645ce22429  gcc/tree-ssa-propagate.h
  9515681f0fd9c70f852eb417ea1ff9df  gcc/tree-ssa-reassoc.cc
--- 124507,124513 ----
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
  487192303141111110ed63175019cf4f  gcc/tree-ssa-phiopt.cc
  482f2356d81c3633ca476cd6628908b8  gcc/tree-ssa-phiprop.cc
! 376705b97b4d04600605aebe5b8150ab  gcc/tree-ssa-pre.cc
  207e8eba5552b33b5aae2de6e7c1f35d  gcc/tree-ssa-propagate.cc
  fc4f0e674e345822394ee5645ce22429  gcc/tree-ssa-propagate.h
  9515681f0fd9c70f852eb417ea1ff9df  gcc/tree-ssa-reassoc.cc
*************** aa25adbcb019dd38a66ce237df54ae1d  gcc/tr
*** 124380,124386 ****
  1565dc0d975d174e5d53e4889ab223e3  gcc/tree-ssa-sink.cc
  f8a95ebe86d335b810e43ab71cae5b43  gcc/tree-ssa-strlen.cc
  817cd7b593b9ca11ac7464ee683d8f98  gcc/tree-ssa-strlen.h
! bd67579773d2e2f4ce02d41953702750  gcc/tree-ssa-structalias.cc
  8236d4d91b8701a8daadc2f8a12d4752  gcc/tree-ssa-tail-merge.cc
  18ba2469cfdfbd297fe2b0120e69a84c  gcc/tree-ssa-ter.cc
  3094df71c80e187685e4e97e428d64f4  gcc/tree-ssa-ter.h
--- 124519,124526 ----
  1565dc0d975d174e5d53e4889ab223e3  gcc/tree-ssa-sink.cc
  f8a95ebe86d335b810e43ab71cae5b43  gcc/tree-ssa-strlen.cc
  817cd7b593b9ca11ac7464ee683d8f98  gcc/tree-ssa-strlen.h
! b76684a1a6be44a3823af76b7f763beb  gcc/tree-ssa-structalias.cc
! c55845e611a19b323a6c2debac84509e  gcc/tree-ssa-structalias.h
  8236d4d91b8701a8daadc2f8a12d4752  gcc/tree-ssa-tail-merge.cc
  18ba2469cfdfbd297fe2b0120e69a84c  gcc/tree-ssa-ter.cc
  3094df71c80e187685e4e97e428d64f4  gcc/tree-ssa-ter.h
*************** ebb8ac3717c1bf5db4371da2f3cf6af7  gcc/tr
*** 124407,124426 ****
  155cba670139398bb39ea8a47610472f  gcc/tree-vect-data-refs.cc
  5d8bb0df796ceea958fd65c5aedb5bce  gcc/tree-vect-generic.cc
  e104b17ea517e15aa0e3e38e4afcabaa  gcc/tree-vect-loop-manip.cc
! adc5205ab2863803536de0f01ca9ae0f  gcc/tree-vect-loop.cc
  da6336ee0c69409d59d2599d74cc5717  gcc/tree-vect-patterns.cc
  c6943415b45e06de6924e0c93b06b502  gcc/tree-vect-slp-patterns.cc
! b1234e30500c274d23615ed4de4d0183  gcc/tree-vect-slp.cc
! 6df849fc482c999d35cb28e29840c076  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  a4620080dfbf6757116ace6cfaae648f  gcc/tree-vectorizer.cc
  2bbf23c99ea05dbd7196badfeda06af4  gcc/tree-vectorizer.h
  1bed475667cbd8dee00c3b7da964ca5b  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
! 322810557578c3e0f90e05f62044b1bb  gcc/tree.cc
  2b3067f4ee14760d08fdfee4eb6b8a00  gcc/tree.def
! 5c837e4f50a9e0bbdf73e4a8bbef6b70  gcc/tree.h
  b642c83968cda285afc700da2fb276d5  gcc/treestruct.def
  84205f5a5b424f30ce8c527b234e3f94  gcc/tristate.cc
  ea37ace5dddab6f4b2b9608516bebc35  gcc/tristate.h
--- 124547,124566 ----
  155cba670139398bb39ea8a47610472f  gcc/tree-vect-data-refs.cc
  5d8bb0df796ceea958fd65c5aedb5bce  gcc/tree-vect-generic.cc
  e104b17ea517e15aa0e3e38e4afcabaa  gcc/tree-vect-loop-manip.cc
! abd8d798b0beb75af08557900623c4d9  gcc/tree-vect-loop.cc
  da6336ee0c69409d59d2599d74cc5717  gcc/tree-vect-patterns.cc
  c6943415b45e06de6924e0c93b06b502  gcc/tree-vect-slp-patterns.cc
! 10c687ce905eb0530a509248f0b16291  gcc/tree-vect-slp.cc
! aab033125d57b678b2bd582569b6f3dc  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  a4620080dfbf6757116ace6cfaae648f  gcc/tree-vectorizer.cc
  2bbf23c99ea05dbd7196badfeda06af4  gcc/tree-vectorizer.h
  1bed475667cbd8dee00c3b7da964ca5b  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
! 56e573528b356925dac2888cf34cf030  gcc/tree.cc
  2b3067f4ee14760d08fdfee4eb6b8a00  gcc/tree.def
! 2dd77a778860625f3fd3b6d077a94b4a  gcc/tree.h
  b642c83968cda285afc700da2fb276d5  gcc/treestruct.def
  84205f5a5b424f30ce8c527b234e3f94  gcc/tristate.cc
  ea37ace5dddab6f4b2b9608516bebc35  gcc/tristate.h
*************** db99ee82ab71b58820d60f9863e62aac  gcc/va
*** 124455,124462 ****
  e96ee31ef62fd5574909f9328fb29af9  gcc/varpool.cc
  5958f38d462c8e23023f7b272b8b969c  gcc/vec-perm-indices.cc
  d9c4840a497d0e1f2063865edafe6e97  gcc/vec-perm-indices.h
! 3673f65e9bdf99c1f84394504fe13e81  gcc/vec.cc
! d72991a60a600bb2f927c55d8c886217  gcc/vec.h
  54a3885ae2d326266cc13ab447394d8f  gcc/vector-builder.h
  40fec2b7bbea0b654d0704244caa4e9c  gcc/vmsdbg.h
  c2784afc7476e44bc70100f7c350e07b  gcc/vmsdbgout.cc
--- 124595,124602 ----
  e96ee31ef62fd5574909f9328fb29af9  gcc/varpool.cc
  5958f38d462c8e23023f7b272b8b969c  gcc/vec-perm-indices.cc
  d9c4840a497d0e1f2063865edafe6e97  gcc/vec-perm-indices.h
! 49e92de0554d55d6fb8db9734d0f76d1  gcc/vec.cc
! ec741313009737bbd1b6a0356d3d0483  gcc/vec.h
  54a3885ae2d326266cc13ab447394d8f  gcc/vector-builder.h
  40fec2b7bbea0b654d0704244caa4e9c  gcc/vmsdbg.h
  c2784afc7476e44bc70100f7c350e07b  gcc/vmsdbgout.cc
*************** a3eb5dee2788fe0a6c42502ba658eddd  libffi
*** 125276,125283 ****
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! 80bfba1db3d3e37bcd027588cfc17f54  libgcc/ChangeLog
! b1229d68a3a67c6e30daf30379e7bb8f  libgcc/Makefile.in
  66cc3d23127b54e932766f13d603ec3d  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
  9e6d8ec4ff0470579444dbe0a1287f05  libgcc/config/aarch64/__aarch64_have_sme.c
--- 125416,125423 ----
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! 1491be5fa793af1a81cae1309256877f  libgcc/ChangeLog
! af65b9adf392a893ec06c38e7b8e9866  libgcc/Makefile.in
  66cc3d23127b54e932766f13d603ec3d  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
  9e6d8ec4ff0470579444dbe0a1287f05  libgcc/config/aarch64/__aarch64_have_sme.c
*************** cc057a7bb2bda2a1ca4a54f52ae6347e  libgcc
*** 125297,125303 ****
  a077f95c64de11e67e5d9d909ec45b8c  libgcc/config/aarch64/heap-trampoline.c
  d0d4af45fffe18f866536603e6b369ec  libgcc/config/aarch64/libgcc-sme.ver
  69be64595f7292ff9d22d9790fb1f98c  libgcc/config/aarch64/libgcc-softfp.ver
! fff6214d8f727f1416ce009f15cc5f35  libgcc/config/aarch64/linux-unwind.h
  d09ef2fe232dae56563f13d2b6da6735  libgcc/config/aarch64/lse-init.c
  b2e6d3e9e2af6d58aa7d4238e49990fa  libgcc/config/aarch64/lse.S
  13e78e11bd6d056fd80598bac695009c  libgcc/config/aarch64/sfp-exceptions.c
--- 125437,125443 ----
  a077f95c64de11e67e5d9d909ec45b8c  libgcc/config/aarch64/heap-trampoline.c
  d0d4af45fffe18f866536603e6b369ec  libgcc/config/aarch64/libgcc-sme.ver
  69be64595f7292ff9d22d9790fb1f98c  libgcc/config/aarch64/libgcc-softfp.ver
! fe34a32aa13f1a6236c7a5ebc6eb2e96  libgcc/config/aarch64/linux-unwind.h
  d09ef2fe232dae56563f13d2b6da6735  libgcc/config/aarch64/lse-init.c
  b2e6d3e9e2af6d58aa7d4238e49990fa  libgcc/config/aarch64/lse.S
  13e78e11bd6d056fd80598bac695009c  libgcc/config/aarch64/sfp-exceptions.c
*************** bdd08773400d12af9ac3b370d255ccca  libgcc
*** 125718,125724 ****
  40eda5c7825bbaa25723845c3f9caabd  libgcc/config/ia64/vms-unwind.h
  82cf742d0711f5ea45c5d4ae1837083b  libgcc/config/iq2000/lib2funcs.c
  102f7dad8ad6b54434a1b8313d1e42c4  libgcc/config/iq2000/t-iq2000
! b35f64b0b74ab94649fd55fb2aca697b  libgcc/config/libbid/ChangeLog
  c32cb18bbfd73dda967b708b16ce8e89  libgcc/config/libbid/_addsub_dd.c
  a0801827ba65b25ba20a91e765121b7f  libgcc/config/libbid/_addsub_sd.c
  1047ed1c06b6914a7df19b0739d305c3  libgcc/config/libbid/_addsub_td.c
--- 125858,125864 ----
  40eda5c7825bbaa25723845c3f9caabd  libgcc/config/ia64/vms-unwind.h
  82cf742d0711f5ea45c5d4ae1837083b  libgcc/config/iq2000/lib2funcs.c
  102f7dad8ad6b54434a1b8313d1e42c4  libgcc/config/iq2000/t-iq2000
! f6fa5f577711e3c91a2080fa9d0972d3  libgcc/config/libbid/ChangeLog
  c32cb18bbfd73dda967b708b16ce8e89  libgcc/config/libbid/_addsub_dd.c
  a0801827ba65b25ba20a91e765121b7f  libgcc/config/libbid/_addsub_sd.c
  1047ed1c06b6914a7df19b0739d305c3  libgcc/config/libbid/_addsub_td.c
*************** e8d114fdcf648fecb254d5fb8251dc3d  libgcc
*** 125866,125872 ****
  0f3c04f1496cdbbc474f8231169766a1  libgcc/config/libbid/bid64_to_uint64.c
  9d134112f07399d1f399c146e2ca9b83  libgcc/config/libbid/bid64_to_uint8.c
  b24fba58080e26dafa91ad5bfd068879  libgcc/config/libbid/bid_b2d.h
! ebbff94b4ae9e0e75dd19659f7c90a5d  libgcc/config/libbid/bid_binarydecimal.c
  2df00524ee5cc9493a7a521cc277c12b  libgcc/config/libbid/bid_conf.h
  73624cc921b0c1679f782553224ccd99  libgcc/config/libbid/bid_convert_data.c
  7ed819d3f6e8d2474ffb5fcc48b6c4a9  libgcc/config/libbid/bid_decimal_data.c
--- 126006,126012 ----
  0f3c04f1496cdbbc474f8231169766a1  libgcc/config/libbid/bid64_to_uint64.c
  9d134112f07399d1f399c146e2ca9b83  libgcc/config/libbid/bid64_to_uint8.c
  b24fba58080e26dafa91ad5bfd068879  libgcc/config/libbid/bid_b2d.h
! 44e1e5e7799ea057c34903e61f9af82a  libgcc/config/libbid/bid_binarydecimal.c
  2df00524ee5cc9493a7a521cc277c12b  libgcc/config/libbid/bid_conf.h
  73624cc921b0c1679f782553224ccd99  libgcc/config/libbid/bid_convert_data.c
  7ed819d3f6e8d2474ffb5fcc48b6c4a9  libgcc/config/libbid/bid_decimal_data.c
*************** f017ba40c4699f1549cd341ad688007f  libgcc
*** 126834,126840 ****
  804399bda5c6c23cd3e0cd78c21bc2fd  libgcc/vtv_end_preinit.c
  407de23229097d9b9a4d00e2e9c60c70  libgcc/vtv_start.c
  ba13e8c1385837f9a736ead153be6251  libgcc/vtv_start_preinit.c
! 2d86227552185d9679763973473a879e  libgcobol/ChangeLog
  b227feb8ac8df349788743a8ade3e840  libgcobol/LICENSE
  573e7a1dee0641f56d9b797b23dff44b  libgcobol/Makefile.am
  23cf4646d213d05645a0bf48209b374d  libgcobol/Makefile.in
--- 126974,126980 ----
  804399bda5c6c23cd3e0cd78c21bc2fd  libgcc/vtv_end_preinit.c
  407de23229097d9b9a4d00e2e9c60c70  libgcc/vtv_start.c
  ba13e8c1385837f9a736ead153be6251  libgcc/vtv_start_preinit.c
! b6cbc59babac0e749a570426d700fed0  libgcobol/ChangeLog
  b227feb8ac8df349788743a8ade3e840  libgcobol/LICENSE
  573e7a1dee0641f56d9b797b23dff44b  libgcobol/Makefile.am
  23cf4646d213d05645a0bf48209b374d  libgcobol/Makefile.in
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 133428,133434 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 0644acc8ab2fe0b6ea654e3f9294dbbb  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  883cfea6de23904b83d6bd58a729c866  libgomp/Makefile.am
  54c7bc8277669e3bf5f1a3db179ae206  libgomp/Makefile.in
--- 133568,133574 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 9a2e134678cf9b6a1d3cd1c9654ed198  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  883cfea6de23904b83d6bd58a729c866  libgomp/Makefile.am
  54c7bc8277669e3bf5f1a3db179ae206  libgomp/Makefile.in
*************** e71034ea32200ef9be7aef2679314d11  libgom
*** 133469,133475 ****
  eef2d6ff66275df9ac2cdc6e1e4c623f  libgomp/config/darwin/thread-stacksize.h
  7a7abbda7636b73d904438ed30f0dfc3  libgomp/config/gcn/affinity-fmt.c
  a6baab45f7291be4829b3eed2a856ed3  libgomp/config/gcn/allocator.c
! 544cf6af8de3e0cf7a4ca210dd2c6c44  libgomp/config/gcn/bar.c
  981fa55ee1e8b5189ea72a980f7d1472  libgomp/config/gcn/bar.h
  e778c0c26ce27386bdd21021765caf9d  libgomp/config/gcn/doacross.h
  502ad5cb908f4e4fd2b115ade60b45c1  libgomp/config/gcn/icv-device.c
--- 133609,133615 ----
  eef2d6ff66275df9ac2cdc6e1e4c623f  libgomp/config/darwin/thread-stacksize.h
  7a7abbda7636b73d904438ed30f0dfc3  libgomp/config/gcn/affinity-fmt.c
  a6baab45f7291be4829b3eed2a856ed3  libgomp/config/gcn/allocator.c
! e3cae35294a9ef1f03cb729108686087  libgomp/config/gcn/bar.c
  981fa55ee1e8b5189ea72a980f7d1472  libgomp/config/gcn/bar.h
  e778c0c26ce27386bdd21021765caf9d  libgomp/config/gcn/doacross.h
  502ad5cb908f4e4fd2b115ade60b45c1  libgomp/config/gcn/icv-device.c
*************** f707c9b8a0f7005cc93bc19e863bbd02  libgom
*** 133776,133783 ****
  8801d963ce68c757ce130916d88cfb17  libgomp/testsuite/libgomp.c++/pr119692-1-1.C
  6fc97c0ff0901911f7091f8eca32d1dd  libgomp/testsuite/libgomp.c++/pr119692-1-2.C
  a728b6c3c12ff1bb22774ab07d33b777  libgomp/testsuite/libgomp.c++/pr119692-1-3.C
! e52b578ffdcb5e3a392a4093b0fac9ae  libgomp/testsuite/libgomp.c++/pr119692-1-4.C
! b072fa5bb28bdd3466fa998e303c56c2  libgomp/testsuite/libgomp.c++/pr119692-1-5.C
  c57d4e906a72b08e5f49bef40306b63f  libgomp/testsuite/libgomp.c++/pr24455-1.C
  54c6e1c645042b8c18d27e04190d4816  libgomp/testsuite/libgomp.c++/pr24455.C
  ebbf9a13ba035141ba01b3281fd27fea  libgomp/testsuite/libgomp.c++/pr26691.C
--- 133916,133923 ----
  8801d963ce68c757ce130916d88cfb17  libgomp/testsuite/libgomp.c++/pr119692-1-1.C
  6fc97c0ff0901911f7091f8eca32d1dd  libgomp/testsuite/libgomp.c++/pr119692-1-2.C
  a728b6c3c12ff1bb22774ab07d33b777  libgomp/testsuite/libgomp.c++/pr119692-1-3.C
! 22afbe762f0bfd78bd8ebfdb9ae544d2  libgomp/testsuite/libgomp.c++/pr119692-1-4.C
! b9bea55653edd95a419c1fac4dc913e8  libgomp/testsuite/libgomp.c++/pr119692-1-5.C
  c57d4e906a72b08e5f49bef40306b63f  libgomp/testsuite/libgomp.c++/pr24455-1.C
  54c6e1c645042b8c18d27e04190d4816  libgomp/testsuite/libgomp.c++/pr24455.C
  ebbf9a13ba035141ba01b3281fd27fea  libgomp/testsuite/libgomp.c++/pr26691.C
*************** ab3063f8b6682d372e65d063a35a406d  libgom
*** 133892,133901 ****
  e8abd1a92868914a2a5307268ef4b3d8  libgomp/testsuite/libgomp.c++/target-9.C
  9d99c4c8266b85f3e755797f45220fa2  libgomp/testsuite/libgomp.c++/target-cdtor-1.C
  97c6a58c85759cb7153801e0d0286635  libgomp/testsuite/libgomp.c++/target-cdtor-2.C
! f95e8f8e2bc31f84035c5f704175f2a1  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C
  64bd4e898ee85afe93f6f182b3a479fc  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-GCN.C
  2ab3f03a68f64f25cb39af3017726c7c  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-nvptx.C
! 6653f24e0a8ffeac3286867c23ab4fad  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2.C
  9468d6f7c442b38e2a9f23b34f45e7c4  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-3.C
  7069b3bc6e85976fa473b1a8c6a77b4d  libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-GCN.C
  ea58e4396f7b4543713eff88bb835931  libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-nvptx.C
--- 134032,134041 ----
  e8abd1a92868914a2a5307268ef4b3d8  libgomp/testsuite/libgomp.c++/target-9.C
  9d99c4c8266b85f3e755797f45220fa2  libgomp/testsuite/libgomp.c++/target-cdtor-1.C
  97c6a58c85759cb7153801e0d0286635  libgomp/testsuite/libgomp.c++/target-cdtor-2.C
! 3d15e0d44019185d8004a4d4b87851de  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C
  64bd4e898ee85afe93f6f182b3a479fc  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-GCN.C
  2ab3f03a68f64f25cb39af3017726c7c  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-nvptx.C
! 0424d59b26219363ec3fa97fae4490f5  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2.C
  9468d6f7c442b38e2a9f23b34f45e7c4  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-3.C
  7069b3bc6e85976fa473b1a8c6a77b4d  libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-GCN.C
  ea58e4396f7b4543713eff88bb835931  libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-nvptx.C
*************** d4976186c6059f98d3a33b36f5c4d896  libgom
*** 135491,135500 ****
  d0be357251fa9b81f47dc517c6dcf8d4  libgomp/testsuite/libgomp.oacc-c++/deep-copy-12.C
  a924aab65a7c7201de2adf4968e8e2e6  libgomp/testsuite/libgomp.oacc-c++/deep-copy-13.C
  121dfc93f39c716edacdd5ec8cff3ceb  libgomp/testsuite/libgomp.oacc-c++/deep-copy-17.C
! 6736677caab463f2421e0fcb76f5d97b  libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C
  44a27cda6a0c94185e1eb7e1fa55e9b3  libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-GCN.C
  d0c153796cda95778b802ac4d3590e73  libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-nvptx.C
! f1b54f4a86456460907e75d42e9ea771  libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C
  e962cf32862ac6bcb2b6ea398edfdd50  libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-3.C
  86ffda628d80c63da915bbbe9a869eed  libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-1.C
  1e0f321f082f24b85dbeb1f3cfa75053  libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-GCN.C
--- 135631,135640 ----
  d0be357251fa9b81f47dc517c6dcf8d4  libgomp/testsuite/libgomp.oacc-c++/deep-copy-12.C
  a924aab65a7c7201de2adf4968e8e2e6  libgomp/testsuite/libgomp.oacc-c++/deep-copy-13.C
  121dfc93f39c716edacdd5ec8cff3ceb  libgomp/testsuite/libgomp.oacc-c++/deep-copy-17.C
! 74167e029b90996fdb288c2a268f09bf  libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C
  44a27cda6a0c94185e1eb7e1fa55e9b3  libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-GCN.C
  d0c153796cda95778b802ac4d3590e73  libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-nvptx.C
! a347b6c10e8ffde13749932cd368af3b  libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C
  e962cf32862ac6bcb2b6ea398edfdd50  libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-3.C
  86ffda628d80c63da915bbbe9a869eed  libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-1.C
  1e0f321f082f24b85dbeb1f3cfa75053  libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-GCN.C
*************** d680e7307fb59fe24f8431e179191f16  libssp
*** 138483,138489 ****
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 7525ad2522995c07b45979f2ceb5db65  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 138623,138629 ----
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 436966f37c15e34af8c07c07a7fdc122  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** d66f986053e4755f0517ff5cfe90b2b5  libstd
*** 138719,138725 ****
  520db39aef0e2a59418132af88b897ed  libstdc++-v3/doc/doxygen/mainpage.html
  9e50e6ed5219a6fa4058265ed4809638  libstdc++-v3/doc/doxygen/stdheader.cc
  1273764cd133c402d2d3f22cf2913af5  libstdc++-v3/doc/doxygen/tables.html
! 1e84b47eb6d795909c81c1ce94fd08ca  libstdc++-v3/doc/doxygen/user.cfg.in
  66e139590a163a3e9d632f33fbe1d1b3  libstdc++-v3/doc/html/README
  6d16751d668adf69fac47cc69bde7d40  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
--- 138859,138865 ----
  520db39aef0e2a59418132af88b897ed  libstdc++-v3/doc/doxygen/mainpage.html
  9e50e6ed5219a6fa4058265ed4809638  libstdc++-v3/doc/doxygen/stdheader.cc
  1273764cd133c402d2d3f22cf2913af5  libstdc++-v3/doc/doxygen/tables.html
! fd0df5e706d8c63016745e360cdd1573  libstdc++-v3/doc/doxygen/user.cfg.in
  66e139590a163a3e9d632f33fbe1d1b3  libstdc++-v3/doc/html/README
  6d16751d668adf69fac47cc69bde7d40  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
*************** df705f3839120dcb896e9839cf3404d0  libstd
*** 138807,138819 ****
  937f0f440bea9d4319e155cb51856882  libstdc++-v3/doc/html/index.html
  4e75c9ed55364b062b87405d233e6dd8  libstdc++-v3/doc/html/manual/abi.html
  4ce10e27356ac31a5b7962aecbeb3638  libstdc++-v3/doc/html/manual/algorithms.html
! aaafcae7ae14f03143ff9e72bf7f0958  libstdc++-v3/doc/html/manual/api.html
  e5a690ded485bd276ae2fa367fc1fd13  libstdc++-v3/doc/html/manual/appendix.html
! 349dd21397f799989e513b2c3c7b44d4  libstdc++-v3/doc/html/manual/appendix_contributing.html
  23038a3eb57967596dd7dc4f944e55e6  libstdc++-v3/doc/html/manual/appendix_free.html
  7bedd2c8f6a4683546db552dc3e8261f  libstdc++-v3/doc/html/manual/appendix_gfdl.html
  502f9b7267830b21cb88745d060faacf  libstdc++-v3/doc/html/manual/appendix_gpl.html
! 63599e48d1e7d74877390a90bb56cd87  libstdc++-v3/doc/html/manual/appendix_porting.html
  ac3612f72ad76b3796526d161b19db59  libstdc++-v3/doc/html/manual/associative.html
  b8ac9fc2f2cfcaed0450c79e2fb01569  libstdc++-v3/doc/html/manual/atomics.html
  d30e8a474595941b24a6493ad08f78d9  libstdc++-v3/doc/html/manual/backwards.html
--- 138947,138959 ----
  937f0f440bea9d4319e155cb51856882  libstdc++-v3/doc/html/index.html
  4e75c9ed55364b062b87405d233e6dd8  libstdc++-v3/doc/html/manual/abi.html
  4ce10e27356ac31a5b7962aecbeb3638  libstdc++-v3/doc/html/manual/algorithms.html
! e8962e30cf090d22cd4186a86105e4f3  libstdc++-v3/doc/html/manual/api.html
  e5a690ded485bd276ae2fa367fc1fd13  libstdc++-v3/doc/html/manual/appendix.html
! 09331471a432d70e6ad2e090ee1ba091  libstdc++-v3/doc/html/manual/appendix_contributing.html
  23038a3eb57967596dd7dc4f944e55e6  libstdc++-v3/doc/html/manual/appendix_free.html
  7bedd2c8f6a4683546db552dc3e8261f  libstdc++-v3/doc/html/manual/appendix_gfdl.html
  502f9b7267830b21cb88745d060faacf  libstdc++-v3/doc/html/manual/appendix_gpl.html
! c36e284f58b3d8922d39b812359e087e  libstdc++-v3/doc/html/manual/appendix_porting.html
  ac3612f72ad76b3796526d161b19db59  libstdc++-v3/doc/html/manual/associative.html
  b8ac9fc2f2cfcaed0450c79e2fb01569  libstdc++-v3/doc/html/manual/atomics.html
  d30e8a474595941b24a6493ad08f78d9  libstdc++-v3/doc/html/manual/backwards.html
*************** df705f3839120dcb896e9839cf3404d0  libstd
*** 139090,139103 ****
  e7d6be44d477d4dfab6f169057dc4002  libstdc++-v3/doc/xml/manual/abi.xml
  c1d775ba87be90b85044162eab59a66c  libstdc++-v3/doc/xml/manual/algorithms.xml
  a87c9806b403e8eab90d3020e1111bd5  libstdc++-v3/doc/xml/manual/allocator.xml
! 880838d1be16595895e1f73387cf8778  libstdc++-v3/doc/xml/manual/appendix_contributing.xml
  11e0fd62db5b93db462f3c54750904ec  libstdc++-v3/doc/xml/manual/appendix_free.xml
  0e37b1b056c89ad8cd7ef98f9924284c  libstdc++-v3/doc/xml/manual/appendix_porting.xml
  5139cfc8fdaabd93b5aa7362de789702  libstdc++-v3/doc/xml/manual/atomics.xml
  c3d24d92dc2ae1e99149164f60e80337  libstdc++-v3/doc/xml/manual/auto_ptr.xml
  18ecbccd2db2605dc093780d7b72799b  libstdc++-v3/doc/xml/manual/backwards_compatibility.xml
  b84cb983bda244285e1314327a420e66  libstdc++-v3/doc/xml/manual/bitmap_allocator.xml
! b3f117e4c677e60cf6035cf76714b185  libstdc++-v3/doc/xml/manual/build_hacking.xml
  8f13cae7ea80bc018b87b4ff8de7e3cf  libstdc++-v3/doc/xml/manual/codecvt.xml
  af3361d0d0af961859ec0346c38ac8c8  libstdc++-v3/doc/xml/manual/concurrency.xml
  9da4610e32c81714e9188c6852c8dc93  libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
--- 139230,139243 ----
  e7d6be44d477d4dfab6f169057dc4002  libstdc++-v3/doc/xml/manual/abi.xml
  c1d775ba87be90b85044162eab59a66c  libstdc++-v3/doc/xml/manual/algorithms.xml
  a87c9806b403e8eab90d3020e1111bd5  libstdc++-v3/doc/xml/manual/allocator.xml
! b860270b35e04a2ad4da73d0c27f710e  libstdc++-v3/doc/xml/manual/appendix_contributing.xml
  11e0fd62db5b93db462f3c54750904ec  libstdc++-v3/doc/xml/manual/appendix_free.xml
  0e37b1b056c89ad8cd7ef98f9924284c  libstdc++-v3/doc/xml/manual/appendix_porting.xml
  5139cfc8fdaabd93b5aa7362de789702  libstdc++-v3/doc/xml/manual/atomics.xml
  c3d24d92dc2ae1e99149164f60e80337  libstdc++-v3/doc/xml/manual/auto_ptr.xml
  18ecbccd2db2605dc093780d7b72799b  libstdc++-v3/doc/xml/manual/backwards_compatibility.xml
  b84cb983bda244285e1314327a420e66  libstdc++-v3/doc/xml/manual/bitmap_allocator.xml
! cf5fda68829b2e0e24598f1693638f0b  libstdc++-v3/doc/xml/manual/build_hacking.xml
  8f13cae7ea80bc018b87b4ff8de7e3cf  libstdc++-v3/doc/xml/manual/codecvt.xml
  af3361d0d0af961859ec0346c38ac8c8  libstdc++-v3/doc/xml/manual/concurrency.xml
  9da4610e32c81714e9188c6852c8dc93  libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
*************** d08c687d9520b2f9d8dd6d973cca9e6a  libstd
*** 139108,139114 ****
  a972c915c47573572139ea9161dec244  libstdc++-v3/doc/xml/manual/debug_mode.xml
  f320f25003678cca910f09ba54c923fc  libstdc++-v3/doc/xml/manual/diagnostics.xml
  3680906036c20b1ccc54e2d06b5a3a24  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
! 9691615789c5cdab4a32d141ed8593af  libstdc++-v3/doc/xml/manual/evolution.xml
  250fbd9ce8e61158b22da9b231426c24  libstdc++-v3/doc/xml/manual/extensions.xml
  7f1864c7f3c3b2bfde84b7086be97ca7  libstdc++-v3/doc/xml/manual/internals.xml
  fb1b8e4745ce0e8ee919f6013ad8ba87  libstdc++-v3/doc/xml/manual/intro.xml
--- 139248,139254 ----
  a972c915c47573572139ea9161dec244  libstdc++-v3/doc/xml/manual/debug_mode.xml
  f320f25003678cca910f09ba54c923fc  libstdc++-v3/doc/xml/manual/diagnostics.xml
  3680906036c20b1ccc54e2d06b5a3a24  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
! a428ca9e1e1a450b765156e74924d806  libstdc++-v3/doc/xml/manual/evolution.xml
  250fbd9ce8e61158b22da9b231426c24  libstdc++-v3/doc/xml/manual/extensions.xml
  7f1864c7f3c3b2bfde84b7086be97ca7  libstdc++-v3/doc/xml/manual/internals.xml
  fb1b8e4745ce0e8ee919f6013ad8ba87  libstdc++-v3/doc/xml/manual/intro.xml
*************** b820e3490221bb85cbf6bcdde0aa8150  libstd
*** 139144,139151 ****
  c587674e0c370a2d6ccc5213ab3e4e65  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! 6da931890771a9730ff5c1b82de5da53  libstdc++-v3/include/Makefile.am
! 44451083932a2866b1c2f068798da403  libstdc++-v3/include/Makefile.in
  9909a8468983e231e92c9e286c9765fb  libstdc++-v3/include/backward/auto_ptr.h
  83254dbbadebf6a7aeb58f3cdbf117e9  libstdc++-v3/include/backward/backward_warning.h
  38985095b8ea422bf8bfa31ec65d803c  libstdc++-v3/include/backward/binders.h
--- 139284,139291 ----
  c587674e0c370a2d6ccc5213ab3e4e65  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! e6433f7e2632c2cb662c0230eb158f72  libstdc++-v3/include/Makefile.am
! d672c7cfda151339dc8a96039a113ed4  libstdc++-v3/include/Makefile.in
  9909a8468983e231e92c9e286c9765fb  libstdc++-v3/include/backward/auto_ptr.h
  83254dbbadebf6a7aeb58f3cdbf117e9  libstdc++-v3/include/backward/backward_warning.h
  38985095b8ea422bf8bfa31ec65d803c  libstdc++-v3/include/backward/binders.h
*************** e3c307e48b9e12b0736fde183ffa8bd7  libstd
*** 139173,139179 ****
  5384dfbb9eb9731df3aca40e40d55350  libstdc++-v3/include/bits/char_traits.h
  195dabcb74f9b313c574745539925b0e  libstdc++-v3/include/bits/charconv.h
  8a303c55e1a9a90d751641a38581e2bc  libstdc++-v3/include/bits/chrono.h
! 4c13cebfa5e8a92c8b1d69b08b469556  libstdc++-v3/include/bits/chrono_io.h
  2ff73cb405cb01626a751e0fa0f339f3  libstdc++-v3/include/bits/codecvt.h
  23fc42ee8644308c793f44d20f00420e  libstdc++-v3/include/bits/concept_check.h
  e999e0783a5ca2165919f352526501e9  libstdc++-v3/include/bits/cow_string.h
--- 139313,139319 ----
  5384dfbb9eb9731df3aca40e40d55350  libstdc++-v3/include/bits/char_traits.h
  195dabcb74f9b313c574745539925b0e  libstdc++-v3/include/bits/charconv.h
  8a303c55e1a9a90d751641a38581e2bc  libstdc++-v3/include/bits/chrono.h
! 42cd11a30ad4d11a2c974f2a8fb6d8c9  libstdc++-v3/include/bits/chrono_io.h
  2ff73cb405cb01626a751e0fa0f339f3  libstdc++-v3/include/bits/codecvt.h
  23fc42ee8644308c793f44d20f00420e  libstdc++-v3/include/bits/concept_check.h
  e999e0783a5ca2165919f352526501e9  libstdc++-v3/include/bits/cow_string.h
*************** b13fecc1efb3b85dacbed61c6d2a7eed  libstd
*** 139193,139199 ****
  b3da24b61a3e8219dde982b2734707ec  libstdc++-v3/include/bits/fstream.tcc
  02a8c025eda02a35e6a87a42955684fc  libstdc++-v3/include/bits/funcref_impl.h
  bda3ca60f2214f1bd6656e6612aff428  libstdc++-v3/include/bits/functexcept.h
! edde9c9d1c9e267663f60a9f5cfe3ebe  libstdc++-v3/include/bits/functional_hash.h
  758a9f4624b07b6cd50c98ff3e88a050  libstdc++-v3/include/bits/funcwrap.h
  f656180781457f5f36a26b5902da4b6f  libstdc++-v3/include/bits/gslice.h
  a94b98a38c3eb27aa6644a5fb468c9de  libstdc++-v3/include/bits/gslice_array.h
--- 139333,139339 ----
  b3da24b61a3e8219dde982b2734707ec  libstdc++-v3/include/bits/fstream.tcc
  02a8c025eda02a35e6a87a42955684fc  libstdc++-v3/include/bits/funcref_impl.h
  bda3ca60f2214f1bd6656e6612aff428  libstdc++-v3/include/bits/functexcept.h
! 68bc2b242e62bd27a00ee3f202c736de  libstdc++-v3/include/bits/functional_hash.h
  758a9f4624b07b6cd50c98ff3e88a050  libstdc++-v3/include/bits/funcwrap.h
  f656180781457f5f36a26b5902da4b6f  libstdc++-v3/include/bits/gslice.h
  a94b98a38c3eb27aa6644a5fb468c9de  libstdc++-v3/include/bits/gslice_array.h
*************** ebe0e043997d2c8b674df27da18dc48c  libstd
*** 139220,139226 ****
  27bdede74800b12180665889a05cca6b  libstdc++-v3/include/bits/memoryfwd.h
  3cdf6345e89c49a55bd7c9be035d3729  libstdc++-v3/include/bits/mofunc_impl.h
  6ac85b21a9fb05014efe9345967c51b4  libstdc++-v3/include/bits/monostate.h
! 284986047a940fb75091291f654e6d43  libstdc++-v3/include/bits/move.h
  46c2f3b679b1978ddb4dff0bf8b97610  libstdc++-v3/include/bits/new_allocator.h
  f0db6753fd67e8ef172c6851da248f62  libstdc++-v3/include/bits/node_handle.h
  3092071ce3fbded00e007d2833fcfcae  libstdc++-v3/include/bits/ostream.h
--- 139360,139366 ----
  27bdede74800b12180665889a05cca6b  libstdc++-v3/include/bits/memoryfwd.h
  3cdf6345e89c49a55bd7c9be035d3729  libstdc++-v3/include/bits/mofunc_impl.h
  6ac85b21a9fb05014efe9345967c51b4  libstdc++-v3/include/bits/monostate.h
! 38c1c511a492249936888691a52f40e2  libstdc++-v3/include/bits/move.h
  46c2f3b679b1978ddb4dff0bf8b97610  libstdc++-v3/include/bits/new_allocator.h
  f0db6753fd67e8ef172c6851da248f62  libstdc++-v3/include/bits/node_handle.h
  3092071ce3fbded00e007d2833fcfcae  libstdc++-v3/include/bits/ostream.h
*************** a0ff2aff5e6b290f02129d8fd5066f94  libstd
*** 139237,139245 ****
  b0c29f09a819ac9aa11c3507409c11ef  libstdc++-v3/include/bits/range_access.h
  c9600d34774ec40c09ff1b2280e744e0  libstdc++-v3/include/bits/ranges_algo.h
  2739c66cfdc38cbad18771e2317ce548  libstdc++-v3/include/bits/ranges_algobase.h
! f87fbb650f80c7b39f95868a73e37e76  libstdc++-v3/include/bits/ranges_base.h
  586727039587b10b560a902b1c7008b1  libstdc++-v3/include/bits/ranges_cmp.h
! 4a47bd7ff3afbf353ca7c097f3fda6f8  libstdc++-v3/include/bits/ranges_uninitialized.h
  13ab6526ab5b8cd5e9a7b12e6bf761f6  libstdc++-v3/include/bits/ranges_util.h
  222a1067e3c63fb19ed0996234a84884  libstdc++-v3/include/bits/refwrap.h
  5b95e35539d0071176396cd82a6072b7  libstdc++-v3/include/bits/regex.h
--- 139377,139385 ----
  b0c29f09a819ac9aa11c3507409c11ef  libstdc++-v3/include/bits/range_access.h
  c9600d34774ec40c09ff1b2280e744e0  libstdc++-v3/include/bits/ranges_algo.h
  2739c66cfdc38cbad18771e2317ce548  libstdc++-v3/include/bits/ranges_algobase.h
! 0ebd2123d3d7429aa3e58f7aea66ef93  libstdc++-v3/include/bits/ranges_base.h
  586727039587b10b560a902b1c7008b1  libstdc++-v3/include/bits/ranges_cmp.h
! 2eec8b6abbfa67c2a80da3caf7e0c2c3  libstdc++-v3/include/bits/ranges_uninitialized.h
  13ab6526ab5b8cd5e9a7b12e6bf761f6  libstdc++-v3/include/bits/ranges_util.h
  222a1067e3c63fb19ed0996234a84884  libstdc++-v3/include/bits/refwrap.h
  5b95e35539d0071176396cd82a6072b7  libstdc++-v3/include/bits/regex.h
*************** c2ca446fe3c0e405c49faaad2b28e9aa  libstd
*** 139276,139288 ****
  c6b4511debfbf2f7971dbae97dbcc998  libstdc++-v3/include/bits/stl_heap.h
  7f15896f0e815aaa22a610841ad076bd  libstdc++-v3/include/bits/stl_iterator.h
  e377e5172a37470411327d66be24b6a0  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
! 252307c6170fb8ddbc0bb33c0c80f35b  libstdc++-v3/include/bits/stl_iterator_base_types.h
  4f93444bfce714698d1c4bd36a134164  libstdc++-v3/include/bits/stl_list.h
  9cbe01c5624f36e20bda151e066a94fd  libstdc++-v3/include/bits/stl_map.h
  2525257e0e5e980d1c62e5c335ccd152  libstdc++-v3/include/bits/stl_multimap.h
  ed492cb12f700a39913c303324c4d3d0  libstdc++-v3/include/bits/stl_multiset.h
  480b44132613538ac869874bf3fc4e45  libstdc++-v3/include/bits/stl_numeric.h
! e767ec7b42d6a51baeeb74d932a1174f  libstdc++-v3/include/bits/stl_pair.h
  c187c580a48d3cfe2a81c4230220002d  libstdc++-v3/include/bits/stl_queue.h
  ef960a69cca203133e14f230f029c45f  libstdc++-v3/include/bits/stl_raw_storage_iter.h
  8b75378d24bf1cd680dec9034e5fa6cf  libstdc++-v3/include/bits/stl_relops.h
--- 139416,139428 ----
  c6b4511debfbf2f7971dbae97dbcc998  libstdc++-v3/include/bits/stl_heap.h
  7f15896f0e815aaa22a610841ad076bd  libstdc++-v3/include/bits/stl_iterator.h
  e377e5172a37470411327d66be24b6a0  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
! 54bf96df9d7600b71ab8d00f28c7e6de  libstdc++-v3/include/bits/stl_iterator_base_types.h
  4f93444bfce714698d1c4bd36a134164  libstdc++-v3/include/bits/stl_list.h
  9cbe01c5624f36e20bda151e066a94fd  libstdc++-v3/include/bits/stl_map.h
  2525257e0e5e980d1c62e5c335ccd152  libstdc++-v3/include/bits/stl_multimap.h
  ed492cb12f700a39913c303324c4d3d0  libstdc++-v3/include/bits/stl_multiset.h
  480b44132613538ac869874bf3fc4e45  libstdc++-v3/include/bits/stl_numeric.h
! 093125d691125a68b030f596964f2817  libstdc++-v3/include/bits/stl_pair.h
  c187c580a48d3cfe2a81c4230220002d  libstdc++-v3/include/bits/stl_queue.h
  ef960a69cca203133e14f230f029c45f  libstdc++-v3/include/bits/stl_raw_storage_iter.h
  8b75378d24bf1cd680dec9034e5fa6cf  libstdc++-v3/include/bits/stl_relops.h
*************** bde7ef0245c6a48f1e86c1154662b9b3  libstd
*** 139300,139309 ****
  2eaea6618dd32c781462a159568c3920  libstdc++-v3/include/bits/text_encoding-data.h
  69bea23b704fea0d9737f0fd16a14414  libstdc++-v3/include/bits/this_thread_sleep.h
  1d895dad783b99f40983f70665fe73aa  libstdc++-v3/include/bits/unicode-data.h
! 0cd52362d57cc5fc0e0d07fab7c47853  libstdc++-v3/include/bits/unicode.h
  e10663748871662214948efa4440ceaa  libstdc++-v3/include/bits/uniform_int_dist.h
  0d7174a622374816c75ac03f78148fc9  libstdc++-v3/include/bits/unique_lock.h
! 2a66eb116b958ff020936c2699398133  libstdc++-v3/include/bits/unique_ptr.h
  720670953bf88eec92501c1ba0c32197  libstdc++-v3/include/bits/unordered_map.h
  23e3769341c471dd17aa42c532a2e463  libstdc++-v3/include/bits/unordered_set.h
  a29de34311f884bb0a7bb8854fe4ce34  libstdc++-v3/include/bits/uses_allocator.h
--- 139440,139449 ----
  2eaea6618dd32c781462a159568c3920  libstdc++-v3/include/bits/text_encoding-data.h
  69bea23b704fea0d9737f0fd16a14414  libstdc++-v3/include/bits/this_thread_sleep.h
  1d895dad783b99f40983f70665fe73aa  libstdc++-v3/include/bits/unicode-data.h
! d4640a684d621320ba7676511ca49731  libstdc++-v3/include/bits/unicode.h
  e10663748871662214948efa4440ceaa  libstdc++-v3/include/bits/uniform_int_dist.h
  0d7174a622374816c75ac03f78148fc9  libstdc++-v3/include/bits/unique_lock.h
! 93a78bb35b2fe9f54d8df8c4c1669ad4  libstdc++-v3/include/bits/unique_ptr.h
  720670953bf88eec92501c1ba0c32197  libstdc++-v3/include/bits/unordered_map.h
  23e3769341c471dd17aa42c532a2e463  libstdc++-v3/include/bits/unordered_set.h
  a29de34311f884bb0a7bb8854fe4ce34  libstdc++-v3/include/bits/uses_allocator.h
*************** a229b5c8ad2904a3b3173239225596c4  libstd
*** 139314,139321 ****
  3ddbcccf58411251c2825ae41b697844  libstdc++-v3/include/bits/valarray_array.tcc
  a4c99020fc6d28e94d24a3f60a71b6ec  libstdc++-v3/include/bits/valarray_before.h
  652419a46dc988dd67c512e4f7d5638a  libstdc++-v3/include/bits/vector.tcc
! fd83bdefbc26534fef033d5cf013eba6  libstdc++-v3/include/bits/version.def
! 7f9fae27034fbc43d82d4df7fa94e1ad  libstdc++-v3/include/bits/version.h
  0db0dfc5d016435e64398e3bb70098d3  libstdc++-v3/include/bits/version.tpl
  6ccd70c0c36dd38ba559c1fc5a05fbd0  libstdc++-v3/include/c/cassert
  c31b54f25b2f8c7ca3ca3eec930d4e1d  libstdc++-v3/include/c/cctype
--- 139454,139461 ----
  3ddbcccf58411251c2825ae41b697844  libstdc++-v3/include/bits/valarray_array.tcc
  a4c99020fc6d28e94d24a3f60a71b6ec  libstdc++-v3/include/bits/valarray_before.h
  652419a46dc988dd67c512e4f7d5638a  libstdc++-v3/include/bits/vector.tcc
! 5dba0602e4c1e8e3bb9e2eaad3b153a9  libstdc++-v3/include/bits/version.def
! d7c118418433c5c3d034fb89c3f1ff05  libstdc++-v3/include/bits/version.h
  0db0dfc5d016435e64398e3bb70098d3  libstdc++-v3/include/bits/version.tpl
  6ccd70c0c36dd38ba559c1fc5a05fbd0  libstdc++-v3/include/c/cassert
  c31b54f25b2f8c7ca3ca3eec930d4e1d  libstdc++-v3/include/c/cctype
*************** f480e69017dc35cc6fab6630bada4617  libstd
*** 139374,139380 ****
  aeb1d3638d20d4792a586c61c7c12544  libstdc++-v3/include/c_global/ciso646
  9d260929c3a8f563e7d273517c02af88  libstdc++-v3/include/c_global/climits
  a5b91f8c38eddd257a048cb2d3085834  libstdc++-v3/include/c_global/clocale
! 6452d0c55d05c54dbae7cbd855dfeceb  libstdc++-v3/include/c_global/cmath
  5674356fc9542152636dace9bfc3c2c8  libstdc++-v3/include/c_global/csetjmp
  41b8204a8236e2ec4001289746a8abef  libstdc++-v3/include/c_global/csignal
  e32033f054c4ecf20bd8d5e93aebf80d  libstdc++-v3/include/c_global/cstdalign
--- 139514,139520 ----
  aeb1d3638d20d4792a586c61c7c12544  libstdc++-v3/include/c_global/ciso646
  9d260929c3a8f563e7d273517c02af88  libstdc++-v3/include/c_global/climits
  a5b91f8c38eddd257a048cb2d3085834  libstdc++-v3/include/c_global/clocale
! 8c328b3732cea7e0296e6b53109bc92f  libstdc++-v3/include/c_global/cmath
  5674356fc9542152636dace9bfc3c2c8  libstdc++-v3/include/c_global/csetjmp
  41b8204a8236e2ec4001289746a8abef  libstdc++-v3/include/c_global/csignal
  e32033f054c4ecf20bd8d5e93aebf80d  libstdc++-v3/include/c_global/cstdalign
*************** fdd6331fffcd4083259c9c59cc6a4af2  libstd
*** 139481,139487 ****
  dc3973d63d28996340686b8ddaaf04ac  libstdc++-v3/include/experimental/iterator
  038cc069ead1dee5b10d033167ed7c40  libstdc++-v3/include/experimental/list
  667748bbb82ff351a8b1954c494730d9  libstdc++-v3/include/experimental/map
! d19a5bd56e860d6e01b54e3377d10220  libstdc++-v3/include/experimental/memory
  792eb7081c4e6dc6a503b2839250d446  libstdc++-v3/include/experimental/memory_resource
  244e2d1cb347f552f0c7c0e4e184997e  libstdc++-v3/include/experimental/net
  1cfd73441f6f5cbb7a65e38a9dff1454  libstdc++-v3/include/experimental/netfwd
--- 139621,139627 ----
  dc3973d63d28996340686b8ddaaf04ac  libstdc++-v3/include/experimental/iterator
  038cc069ead1dee5b10d033167ed7c40  libstdc++-v3/include/experimental/list
  667748bbb82ff351a8b1954c494730d9  libstdc++-v3/include/experimental/map
! c633b09fdeebbc35c76b0c77186d5f3a  libstdc++-v3/include/experimental/memory
  792eb7081c4e6dc6a503b2839250d446  libstdc++-v3/include/experimental/memory_resource
  244e2d1cb347f552f0c7c0e4e184997e  libstdc++-v3/include/experimental/net
  1cfd73441f6f5cbb7a65e38a9dff1454  libstdc++-v3/include/experimental/netfwd
*************** eb20df8190cb844a12f9fd68d043bcf0  libstd
*** 139835,139845 ****
  7997eb362a00f19f0f8e29fe72718fba  libstdc++-v3/include/parallel/unique_copy.h
  322d276913feb4b729019573db0593af  libstdc++-v3/include/parallel/workstealing.h
  37ac2dd1c7910a98bcbb9619d27add88  libstdc++-v3/include/precompiled/extc++.h
! d0f4471e1f57d82282a8108ba7cb716f  libstdc++-v3/include/precompiled/stdc++.h
  a62eb60403f5499c2d4a096e6a68b92b  libstdc++-v3/include/precompiled/stdtr1c++.h
  75cfb36aeb3ed8672bb4e2957272203c  libstdc++-v3/include/pstl/LICENSE.txt
  6aa52d6b70bfb53073697375741dff45  libstdc++-v3/include/pstl/algorithm_fwd.h
! a327a81367f960c92ab8eec7ff1f4690  libstdc++-v3/include/pstl/algorithm_impl.h
  ae347741e840ff43bfc0c1800ecdbf63  libstdc++-v3/include/pstl/execution_defs.h
  2f581a415975d87328a3e39c015d38b1  libstdc++-v3/include/pstl/execution_impl.h
  995f5473bbb55d043d61d10ba1776043  libstdc++-v3/include/pstl/glue_algorithm_defs.h
--- 139975,139985 ----
  7997eb362a00f19f0f8e29fe72718fba  libstdc++-v3/include/parallel/unique_copy.h
  322d276913feb4b729019573db0593af  libstdc++-v3/include/parallel/workstealing.h
  37ac2dd1c7910a98bcbb9619d27add88  libstdc++-v3/include/precompiled/extc++.h
! 6e22915f9aae18a6f641e54019c5c8ca  libstdc++-v3/include/precompiled/stdc++.h
  a62eb60403f5499c2d4a096e6a68b92b  libstdc++-v3/include/precompiled/stdtr1c++.h
  75cfb36aeb3ed8672bb4e2957272203c  libstdc++-v3/include/pstl/LICENSE.txt
  6aa52d6b70bfb53073697375741dff45  libstdc++-v3/include/pstl/algorithm_fwd.h
! a2328073492275bd7212327bef18e8fd  libstdc++-v3/include/pstl/algorithm_impl.h
  ae347741e840ff43bfc0c1800ecdbf63  libstdc++-v3/include/pstl/execution_defs.h
  2f581a415975d87328a3e39c015d38b1  libstdc++-v3/include/pstl/execution_impl.h
  995f5473bbb55d043d61d10ba1776043  libstdc++-v3/include/pstl/glue_algorithm_defs.h
*************** ae347741e840ff43bfc0c1800ecdbf63  libstd
*** 139849,139857 ****
  7d755330869711b38d6e8dd35b486645  libstdc++-v3/include/pstl/glue_memory_impl.h
  9470d07762f86ba4655154491929a328  libstdc++-v3/include/pstl/glue_numeric_defs.h
  721eb8a76c61c8d807bffbca4dc5edc7  libstdc++-v3/include/pstl/glue_numeric_impl.h
! f9819c3fbab884d0ff4d0150023c3826  libstdc++-v3/include/pstl/memory_impl.h
  46b7494faaf72186343f13f46db3cac4  libstdc++-v3/include/pstl/numeric_fwd.h
! eada13df7ada6f474684700aa57c2da8  libstdc++-v3/include/pstl/numeric_impl.h
  531b6552c2b0ded549ed9bc9b03bebf4  libstdc++-v3/include/pstl/parallel_backend.h
  c6ea5607259b8e63bb887db39136b942  libstdc++-v3/include/pstl/parallel_backend_serial.h
  eb7da829c52c944d7125a8a18352a312  libstdc++-v3/include/pstl/parallel_backend_tbb.h
--- 139989,139997 ----
  7d755330869711b38d6e8dd35b486645  libstdc++-v3/include/pstl/glue_memory_impl.h
  9470d07762f86ba4655154491929a328  libstdc++-v3/include/pstl/glue_numeric_defs.h
  721eb8a76c61c8d807bffbca4dc5edc7  libstdc++-v3/include/pstl/glue_numeric_impl.h
! e52031cf939ea27e56877705f57f1bd6  libstdc++-v3/include/pstl/memory_impl.h
  46b7494faaf72186343f13f46db3cac4  libstdc++-v3/include/pstl/numeric_fwd.h
! cdf493ace328837031dc6cd01975e318  libstdc++-v3/include/pstl/numeric_impl.h
  531b6552c2b0ded549ed9bc9b03bebf4  libstdc++-v3/include/pstl/parallel_backend.h
  c6ea5607259b8e63bb887db39136b942  libstdc++-v3/include/pstl/parallel_backend_serial.h
  eb7da829c52c944d7125a8a18352a312  libstdc++-v3/include/pstl/parallel_backend_tbb.h
*************** f1cc3238df41adc204bc4f90accc63f3  libstd
*** 139863,139873 ****
  2bd04b33c3c9ee14ba8890fcbceb4328  libstdc++-v3/include/std/.editorconfig
  d26c17df4d8dbf3f28df91e901fb1ae2  libstdc++-v3/include/std/algorithm
  d891b88417c6426b21aee63c74ec4e98  libstdc++-v3/include/std/any
! d434b6703454e6fece0bb6ab907894d5  libstdc++-v3/include/std/array
  0629d22f554a52275f62402292b23e12  libstdc++-v3/include/std/atomic
  d1730a41b18e21cbac0f5328aad2d223  libstdc++-v3/include/std/barrier
  66a9c513e3e5b0698ace3297c819bdcf  libstdc++-v3/include/std/bit
! bd722d6752add2c722ae118b7170f419  libstdc++-v3/include/std/bitset
  285aa50d7e8cebdf5212f7f6e14a13fa  libstdc++-v3/include/std/charconv
  3282d97cb840e6ff9b826fb1a3b5ab27  libstdc++-v3/include/std/chrono
  a90e2b9ed2c236c92f3f2387a39a0ac8  libstdc++-v3/include/std/codecvt
--- 140003,140013 ----
  2bd04b33c3c9ee14ba8890fcbceb4328  libstdc++-v3/include/std/.editorconfig
  d26c17df4d8dbf3f28df91e901fb1ae2  libstdc++-v3/include/std/algorithm
  d891b88417c6426b21aee63c74ec4e98  libstdc++-v3/include/std/any
! cfa40ce7bf7ca94a28186ab967acdd6f  libstdc++-v3/include/std/array
  0629d22f554a52275f62402292b23e12  libstdc++-v3/include/std/atomic
  d1730a41b18e21cbac0f5328aad2d223  libstdc++-v3/include/std/barrier
  66a9c513e3e5b0698ace3297c819bdcf  libstdc++-v3/include/std/bit
! 8d011087c129a1487b227bd4aa56a3aa  libstdc++-v3/include/std/bitset
  285aa50d7e8cebdf5212f7f6e14a13fa  libstdc++-v3/include/std/charconv
  3282d97cb840e6ff9b826fb1a3b5ab27  libstdc++-v3/include/std/chrono
  a90e2b9ed2c236c92f3f2387a39a0ac8  libstdc++-v3/include/std/codecvt
*************** e790ae6877466aa86b47f36d201e8563  libstd
*** 139887,139892 ****
--- 140027,140033 ----
  866d33497e4338e4e1a5289de701f9ba  libstdc++-v3/include/std/functional
  d472ad4b1b5c12e2f731980802d15b50  libstdc++-v3/include/std/future
  d91bc94f2a9c1ff7f642d23c27ec66ae  libstdc++-v3/include/std/generator
+ 338f1c11e4505d6e69bdd1ee87244acb  libstdc++-v3/include/std/inplace_vector
  90e01b4e65cec5c0a3786580b2529edb  libstdc++-v3/include/std/iomanip
  bf5ea5fbda7bfdc1dc462f0303fc4e99  libstdc++-v3/include/std/ios
  4623e874877c5e927587c4bfe1a03c84  libstdc++-v3/include/std/iosfwd
*************** a98ad6deeb1a797726968f46416f6122  libstd
*** 139898,139915 ****
  c9ef2791c2dc0d6c98a1a85c8f6aa473  libstdc++-v3/include/std/list
  f4af31191dea172207576960ad71d42d  libstdc++-v3/include/std/locale
  8b76fc7da76f0579c2fd1f22821d03be  libstdc++-v3/include/std/map
! d183644220648a8bee14fc054174b399  libstdc++-v3/include/std/mdspan
  c381426cd2710743a6530b116179d74f  libstdc++-v3/include/std/memory
  9e86c11ff29d60fddf403674e9182b36  libstdc++-v3/include/std/memory_resource
  a7b8e00d6cf56ea696ec15140b7c1d15  libstdc++-v3/include/std/mutex
  ef0d0725f5b70a4c1b5b62b84b2b63f7  libstdc++-v3/include/std/numbers
  b944796362aa39fc1cba3747d2247464  libstdc++-v3/include/std/numeric
! 7087192c3b2013f70a584b3832225555  libstdc++-v3/include/std/optional
  5d2c4f92cc15a2b4491886b629aabc08  libstdc++-v3/include/std/ostream
  8883599080e145869428c2dc9e59e2d3  libstdc++-v3/include/std/print
  edcf23ae5a0a665fe8b4c0b76d8bfca1  libstdc++-v3/include/std/queue
  01746ff9db8573f15b943b0c36cce6a8  libstdc++-v3/include/std/random
! 48e48db8bd4dc7480700ddb4c226d44a  libstdc++-v3/include/std/ranges
  a28bf4bed6789b61535d4b05ff48ba76  libstdc++-v3/include/std/ratio
  400d95a1fd416911b5c47562d7a586cf  libstdc++-v3/include/std/regex
  1bad2aed72c4537e7f08d24c1bf7d375  libstdc++-v3/include/std/scoped_allocator
--- 140039,140056 ----
  c9ef2791c2dc0d6c98a1a85c8f6aa473  libstdc++-v3/include/std/list
  f4af31191dea172207576960ad71d42d  libstdc++-v3/include/std/locale
  8b76fc7da76f0579c2fd1f22821d03be  libstdc++-v3/include/std/map
! 27e064589f9dddfae7bde158d961ff12  libstdc++-v3/include/std/mdspan
  c381426cd2710743a6530b116179d74f  libstdc++-v3/include/std/memory
  9e86c11ff29d60fddf403674e9182b36  libstdc++-v3/include/std/memory_resource
  a7b8e00d6cf56ea696ec15140b7c1d15  libstdc++-v3/include/std/mutex
  ef0d0725f5b70a4c1b5b62b84b2b63f7  libstdc++-v3/include/std/numbers
  b944796362aa39fc1cba3747d2247464  libstdc++-v3/include/std/numeric
! 5d818ee7f1f99ab14a672f8417eadf33  libstdc++-v3/include/std/optional
  5d2c4f92cc15a2b4491886b629aabc08  libstdc++-v3/include/std/ostream
  8883599080e145869428c2dc9e59e2d3  libstdc++-v3/include/std/print
  edcf23ae5a0a665fe8b4c0b76d8bfca1  libstdc++-v3/include/std/queue
  01746ff9db8573f15b943b0c36cce6a8  libstdc++-v3/include/std/random
! e57da2a2e732690259d52bc535066052  libstdc++-v3/include/std/ranges
  a28bf4bed6789b61535d4b05ff48ba76  libstdc++-v3/include/std/ratio
  400d95a1fd416911b5c47562d7a586cf  libstdc++-v3/include/std/regex
  1bad2aed72c4537e7f08d24c1bf7d375  libstdc++-v3/include/std/scoped_allocator
*************** c5a4df8fdbbe4b3d33d0b52db500e16d  libstd
*** 139932,139945 ****
  21988a8b4bf87b01fc566fe8659ab2cc  libstdc++-v3/include/std/system_error
  608edef7344e2e25c7b00170df6fa9e6  libstdc++-v3/include/std/text_encoding
  7cdac9ea092e51e067047e2b3fb2060e  libstdc++-v3/include/std/thread
! d2ff7cdca5ef2cee6f02c458a98fa638  libstdc++-v3/include/std/tuple
! 0797d044be4ccf9738bfd84d2e923c5d  libstdc++-v3/include/std/type_traits
  237682577d22ec3f9f5046abf0acd8e7  libstdc++-v3/include/std/typeindex
  520c52362f53e18f20838693cfd131bf  libstdc++-v3/include/std/unordered_map
  c82be32edefaa23cc1228b092d319315  libstdc++-v3/include/std/unordered_set
  a05198d154ee4b152da6854fa6433ee7  libstdc++-v3/include/std/utility
  e0096e013b19127692d1ed454892142d  libstdc++-v3/include/std/valarray
! d77f7c3f3a87abea407b92b2196d5010  libstdc++-v3/include/std/variant
  0d0a38cd1a88e2528f889586625f8305  libstdc++-v3/include/std/vector
  1c10633087657ad7a31f6c3569a3ebe0  libstdc++-v3/include/std/version
  e0951486c7e6c5afe3105fe5004effb9  libstdc++-v3/include/tr1/array
--- 140073,140086 ----
  21988a8b4bf87b01fc566fe8659ab2cc  libstdc++-v3/include/std/system_error
  608edef7344e2e25c7b00170df6fa9e6  libstdc++-v3/include/std/text_encoding
  7cdac9ea092e51e067047e2b3fb2060e  libstdc++-v3/include/std/thread
! 6ec655e7fd49c6ce8c2ddd38a3b6b9dc  libstdc++-v3/include/std/tuple
! 98e5e2857b36ea3c0637434b6ed01417  libstdc++-v3/include/std/type_traits
  237682577d22ec3f9f5046abf0acd8e7  libstdc++-v3/include/std/typeindex
  520c52362f53e18f20838693cfd131bf  libstdc++-v3/include/std/unordered_map
  c82be32edefaa23cc1228b092d319315  libstdc++-v3/include/std/unordered_set
  a05198d154ee4b152da6854fa6433ee7  libstdc++-v3/include/std/utility
  e0096e013b19127692d1ed454892142d  libstdc++-v3/include/std/valarray
! 6dfedd974a960950b7ce23a1bbb999f2  libstdc++-v3/include/std/variant
  0d0a38cd1a88e2528f889586625f8305  libstdc++-v3/include/std/vector
  1c10633087657ad7a31f6c3569a3ebe0  libstdc++-v3/include/std/version
  e0951486c7e6c5afe3105fe5004effb9  libstdc++-v3/include/tr1/array
*************** e93a6c516a51d1e04b8233a897e3588f  libstd
*** 140057,140066 ****
  925b44e74cdf29e0bf443716d788d8bc  libstdc++-v3/libsupc++/eh_type.cc
  6f2ba32375c733fff701a0cd7d8e0e55  libstdc++-v3/libsupc++/eh_unex_handler.cc
  a703e327cd408b5e3200f542691f8488  libstdc++-v3/libsupc++/enum_type_info.cc
! 8bee55a77fb2931427f5af3616897422  libstdc++-v3/libsupc++/exception
  ac12653e60f42cbe8bc530f83c4d81a1  libstdc++-v3/libsupc++/exception.h
  8cb7ef9933695804f855459d4b0661ec  libstdc++-v3/libsupc++/exception_defines.h
! d72f23ed5ec561a3ca0754d9a464796f  libstdc++-v3/libsupc++/exception_ptr.h
  031b50d84f4f67234d2b49e49a80206a  libstdc++-v3/libsupc++/function_type_info.cc
  f098af4b3136953260aa1e563ef265d3  libstdc++-v3/libsupc++/fundamental_type_info.cc
  489d888cfad1d3ad98fc33d277619862  libstdc++-v3/libsupc++/guard.cc
--- 140198,140207 ----
  925b44e74cdf29e0bf443716d788d8bc  libstdc++-v3/libsupc++/eh_type.cc
  6f2ba32375c733fff701a0cd7d8e0e55  libstdc++-v3/libsupc++/eh_unex_handler.cc
  a703e327cd408b5e3200f542691f8488  libstdc++-v3/libsupc++/enum_type_info.cc
! b04deaf31e4823877dca0314eea59383  libstdc++-v3/libsupc++/exception
  ac12653e60f42cbe8bc530f83c4d81a1  libstdc++-v3/libsupc++/exception.h
  8cb7ef9933695804f855459d4b0661ec  libstdc++-v3/libsupc++/exception_defines.h
! 7b234712132acc640af14839be26227f  libstdc++-v3/libsupc++/exception_ptr.h
  031b50d84f4f67234d2b49e49a80206a  libstdc++-v3/libsupc++/function_type_info.cc
  f098af4b3136953260aa1e563ef265d3  libstdc++-v3/libsupc++/fundamental_type_info.cc
  489d888cfad1d3ad98fc33d277619862  libstdc++-v3/libsupc++/guard.cc
*************** f501660a6c6b00aafeaef03458ae53a5  libstd
*** 140119,140124 ****
--- 140260,140266 ----
  85378fa65bc3dc46ffe255374b304560  libstdc++-v3/scripts/gen_includers.pl
  f1a84a17158780aaa37927191db4463a  libstdc++-v3/scripts/gen_includers2.pl
  5b2236b4942c92df14f93a36d7534a9d  libstdc++-v3/scripts/gen_text_encoding_data.py
+ ce9c433d52b0271473d79d5c56c66148  libstdc++-v3/scripts/gen_windows_zones_map.py
  c3455b8d87dcefd65c7fdcd24e4ce3a4  libstdc++-v3/scripts/make_exports.pl
  80b6ff44b325c6b6d113435d8eea4b76  libstdc++-v3/scripts/make_graph.py
  8cf4072c94a1116e1e32b203ca58de59  libstdc++-v3/scripts/run_doxygen
*************** a70eb0f686f8378eddb86ac7513b4c9a  libstd
*** 140235,140248 ****
  94b3ab191e8fe566a951ac2b4f081c40  libstdc++-v3/src/c++20/format.cc
  939eb3ac7ce3c32a8b2aac493f053893  libstdc++-v3/src/c++20/sstream-inst.cc
  e9e89f4578e59d252e4caaf0b63d6dfb  libstdc++-v3/src/c++20/tzdata.zi
! b01c0cfbca4e753f78f74ab41ce26267  libstdc++-v3/src/c++20/tzdb.cc
  3665d657cc35c7afb8b5cc7bae0ef058  libstdc++-v3/src/c++23/Makefile.am
  d85f3a53465585d54b96880e79456c79  libstdc++-v3/src/c++23/Makefile.in
  3c95970ad4fd23117b63a99dd3241ebe  libstdc++-v3/src/c++23/libstdc++.modules.json.in
  ea41b659ccf9f3e1850802e2fddaba52  libstdc++-v3/src/c++23/print.cc
  15f6b28b71ad24bc5b6d33c21048e59a  libstdc++-v3/src/c++23/stacktrace.cc
  c319163994652e23066095eded5869f0  libstdc++-v3/src/c++23/std-clib.cc.in
! a761c30b0771b8f75829cb162c1f126d  libstdc++-v3/src/c++23/std.cc.in
  ef2786c62e1aa27a5405d7bf70e5212c  libstdc++-v3/src/c++23/std.compat.cc.in
  97527213996a1ca6a0910b1ab5f6c3a3  libstdc++-v3/src/c++26/Makefile.am
  5dd6b2acd5d63f897ba1545bb9a07d25  libstdc++-v3/src/c++26/Makefile.in
--- 140377,140391 ----
  94b3ab191e8fe566a951ac2b4f081c40  libstdc++-v3/src/c++20/format.cc
  939eb3ac7ce3c32a8b2aac493f053893  libstdc++-v3/src/c++20/sstream-inst.cc
  e9e89f4578e59d252e4caaf0b63d6dfb  libstdc++-v3/src/c++20/tzdata.zi
! e7b5fbbd5ee61bf8fbf8702b095de326  libstdc++-v3/src/c++20/tzdb.cc
! ac7b7a080d5f7aa8fe6a26188631fc18  libstdc++-v3/src/c++20/windows_zones-map.h
  3665d657cc35c7afb8b5cc7bae0ef058  libstdc++-v3/src/c++23/Makefile.am
  d85f3a53465585d54b96880e79456c79  libstdc++-v3/src/c++23/Makefile.in
  3c95970ad4fd23117b63a99dd3241ebe  libstdc++-v3/src/c++23/libstdc++.modules.json.in
  ea41b659ccf9f3e1850802e2fddaba52  libstdc++-v3/src/c++23/print.cc
  15f6b28b71ad24bc5b6d33c21048e59a  libstdc++-v3/src/c++23/stacktrace.cc
  c319163994652e23066095eded5869f0  libstdc++-v3/src/c++23/std-clib.cc.in
! 2e78d1ac3b51f6d3493107777e7f86bd  libstdc++-v3/src/c++23/std.cc.in
  ef2786c62e1aa27a5405d7bf70e5212c  libstdc++-v3/src/c++23/std.compat.cc.in
  97527213996a1ca6a0910b1ab5f6c3a3  libstdc++-v3/src/c++26/Makefile.am
  5dd6b2acd5d63f897ba1545bb9a07d25  libstdc++-v3/src/c++26/Makefile.in
*************** bb688b1bf0bbfcf18f17ecc4aceccfa1  libstd
*** 140383,140388 ****
--- 140526,140532 ----
  078cee4676bbf4e43b6d9434dcbaa62f  libstdc++-v3/testsuite/18_support/cxa_vec.cc
  37fe08e5125d8624f4aa4900e2c144a8  libstdc++-v3/testsuite/18_support/destroying_delete.cc
  198455a37447986dc59d680adafc35c8  libstdc++-v3/testsuite/18_support/exception/38732.cc
+ 030042beaea3179d8a037d63368fc745  libstdc++-v3/testsuite/18_support/exception/version.cc
  a50173907daec62db9e77f26b56a12b8  libstdc++-v3/testsuite/18_support/exception/what.cc
  8a3e4fc86620d59634749ffecd317237  libstdc++-v3/testsuite/18_support/exception_ptr/103630.cc
  b68d3b924d0ec6839ff81111c3d60e3e  libstdc++-v3/testsuite/18_support/exception_ptr/40296.cc
*************** bf71539b18800143c3bbaf959c006626  libstd
*** 141016,141021 ****
--- 141160,141166 ----
  a5b9268557bb699fec69720dc328e165  libstdc++-v3/testsuite/20_util/hash/chi2_q_numeric_pattern_set.cc
  b71085113a5b3b725833cb368fdae198  libstdc++-v3/testsuite/20_util/hash/chi2_q_uniform_random.cc
  ee255807f9fef2336c1319c3cb631071  libstdc++-v3/testsuite/20_util/hash/chi2_quality.h
+ 79f1efa4269c4f1e7063de9fdf669464  libstdc++-v3/testsuite/20_util/hash/int128.cc
  3e832194def228533295260d4b4f20dd  libstdc++-v3/testsuite/20_util/hash/nullptr.cc
  a4bc065e63d289954387f000646d1a3b  libstdc++-v3/testsuite/20_util/hash/operators/size_t.cc
  16f4d1451fe145bf8975b8bdd80a9228  libstdc++-v3/testsuite/20_util/hash/quality.cc
*************** a5c3abf1e6cc95f7f1635ecc08263bbe  libstd
*** 141369,141374 ****
--- 141514,141520 ----
  8a2e44264b94c1250f3a532324560ebd  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc
  b3fa943cb67d0145fd57db468fa9d346  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
  8f0db74dad9a1b305718ac6e066eedf2  libstdc++-v3/testsuite/20_util/make_signed/requirements/uninstantiated.cc
+ e46d298e41cbeae2223f6f90e323bdf3  libstdc++-v3/testsuite/20_util/make_unsigned/int128.cc
  b2ab6d5db51568abb1f5d8a75e7f5008  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/alias_decl.cc
  913d1fd5068a4efba9d4e5b789a89c6a  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/explicit_instantiation.cc
  cd4b7d564202f9aae28ba0594d69f041  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc
*************** a52bfedb1a381a0202dbb55c703013a0  libstd
*** 141770,141775 ****
--- 141916,141922 ----
  980e926159cebba5708f141afaad365f  libstdc++-v3/testsuite/20_util/specialized_algorithms/construct_at/95788.cc
  770455453020c0d458916a59bcbdb05c  libstdc++-v3/testsuite/20_util/specialized_algorithms/construct_at/array.cc
  42055bc3e8554f98c1584cd0a75a0ed7  libstdc++-v3/testsuite/20_util/specialized_algorithms/construct_at/array_neg.cc
+ 9ec7d525dace31426c9a6caa2763dc3b  libstdc++-v3/testsuite/20_util/specialized_algorithms/destroy/121024.cc
  7c6df795389d4f9adf111d4d879fa257  libstdc++-v3/testsuite/20_util/specialized_algorithms/destroy/constrained.cc
  0c389150c2f95a24f62d342469a7c67e  libstdc++-v3/testsuite/20_util/specialized_algorithms/feature_test_macro.cc
  e7f673de33f454714074c0cd02339d78  libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/1.cc
*************** daf51b0339605928764531dbb5213284  libstd
*** 143292,143298 ****
  8e35c81d3f936de0b4dae26e0b5307d5  libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc
  f50b344887169898d9d2c249df76fb75  libstdc++-v3/testsuite/23_containers/array/tuple_interface/constexpr_get.cc
  e5b9d428a771e75804704a3cd5fc6d0e  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get.cc
! 7d304e8c7ffe137a19e9736998fe7394  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc
  9d924fe33929bbc2f7a38113d58064f1  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
  f0143765eb42f5ac1f3cc10a8877e4fe  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_cpp14.cc
  221fcf16a916cb4860cf59422110ec47  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc
--- 143439,143445 ----
  8e35c81d3f936de0b4dae26e0b5307d5  libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc
  f50b344887169898d9d2c249df76fb75  libstdc++-v3/testsuite/23_containers/array/tuple_interface/constexpr_get.cc
  e5b9d428a771e75804704a3cd5fc6d0e  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get.cc
! 66e9af016e9e58da21c209d8b8cb1dcb  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc
  9d924fe33929bbc2f7a38113d58064f1  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
  f0143765eb42f5ac1f3cc10a8877e4fe  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_cpp14.cc
  221fcf16a916cb4860cf59422110ec47  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc
*************** b310b77a8acb8e1c9644c670d6ee708d  libstd
*** 143548,143553 ****
--- 143695,143715 ----
  da421f8c7821a0a6d7eab3d8001476e3  libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
  43de62af8d3c543b80596072975c9266  libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
  50bc010406caef63380764c8105e79c8  libstdc++-v3/testsuite/23_containers/headers/vector/synopsis.cc
+ c3b72820d263829b8713079673adf2bf  libstdc++-v3/testsuite/23_containers/inplace_vector/access/capacity.cc
+ 7d9575b2c875f7cc36857669232abf8e  libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem.cc
+ fdd8743e959f7d6cdaef16e857544176  libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem_neg.cc
+ e43e9eb523468bb62b4f7889ad64b811  libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc
+ 108a7ab00c7a6d8ad8a5db53efa1dca3  libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc
+ 38e5f39346a05e51ec2a0e4cdf2586e4  libstdc++-v3/testsuite/23_containers/inplace_vector/cons/throws.cc
+ 273424e32898a9d53a7f2ac8a6fc355b  libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc
+ 99d153ffeaacc6a311788e24a42c8f60  libstdc++-v3/testsuite/23_containers/inplace_vector/erasure.cc
+ 8660cebd944df0751ee6e65f17d8a9d5  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/assign.cc
+ 5aec8512568ce2f7543d9c77e6605c2c  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase.cc
+ ac49fb17014b5bfa7544caf2bff9cc94  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc
+ 8c4c89cbb2ba35feda988027855433ad  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc
+ f134ee48b3f80955503a35907623395b  libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc
+ 5518dafa57195a13905e6083cf064ace  libstdc++-v3/testsuite/23_containers/inplace_vector/relops.cc
+ 2b73622f47b87d526a0d4cbbd45bd738  libstdc++-v3/testsuite/23_containers/inplace_vector/version.cc
  094ef547af977ed770df7574cebf8f92  libstdc++-v3/testsuite/23_containers/list/14340.cc
  3b20e1014b3833ee8e7934fb97c31e84  libstdc++-v3/testsuite/23_containers/list/18604.cc
  0c57216d95b8e011d998b31199a3f48e  libstdc++-v3/testsuite/23_containers/list/23781_neg.cc
*************** f5bb9f936365225b61020ea9149ba6fa  libstd
*** 143808,143825 ****
  e9e5cce5f41b3fcb25e00e9b6edb9a83  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
  d4de13f0203d7d66539b205b64e6fdf5  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc
  74773d6a3d965e479de89f3fe5d7058d  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape.cc
! ca85f8153b8449037105695769937af0  libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc
  669e44182af41d221acecffd45681dc9  libstdc++-v3/testsuite/23_containers/mdspan/extents/extents_mismatch_neg.cc
- 29a8aedf9628b822b9dd8de114cd3bb2  libstdc++-v3/testsuite/23_containers/mdspan/extents/int_like.h
  c1ed4da78be7e752025a693bb0564242  libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
  d68af45366016aad6a270abcb0712c53  libstdc++-v3/testsuite/23_containers/mdspan/layout_like.h
  09f60c1da783ed561b487e9441ae6882  libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc
  bfd42a535aa33a3b5315bf669715ffb4  libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc
  ea1a2f61fac46b6b55b9ff2c52289540  libstdc++-v3/testsuite/23_containers/mdspan/layouts/debug/out_of_bounds_neg.cc
  dd7692786bb4cc01e8e54a11e77eef69  libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc
! b8b98f6231b941e8ade7b6f8b50941cb  libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc
! 3456466cd742d11c2e015ca5497a0206  libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc
! 3d2a41c26e0a9f910c919307ccbb76f8  libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
  4b1a50b4d361b155b60027f1bdc566e7  libstdc++-v3/testsuite/23_containers/mdspan/out_of_bounds_neg.cc
  0c4d322f39233942c4ee2e211a2ea456  libstdc++-v3/testsuite/23_containers/mdspan/version.cc
  351e436ffeeb8e47804c6992b75a81cb  libstdc++-v3/testsuite/23_containers/multimap/14340.cc
--- 143970,143987 ----
  e9e5cce5f41b3fcb25e00e9b6edb9a83  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
  d4de13f0203d7d66539b205b64e6fdf5  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc
  74773d6a3d965e479de89f3fe5d7058d  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape.cc
! 56a0f5d5edaad1117cc988beafc16d5d  libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc
  669e44182af41d221acecffd45681dc9  libstdc++-v3/testsuite/23_containers/mdspan/extents/extents_mismatch_neg.cc
  c1ed4da78be7e752025a693bb0564242  libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
+ e941ac1789059834b40085a779a24d2e  libstdc++-v3/testsuite/23_containers/mdspan/int_like.h
  d68af45366016aad6a270abcb0712c53  libstdc++-v3/testsuite/23_containers/mdspan/layout_like.h
  09f60c1da783ed561b487e9441ae6882  libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc
  bfd42a535aa33a3b5315bf669715ffb4  libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc
  ea1a2f61fac46b6b55b9ff2c52289540  libstdc++-v3/testsuite/23_containers/mdspan/layouts/debug/out_of_bounds_neg.cc
  dd7692786bb4cc01e8e54a11e77eef69  libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc
! a65c4b5056c3c06dc115e0ce959f26b4  libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc
! 3f96813b92ac712ab8210f7eb24e7158  libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc
! d8070ef63040f007c8035c819313f81e  libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
  4b1a50b4d361b155b60027f1bdc566e7  libstdc++-v3/testsuite/23_containers/mdspan/out_of_bounds_neg.cc
  0c4d322f39233942c4ee2e211a2ea456  libstdc++-v3/testsuite/23_containers/mdspan/version.cc
  351e436ffeeb8e47804c6992b75a81cb  libstdc++-v3/testsuite/23_containers/multimap/14340.cc
*************** e3fc455f0da2c9dd1ad4804bfffd782e  libstd
*** 145101,145107 ****
  c95baee85dd7d9b64bf4a239160956b6  libstdc++-v3/testsuite/25_algorithms/copy/debug/2_neg.cc
  44f232001120db9ec0874d925b55d86e  libstdc++-v3/testsuite/25_algorithms/copy/debug/95289.cc
  1728c5de79b2df2142b437d3408a169b  libstdc++-v3/testsuite/25_algorithms/copy/debug/99402.cc
! 312b0a8d0adf5e25215b30c63e33437c  libstdc++-v3/testsuite/25_algorithms/copy/debug/constexpr_neg.cc
  a4e3b919e921272cb082f7fa810f39d2  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc
  9311ce56aa2ba737a075f7becee4db85  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/2.cc
  4fc327a23c964ded6850bbdf5377e284  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/31.cc
--- 145263,145269 ----
  c95baee85dd7d9b64bf4a239160956b6  libstdc++-v3/testsuite/25_algorithms/copy/debug/2_neg.cc
  44f232001120db9ec0874d925b55d86e  libstdc++-v3/testsuite/25_algorithms/copy/debug/95289.cc
  1728c5de79b2df2142b437d3408a169b  libstdc++-v3/testsuite/25_algorithms/copy/debug/99402.cc
! 2b47e7d317add9d4038689233734c820  libstdc++-v3/testsuite/25_algorithms/copy/debug/constexpr_neg.cc
  a4e3b919e921272cb082f7fa810f39d2  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc
  9311ce56aa2ba737a075f7becee4db85  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/2.cc
  4fc327a23c964ded6850bbdf5377e284  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/31.cc
*************** f064fbaaed881afaea8fd0d89312ecbe  libstd
*** 145132,145138 ****
  b01e1fb055fcf7754dfb0d474b586837  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/1_neg.cc
  03cd1cfafb10ef1fac75aec1c3f39a51  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/2_neg.cc
  89c24fe107f353f95333338fed0811b4  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/3_neg.cc
! da329c7e13089abeefb5fdd4b4408e9c  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/constexpr_neg.cc
  da1fb78d5a3cd469ddf537052865be96  libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc
  c3a418b941bf4ba469bfc782f462984a  libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/2.cc
  86f21f0ba143930b33bc5289d5fc7fb8  libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc
--- 145294,145300 ----
  b01e1fb055fcf7754dfb0d474b586837  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/1_neg.cc
  03cd1cfafb10ef1fac75aec1c3f39a51  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/2_neg.cc
  89c24fe107f353f95333338fed0811b4  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/3_neg.cc
! 94b3d2d0eccc5b0cea03022ca8f1c557  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/constexpr_neg.cc
  da1fb78d5a3cd469ddf537052865be96  libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc
  c3a418b941bf4ba469bfc782f462984a  libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/2.cc
  86f21f0ba143930b33bc5289d5fc7fb8  libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc
*************** b9edd3d2edd25a9d6a302db6eb5761ca  libstd
*** 145195,145201 ****
  ffd7a7df4823e29d0033046c73daa455  libstdc++-v3/testsuite/25_algorithms/equal/debug/1_neg.cc
  92409a53b6c54f0bdde64aff45912cc2  libstdc++-v3/testsuite/25_algorithms/equal/debug/2_neg.cc
  cd3bdedacd48390778b99a5866b5cb9d  libstdc++-v3/testsuite/25_algorithms/equal/debug/3_neg.cc
! 18e6b6418786d105ba163fab8d5bdb48  libstdc++-v3/testsuite/25_algorithms/equal/debug/constexpr_neg.cc
  4ba00fc010fecaa320d3d271548ed7b0  libstdc++-v3/testsuite/25_algorithms/equal/deque_iterators/1.cc
  c0b18a7b4d710c241043a8c5994fa56b  libstdc++-v3/testsuite/25_algorithms/equal/lwg3560.cc
  11f65abe712154c4a7550c755b00eb6d  libstdc++-v3/testsuite/25_algorithms/equal/no_operator_ne.cc
--- 145357,145363 ----
  ffd7a7df4823e29d0033046c73daa455  libstdc++-v3/testsuite/25_algorithms/equal/debug/1_neg.cc
  92409a53b6c54f0bdde64aff45912cc2  libstdc++-v3/testsuite/25_algorithms/equal/debug/2_neg.cc
  cd3bdedacd48390778b99a5866b5cb9d  libstdc++-v3/testsuite/25_algorithms/equal/debug/3_neg.cc
! 92f58bffd6576cec74cd799f71f386e2  libstdc++-v3/testsuite/25_algorithms/equal/debug/constexpr_neg.cc
  4ba00fc010fecaa320d3d271548ed7b0  libstdc++-v3/testsuite/25_algorithms/equal/deque_iterators/1.cc
  c0b18a7b4d710c241043a8c5994fa56b  libstdc++-v3/testsuite/25_algorithms/equal/lwg3560.cc
  11f65abe712154c4a7550c755b00eb6d  libstdc++-v3/testsuite/25_algorithms/equal/no_operator_ne.cc
*************** a1a0d0bd8e37216ee56028d29b4cdcae  libstd
*** 145397,145405 ****
  5a54a40483106001c14cbc80fbdd31e4  libstdc++-v3/testsuite/25_algorithms/lower_bound/check_type.cc
  22fb2446437260e88f6c2bcb87bdd131  libstdc++-v3/testsuite/25_algorithms/lower_bound/constexpr.cc
  c131b0193a2657a857427e8f49e3ee5e  libstdc++-v3/testsuite/25_algorithms/lower_bound/constrained.cc
! bcf5680c95ceef844ac5d66399539227  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc
! 8f1c8a8719c50c8926e5e9b390669a13  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc
! 1ff4771c38e67fd44477545bfe075d0c  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc
  8a251d0a19092522b92c2b6dd7217743  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/irreflexive.cc
  8ad73578772eee2e4e2755c797c3c1f5  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc
  a3413995c7159da73691af57db16fe9a  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc
--- 145559,145567 ----
  5a54a40483106001c14cbc80fbdd31e4  libstdc++-v3/testsuite/25_algorithms/lower_bound/check_type.cc
  22fb2446437260e88f6c2bcb87bdd131  libstdc++-v3/testsuite/25_algorithms/lower_bound/constexpr.cc
  c131b0193a2657a857427e8f49e3ee5e  libstdc++-v3/testsuite/25_algorithms/lower_bound/constrained.cc
! 0ce26d01f8c3f0120c4a6e07bcc7d219  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc
! d28ac13b29ead434481e11cd471c63a1  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc
! d5300e7c8172a7932cd45bb9d7a7e521  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc
  8a251d0a19092522b92c2b6dd7217743  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/irreflexive.cc
  8ad73578772eee2e4e2755c797c3c1f5  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc
  a3413995c7159da73691af57db16fe9a  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc
*************** bccc2620741d0bb50ee990ac03515498  libstd
*** 145855,145863 ****
  72c9d50858f3993dfc800f491dd8b066  libstdc++-v3/testsuite/25_algorithms/upper_bound/check_type.cc
  3e4a079b06af9f63af13f9f3ce546082  libstdc++-v3/testsuite/25_algorithms/upper_bound/constexpr.cc
  94cc8d2d0b4ba6cba93b35231354a356  libstdc++-v3/testsuite/25_algorithms/upper_bound/constrained.cc
! 39e475c35b340ee8830947c24f76bff0  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc
! a579455423423ccb7baaa32370bc2bb0  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc
! 68f847146169be4cedba81c5a4dd71ee  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc
  7fdc36e61d06b60697b0b788be6f058b  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc
  95d91e9b4b81c2bc2fec9edaa422c838  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc
  dc395eb90938c5ff6f722f1541fb31d4  libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc
--- 146017,146025 ----
  72c9d50858f3993dfc800f491dd8b066  libstdc++-v3/testsuite/25_algorithms/upper_bound/check_type.cc
  3e4a079b06af9f63af13f9f3ce546082  libstdc++-v3/testsuite/25_algorithms/upper_bound/constexpr.cc
  94cc8d2d0b4ba6cba93b35231354a356  libstdc++-v3/testsuite/25_algorithms/upper_bound/constrained.cc
! 1677faf24e45f1cfaab9844362bc84e4  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc
! 0e5d0a8c72996dca8a61308aa17f1a41  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc
! 233d98c76b816824e07fec5bcdb0fc1c  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc
  7fdc36e61d06b60697b0b788be6f058b  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc
  95d91e9b4b81c2bc2fec9edaa422c838  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc
  dc395eb90938c5ff6f722f1541fb31d4  libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc
*************** c9e50a267318077fe14c285bb6686b45  libstd
*** 148517,148526 ****
  26f583cb2c7a7e61048bc2e0750314c7  libstdc++-v3/testsuite/experimental/memory/observer_ptr/assignment/assign.cc
  43c685daab2b6cb90a4a25c0e0c489df  libstdc++-v3/testsuite/experimental/memory/observer_ptr/cons/cons.cc
  d53d603990e7420ae6db56c7d66a0863  libstdc++-v3/testsuite/experimental/memory/observer_ptr/hash/hash.cc
! 13c7a8d487aa43d561ddec86b4425c32  libstdc++-v3/testsuite/experimental/memory/observer_ptr/make_observer.cc
! 28134e8e912cc6a0113de1212efcffec  libstdc++-v3/testsuite/experimental/memory/observer_ptr/relops/relops.cc
  13291e6d9fa773352ddc3b82d0c0219f  libstdc++-v3/testsuite/experimental/memory/observer_ptr/requirements.cc
! c8ce560fa288b996cb69aed32ab38a38  libstdc++-v3/testsuite/experimental/memory/observer_ptr/swap/swap.cc
  ee695df08ae6857a7d6483969a6bec26  libstdc++-v3/testsuite/experimental/memory/observer_ptr/typedefs.cc
  6c8b9e33f9481340a6ec6bf3244b5c84  libstdc++-v3/testsuite/experimental/memory/shared_ptr/assign/assign.cc
  1511163326cbf48845154bdc980c8ce9  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cast/cast.cc
--- 148679,148688 ----
  26f583cb2c7a7e61048bc2e0750314c7  libstdc++-v3/testsuite/experimental/memory/observer_ptr/assignment/assign.cc
  43c685daab2b6cb90a4a25c0e0c489df  libstdc++-v3/testsuite/experimental/memory/observer_ptr/cons/cons.cc
  d53d603990e7420ae6db56c7d66a0863  libstdc++-v3/testsuite/experimental/memory/observer_ptr/hash/hash.cc
! 4eecb3f62d189a60db21eedc0aca5cc4  libstdc++-v3/testsuite/experimental/memory/observer_ptr/make_observer.cc
! 80952bf8f2cc6a279c2cdb7aff0ce59c  libstdc++-v3/testsuite/experimental/memory/observer_ptr/relops/relops.cc
  13291e6d9fa773352ddc3b82d0c0219f  libstdc++-v3/testsuite/experimental/memory/observer_ptr/requirements.cc
! 8e499ea4f82e243f43762789be6ac075  libstdc++-v3/testsuite/experimental/memory/observer_ptr/swap/swap.cc
  ee695df08ae6857a7d6483969a6bec26  libstdc++-v3/testsuite/experimental/memory/observer_ptr/typedefs.cc
  6c8b9e33f9481340a6ec6bf3244b5c84  libstdc++-v3/testsuite/experimental/memory/shared_ptr/assign/assign.cc
  1511163326cbf48845154bdc980c8ce9  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cast/cast.cc
*************** d00c0a73fcb76116eb1807c0bf0bd1aa  libstd
*** 149128,149134 ****
  53e931d667b5351e2c83d9753880deca  libstdc++-v3/testsuite/ext/unicode/charset_alias_match.cc
  21033b8a9d07ff00d54806ae81ae7b35  libstdc++-v3/testsuite/ext/unicode/grapheme_view.cc
  49e64e150a28ed6d9c582912bd617a78  libstdc++-v3/testsuite/ext/unicode/properties.cc
! eb379d71e3596cc2e06b1156ee0ca92e  libstdc++-v3/testsuite/ext/unicode/view.cc
  5c8f44c5c7749eb627a3594790fcb046  libstdc++-v3/testsuite/ext/verify_neg.cc
  884670ca6489dae936f917510c2e840b  libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc
  b313e3bec63f292be9c30fcc7790f481  libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc
--- 149290,149296 ----
  53e931d667b5351e2c83d9753880deca  libstdc++-v3/testsuite/ext/unicode/charset_alias_match.cc
  21033b8a9d07ff00d54806ae81ae7b35  libstdc++-v3/testsuite/ext/unicode/grapheme_view.cc
  49e64e150a28ed6d9c582912bd617a78  libstdc++-v3/testsuite/ext/unicode/properties.cc
! d52ef3fc9b79d1e4f3fe51de0d757203  libstdc++-v3/testsuite/ext/unicode/view.cc
  5c8f44c5c7749eb627a3594790fcb046  libstdc++-v3/testsuite/ext/verify_neg.cc
  884670ca6489dae936f917510c2e840b  libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc
  b313e3bec63f292be9c30fcc7790f481  libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc
*************** d6f43aa2aa28ccf6f02960749550aac6  libstd
*** 149529,149537 ****
  3f44f7941efe01ca6d9866ad6a152776  libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
  40e31845569daf0829a17a44a8ee56a0  libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc
  98b483f4295fbf685f4fe582088c3473  libstdc++-v3/testsuite/std/ranges/adaptors/filter.cc
! a4f9ebbafc46d31afc253713a37fc230  libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
! 037c6e0dbd2e478a74843d86dddc6737  libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc
! b1323cdec1760609fd69bd805ad3e54d  libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc
  54271889e88b8f08f76cff98d9dfb68b  libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split_neg.cc
  52a7e19aa4c7f3a80c76630b6c935fd3  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3286.cc
  09fc4e2885ef672deb76aa23b85e9bc0  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3313_neg.cc
--- 149691,149699 ----
  3f44f7941efe01ca6d9866ad6a152776  libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
  40e31845569daf0829a17a44a8ee56a0  libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc
  98b483f4295fbf685f4fe582088c3473  libstdc++-v3/testsuite/std/ranges/adaptors/filter.cc
! 6ce4d9d01be4defd04026414dbac0d5b  libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
! 326917eee6123d6a19d60b706ad52413  libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc
! 284143a02c085fd30e15e55c66cfde20  libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc
  54271889e88b8f08f76cff98d9dfb68b  libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split_neg.cc
  52a7e19aa4c7f3a80c76630b6c935fd3  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3286.cc
  09fc4e2885ef672deb76aa23b85e9bc0  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3313_neg.cc
*************** e815444177567ac116972b30b45549c6  libstd
*** 149635,149641 ****
  ac023f20cb115a4c9e7919a4393475de  libstdc++-v3/testsuite/std/time/make24/1.cc
  44a646990ce554f7ce04aab06249b80c  libstdc++-v3/testsuite/std/time/month/1.cc
  b7a5373ed0797aa495f69436f1939726  libstdc++-v3/testsuite/std/time/month/2.cc
! a95c6365a674d691a5049d10b94bd3f0  libstdc++-v3/testsuite/std/time/month/io.cc
  0bd2c98bac6c877d6d3e4c0c618fe5f4  libstdc++-v3/testsuite/std/time/month_day/1.cc
  bb39685baac5f09d22f4582faf8cb04f  libstdc++-v3/testsuite/std/time/month_day/io.cc
  8fbe2e4183732ea109e43f11310099f7  libstdc++-v3/testsuite/std/time/month_day_last/1.cc
--- 149797,149803 ----
  ac023f20cb115a4c9e7919a4393475de  libstdc++-v3/testsuite/std/time/make24/1.cc
  44a646990ce554f7ce04aab06249b80c  libstdc++-v3/testsuite/std/time/month/1.cc
  b7a5373ed0797aa495f69436f1939726  libstdc++-v3/testsuite/std/time/month/2.cc
! 11a34b6fd3c32ab71d499904fa3aece4  libstdc++-v3/testsuite/std/time/month/io.cc
  0bd2c98bac6c877d6d3e4c0c618fe5f4  libstdc++-v3/testsuite/std/time/month_day/1.cc
  bb39685baac5f09d22f4582faf8cb04f  libstdc++-v3/testsuite/std/time/month_day/io.cc
  8fbe2e4183732ea109e43f11310099f7  libstdc++-v3/testsuite/std/time/month_day_last/1.cc
*************** fbaa899641d17201d9f891486537af1b  libstd
*** 149661,149667 ****
  3f7dc336d0ee3feaddb94ae16964cbf1  libstdc++-v3/testsuite/std/time/tzdb_list/requirements.cc
  8b77834100b27cd3083bd80ddeb5db15  libstdc++-v3/testsuite/std/time/weekday/1.cc
  d6cb5f0804c9bd14e047294d47decf33  libstdc++-v3/testsuite/std/time/weekday/2.cc
! 28074137f005d49856c15e773a2debf7  libstdc++-v3/testsuite/std/time/weekday/io.cc
  e725171cf2c18ad2bb62cab49a9ff309  libstdc++-v3/testsuite/std/time/weekday_indexed/1.cc
  f1130e870851ec40302fbaceeb797501  libstdc++-v3/testsuite/std/time/weekday_indexed/io.cc
  38acf4a6e21a083db8a6dbee1a75ad7f  libstdc++-v3/testsuite/std/time/weekday_last/1.cc
--- 149823,149829 ----
  3f7dc336d0ee3feaddb94ae16964cbf1  libstdc++-v3/testsuite/std/time/tzdb_list/requirements.cc
  8b77834100b27cd3083bd80ddeb5db15  libstdc++-v3/testsuite/std/time/weekday/1.cc
  d6cb5f0804c9bd14e047294d47decf33  libstdc++-v3/testsuite/std/time/weekday/2.cc
! 84a30249875432915027bc4a342388dc  libstdc++-v3/testsuite/std/time/weekday/io.cc
  e725171cf2c18ad2bb62cab49a9ff309  libstdc++-v3/testsuite/std/time/weekday_indexed/1.cc
  f1130e870851ec40302fbaceeb797501  libstdc++-v3/testsuite/std/time/weekday_indexed/io.cc
  38acf4a6e21a083db8a6dbee1a75ad7f  libstdc++-v3/testsuite/std/time/weekday_last/1.cc
*************** aa52b04bf095d0226a1314474cb5c3c4  libstd
*** 150405,150411 ****
  3d3f95e4c126c7714834db5c046f0867  libstdc++-v3/testsuite/util/testsuite_hooks.cc
  c08d7419962b291852dd827d7d78f678  libstdc++-v3/testsuite/util/testsuite_hooks.h
  2cc9d485ece15882c52d8b6a9c1094e8  libstdc++-v3/testsuite/util/testsuite_io.h
! 60fa54c9757059b5e4745847d8b1c310  libstdc++-v3/testsuite/util/testsuite_iterators.h
  bb471f730bbdca73a1658e3b1e4295c0  libstdc++-v3/testsuite/util/testsuite_new_operators.h
  cb452b2ea9afe9f303a9f003d3d6412b  libstdc++-v3/testsuite/util/testsuite_performance.h
  9e7f7529d1423cbb841bf18d5251891d  libstdc++-v3/testsuite/util/testsuite_random.h
--- 150567,150573 ----
  3d3f95e4c126c7714834db5c046f0867  libstdc++-v3/testsuite/util/testsuite_hooks.cc
  c08d7419962b291852dd827d7d78f678  libstdc++-v3/testsuite/util/testsuite_hooks.h
  2cc9d485ece15882c52d8b6a9c1094e8  libstdc++-v3/testsuite/util/testsuite_io.h
! 6ab737f49ec07ab67b45fe38f78b1f8d  libstdc++-v3/testsuite/util/testsuite_iterators.h
  bb471f730bbdca73a1658e3b1e4295c0  libstdc++-v3/testsuite/util/testsuite_new_operators.h
  cb452b2ea9afe9f303a9f003d3d6412b  libstdc++-v3/testsuite/util/testsuite_performance.h
  9e7f7529d1423cbb841bf18d5251891d  libstdc++-v3/testsuite/util/testsuite_random.h
diff -Nrcpad gcc-16-20250713/contrib/ChangeLog gcc-16-20250720/contrib/ChangeLog
*** gcc-16-20250713/contrib/ChangeLog	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/contrib/ChangeLog	Sun Jul 20 22:32:07 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-07-16  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* gcc.doxy (INPUT): Add directory "gcc/text-art".
+ 
  2025-07-11  Richard Biener  <rguenther@suse.de>
  
  	* gcc-changelog/git_update_version.py: Stop updating gcc-12
diff -Nrcpad gcc-16-20250713/contrib/gcc.doxy gcc-16-20250720/contrib/gcc.doxy
*** gcc-16-20250713/contrib/gcc.doxy	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/contrib/gcc.doxy	Sun Jul 20 22:32:07 2025
*************** WARN_LOGFILE           =
*** 478,484 ****
  # directories like "/usr/src/myproject". Separate the files or directories 
  # with spaces.
  
! INPUT                  = gcc gcc/analyzer
  
  # This tag can be used to specify the character encoding of the source files that 
  # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default 
--- 478,484 ----
  # directories like "/usr/src/myproject". Separate the files or directories 
  # with spaces.
  
! INPUT                  = gcc gcc/analyzer gcc/text-art
  
  # This tag can be used to specify the character encoding of the source files that 
  # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default 
diff -Nrcpad gcc-16-20250713/gcc/ChangeLog gcc-16-20250720/gcc/ChangeLog
*** gcc-16-20250713/gcc/ChangeLog	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/gcc/ChangeLog	Sun Jul 20 22:32:07 2025
***************
*** 1,3 ****
--- 1,925 ----
+ 2025-07-19  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	PR target/121124
+ 	* config/pru/pru-pragma.cc (pru_pragma_ctable_entry): Handle the
+ 	ctable base address as signed 32-bit value, and sign-extend to
+ 	HOST_WIDE_INT.
+ 	* config/pru/pru-protos.h (struct pru_ctable_entry): Store the
+ 	ctable base address as signed.
+ 	(pru_get_ctable_exact_base_index): Pass base address as signed.
+ 	(pru_get_ctable_base_index): Ditto.
+ 	(pru_get_ctable_base_offset): Ditto.
+ 	* config/pru/pru.cc (pru_get_ctable_exact_base_index): Ditto.
+ 	(pru_get_ctable_base_index): Ditto.
+ 	(pru_get_ctable_base_offset): Ditto.
+ 	(pru_print_operand_address): Ditto.
+ 
+ 2025-07-19  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	PR target/119100
+ 	* config/riscv/autovec-opt.md (*vfwnmacc_vf_<mode>): New pattern.
+ 	(*vfwnmsac_vf_<mode>): New pattern.
+ 	* config/riscv/riscv.cc (get_vector_binary_rtx_cost): Add support for a
+ 	vec_duplicate in a neg.
+ 
+ 2025-07-19  Artemiy Volkov  <artemiyv@acm.org>
+ 
+ 	* config/riscv/riscv.cc (riscv_macro_fusion_pair_p): Protect
+ 	from a NULL PREV_SET or CURR_SET.
+ 
+ 2025-07-19  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr-passes.cc (avr_optimize_casesi): Fuse
+ 	get_insns() with end_sequence().
+ 
+ 2025-07-18  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/autovec.md (avg<mode>3_ceil): Add new pattern
+ 	of avg3_ceil for RVV DImode
+ 
+ 2025-07-18  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/117423
+ 	* tree-sra.cc (analyze_access_subtree): Fix computation of grp_covered
+ 	flag.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121126
+ 	* tree-vect-stmts.cc (vect_analyze_stmt): Analyze the
+ 	live lane extract for LC PHIs that are vect_internal_def.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-loop.cc (vectorizable_live_operation_1):
+ 	Remove stmt_info and ncopies parameters.  Remove !slp_node
+ 	paths.
+ 	(vectorizable_live_operation): Remove !slp_node paths.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120924
+ 	* params.opt (uninit-max-chain-len): Up from 8 to 12.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121048
+ 	* tree-vect-loop.cc (vect_determine_vectype_for_stmt_1):
+ 	Remove rejecting vector(1) vector types.
+ 	(vect_set_stmts_vectype): Likewise.
+ 	* tree-vect-slp.cc (vect_make_slp_decision): Only
+ 	count instances with non-vector(1) root towards whether
+ 	we have any interesting instances to vectorize.
+ 
+ 2025-07-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121131
+ 	* gimple-fold.cc (fold_nonarray_ctor_reference): Use
+ 	TREE_INT_CST_LOW (TYPE_SIZE ()) instead of
+ 	GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE ()) for BLKmode BITINT_TYPEs.
+ 	Don't compute encoding_size at all for little endian targets.
+ 
+ 2025-07-17  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/121095
+ 	* gcse.cc (execute_hardreg_pre): Skip if the hardreg which is never live.
+ 
+ 2025-07-17  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* tree-ssa-structalias.cc (lookup_vi_for_tree): Fix GNU style.
+ 	(process_constraint): Fix GNU style.
+ 	(get_constraint_for_component_ref): Fix GNU style.
+ 	(get_constraint_for_1): Fix GNU style.
+ 	(get_function_part_constraint): Fix GNU style.
+ 	(handle_lhs_call): Fix GNU style.
+ 	(find_func_aliases_for_builtin_call): Fix GNU style.
+ 	(find_func_aliases): Fix GNU style.
+ 	(find_func_clobbers): Fix GNU style.
+ 	(struct shared_bitmap_hasher): Fix GNU style.
+ 	(shared_bitmap_hasher::hash): Fix GNU style.
+ 	(pt_solution_includes_global): Fix GNU style.
+ 	(init_base_vars): Fix GNU style.
+ 	(visit_loadstore): Fix GNU style.
+ 	(compute_dependence_clique): Fix GNU style.
+ 	(struct pt_solution): Fix GNU style.
+ 	(ipa_pta_execute): Fix GNU style.
+ 
+ 2025-07-17  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* pta-andersen.cc (struct constraint_graph): Fix GNU style.
+ 	(constraint_equal): Fix GNU style.
+ 	(set_union_with_increment): Fix GNU style.
+ 	(insert_into_complex): Fix GNU style.
+ 	(merge_node_constraints): Fix GNU style.
+ 	(unify_nodes): Fix GNU style.
+ 	(do_ds_constraint): Fix GNU style.
+ 	(scc_info::scc_info): Fix GNU style.
+ 	(find_indirect_cycles): Fix GNU style.
+ 	(equiv_class_lookup_or_add): Fix GNU style.
+ 	(label_visit): Fix GNU style.
+ 	(dump_pred_graph): Fix GNU style.
+ 	(perform_var_substitution): Fix GNU style.
+ 	(eliminate_indirect_cycles): Fix GNU style.
+ 	(solve_graph): Fix GNU style.
+ 	(solve_constraints): Fix GNU style.
+ 	* tree-ssa-structalias.cc (first_vi_for_offset): Fix GNU style.
+ 	(debug_constraint): Fix GNU style.
+ 	* tree-ssa-structalias.h (struct constraint_expr): Fix GNU
+ 	style.
+ 	(struct variable_info): Fix GNU style.
+ 
+ 2025-07-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386-expand.cc (ix86_expand_ternlog): Don't change
+ 	mode for XOR.
+ 
+ 2025-07-17  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* Makefile.in: Add pta-andersen.o.
+ 	* tree-ssa-structalias.cc (create_variable_info_for): Just move
+ 	around.
+ 	(unify_nodes): Move to pta-andersen.cc.
+ 	(struct constraint): Move to tree-ssa-structalias.h.
+ 	(EXECUTE_IF_IN_NONNULL_BITMAP): Move to pta-andersen.cc.
+ 	(struct variable_info): Move to tree-ssa-structalias.h.
+ 	(struct constraint_stats): Move to tree-ssa-structalias.h.
+ 	(first_vi_for_offset): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(first_or_preceding_vi_for_offset): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(dump_constraint): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(debug_constraint): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(dump_constraints): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(debug_constraints): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(lookup_vi_for_tree): Move around inside tree-ssa-structalias.cc.
+ 	(type_can_have_subvars): Move around inside tree-ssa-structalias.cc.
+ 	(make_param_constraints): Move around inside tree-ssa-structalias.cc.
+ 	(dump_solution_for_var): External linkage, move to namespace
+ 	pointer_analysis.  find (...) -> var_rep[...].
+ 	(get_varinfo): Move to tree-ssa-structalias.h.
+ 	(debug_solution_for_var): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(vi_next): Move to tree-ssa-structalias.h.
+ 	(dump_sa_stats): External linkage, move to namespace pointer_analysis.
+ 	(new_var_info): Just move around.
+ 	(dump_sa_points_to_info): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(debug_sa_points_to_info): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(get_call_vi): Just move around.
+ 	(dump_varinfo): External linkage, move to namespace pointer_analysis.
+ 	(lookup_call_use_vi): Just move around.
+ 	(lookup_call_clobber_vi): Just move around.
+ 	(get_call_use_vi): Just move around.
+ 	(get_call_clobber_vi): Just move around.
+ 	(enum constraint_expr_type): Move to tree-ssa-structalias.h.
+ 	(struct constraint_expr): Move to tree-ssa-structalias.h.
+ 	(UNKNOWN_OFFSET): Move to tree-ssa-structalias.h.
+ 	(get_constraint_for_1): Just move around.
+ 	(get_constraint_for): Just move around.
+ 	(get_constraint_for_rhs): Just move around.
+ 	(do_deref): Just move around.
+ 	(constraint_pool): Just move around.
+ 	(struct constraint_graph): Move to pta-andersen.h.
+ 	(FIRST_REF_NODE): Move to pta-andersen.cc.
+ 	(LAST_REF_NODE): Move to pta-andersen.cc.
+ 	(find): Move to pta-andersen.cc.
+ 	(unite): Move to pta-andersen.cc.
+ 	(new_constraint): Just move around.
+ 	(debug_constraint_graph): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(debug_varinfo): External linkage, move to namespace pointer_analysis.
+ 	(debug_varmap): External linkage, move to namespace pointer_analysis.
+ 	(dump_constraint_graph): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(constraint_expr_equal): Move to pta-andersen.cc.
+ 	(constraint_expr_less): Move to pta-andersen.cc.
+ 	(constraint_less): Move to pta-andersen.cc.
+ 	(constraint_equal): Move to pta-andersen.cc.
+ 	(constraint_vec_find): Move to pta-andersen.cc.
+ 	(constraint_set_union): Move to pta-andersen.cc.
+ 	(solution_set_expand): Move to pta-andersen.cc.
+ 	(set_union_with_increment): Move to pta-andersen.cc.
+ 	(insert_into_complex): Move to pta-andersen.cc.
+ 	(merge_node_constraints): Move to pta-andersen.cc.
+ 	(clear_edges_for_node): Move to pta-andersen.cc.
+ 	(merge_graph_nodes): Move to pta-andersen.cc.
+ 	(add_implicit_graph_edge): Move to pta-andersen.cc.
+ 	(add_pred_graph_edge): Move to pta-andersen.cc.
+ 	(add_graph_edge): Move to pta-andersen.cc.
+ 	(init_graph): Move to pta-andersen.cc.  Initialize
+ 	predbitmap_obstack here.
+ 	(build_pred_graph): Move to pta-andersen.cc.
+ 	(build_succ_graph): Move to pta-andersen.cc.
+ 	(class scc_info): Move to pta-andersen.cc.
+ 	(scc_visit): Move to pta-andersen.cc.
+ 	(solve_add_graph_edge): Move to pta-andersen.cc.
+ 	(do_sd_constraint): Move to pta-andersen.cc.
+ 	(do_ds_constraint): Move to pta-andersen.cc.
+ 	(do_complex_constraint): Move to pta-andersen.cc.
+ 	(scc_info::scc_info): Move to pta-andersen.cc.
+ 	(scc_info::~scc_info): Move to pta-andersen.cc.
+ 	(find_indirect_cycles): Move to pta-andersen.cc.
+ 	(topo_visit): Move to pta-andersen.cc.
+ 	(compute_topo_order): Move to pta-andersen.cc.
+ 	(struct equiv_class_hasher): Move to pta-andersen.cc.
+ 	(equiv_class_hasher::hash): Move to pta-andersen.cc.
+ 	(equiv_class_hasher::equal): Move to pta-andersen.cc.
+ 	(equiv_class_lookup_or_add): Move to pta-andersen.cc.
+ 	(condense_visit): Move to pta-andersen.cc.
+ 	(label_visit): Move to pta-andersen.cc.
+ 	(dump_pred_graph): External linkage, move to namespace
+ 	pointer_analysis.
+ 	(dump_varmap): External linkage, move to namespace pointer_analysis.
+ 	(perform_var_substitution): Move to pta-andersen.cc.
+ 	(free_var_substitution_info): Move to pta-andersen.cc.
+ 	(find_equivalent_node): Move to pta-andersen.cc.
+ 	(unite_pointer_equivalences): Move to pta-andersen.cc.
+ 	(move_complex_constraints): Move to pta-andersen.cc.
+ 	(rewrite_constraints): Move to pta-andersen.cc.
+ 	(eliminate_indirect_cycles): Move to pta-andersen.cc.
+ 	(solve_graph): Move to pta-andersen.cc.
+ 	(set_uids_in_ptset): find (...) -> var_rep[...].
+ 	(find_what_var_points_to): find (...) -> var_rep[...].
+ 	(init_alias_vars): Don't initialize predbitmap_obstack here.
+ 	(remove_preds_and_fake_succs): Move to pta-andersen.cc.
+ 	(solve_constraints): Move to pta-andersen.cc.  Call
+ 	delete_graph() at the end.
+ 	(delete_points_to_sets): Don't delete graph here.  Delete var_rep here.
+ 	(visit_loadstore): find (...) -> var_rep[...].
+ 	(compute_dependence_clique): find (...) -> var_rep[...].
+ 	(ipa_pta_execute): find (...) -> var_rep[...].
+ 	* pta-andersen.cc: New file.
+ 	* pta-andersen.h: New file.
+ 	* tree-ssa-structalias.h: New file.
+ 
+ 2025-07-17  Richard Sandiford  <richard.sandiford@arm.com>
+ 	    Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	* doc/sourcebuild.texi (aarch64_sme_hw): Document.
+ 
+ 2025-07-17  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/s390.md (signbit_tdc): Rename expander.
+ 	(signbit<mode>2): New expander.
+ 	(signbit<mode>2_z10): New expander.
+ 
+ 2025-07-17  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/s390.cc (s390_register_move_cost): Add costing for
+ 	vlvg/vlgv.
+ 
+ 2025-07-17  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/vector.md (bhfgq): Add scalar modes.
+ 	(*movdi<mode>_zero_extend_A): New insn.
+ 	(*movsi<mode>_zero_extend_A): New insn.
+ 	(*movdi<mode>_zero_extend_B): New insn.
+ 	(*movsi<mode>_zero_extend_B): New insn.
+ 
+ 2025-07-17  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/121064
+ 	* config/loongarch/lsx.md (lsx_vshuf_<lsxfmt_f>): Add '@' to
+ 	generate a mode-aware helper.  Use <VIMODE> as the mode of the
+ 	operand 1 (selector).
+ 	* config/loongarch/lasx.md (lasx_xvshuf_<lasxfmt_f>): Likewise.
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_try_expand_lsx_vshuf_const): Create a new pseudo for
+ 	the selector.  Use the mode-aware helper to simplify the code.
+ 	(loongarch_expand_vec_perm_const): Likewise.
+ 
+ 2025-07-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.cc (vect_build_slp_tree_1): Reject
+ 	single-lane vector types.
+ 
+ 2025-07-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121035
+ 	* tree-ssa-pre.cc (find_or_generate_expression): Handle
+ 	values without expression.
+ 
+ 2025-07-16  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* diagnostic-state-to-dot.cc (state_diagram::m_show_tags): Drop
+ 	unused field.
+ 
+ 2025-07-16  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 
+ 	* gimplify.cc (gimplify_omp_affinity): Use OMP_ITERATOR_DECL_P.
+ 	(compute_omp_iterator_count): New.
+ 	(build_omp_iterator_loop): New.
+ 	(gimplify_omp_depend): Use OMP_ITERATOR_DECL_P,
+ 	compute_omp_iterator_count and build_omp_iterator_loop.
+ 	* tree-inline.cc (copy_tree_body_r): Use OMP_ITERATOR_DECL_P.
+ 	* tree-pretty-print.cc (dump_omp_clause): Likewise.
+ 	* tree.h (OMP_ITERATOR_DECL_P): New macro.
+ 
+ 2025-07-16  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/121062
+ 	* config/i386/i386.cc (ix86_convert_const_vector_to_integer):
+ 	Handle E_V1SImode and E_V1DImode.
+ 	* config/i386/mmx.md (V_16_32_64): Add V1SI, V2BF and V1DI.
+ 	(mmxinsnmode): Add V1DI and V1SI.
+ 	Add V_16_32_64 splitter for constant vector loads from constant
+ 	vector pool.
+ 	(V_16_32_64:*mov<mode>_imm): Moved after V_16_32_64 splitter.
+ 	Replace lowpart_subreg with adjust_address.
+ 
+ 2025-07-16  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120881
+ 	PR testsuite/121078
+ 	* config/i386/i386-options.cc (ix86_option_override_internal):
+ 	Warn -pg without -mfentry only on glibc targets.
+ 
+ 2025-07-16  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386-expand.cc (ix86_expand_move):
+ 	Use MEM_P predicate instead of open coding it.
+ 	(ix86_erase_embedded_rounding):
+ 	Use NONJUMP_INSN_P predicate instead of open coding it.
+ 	* config/i386/i386-features.cc (convertible_comparison_p):
+ 	Use REG_P predicate instead of open coding it.
+ 	* config/i386/i386.cc (ix86_rtx_costs):
+ 	Use SUBREG_P predicate instead of open coding it.
+ 
+ 2025-07-16  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.cc (symbolic_reference_mentioned_p):
+ 	Use LABEL_REF_P predicate instead of open coding it.
+ 	(ix86_legitimate_constant_p): Ditto.
+ 	(legitimate_pic_address_disp_p): Ditto.
+ 	(ix86_legitimate_address_p): Ditto.
+ 	(legitimize_pic_address): Ditto.
+ 	(ix86_print_operand): Ditto.
+ 	(ix86_print_operand_address_as): Ditto.
+ 	(ix86_rip_relative_addr_p): Ditto.
+ 	* config/i386/i386.h (SYMBOLIC_CONST): Ditto.
+ 	* config/i386/i386.md (*anddi_1 to *andsi_1_zext splitter): Ditto.
+ 	* config/i386/predicates.md (symbolic_operand): Ditto.
+ 	(local_symbolic_operand): Ditto.
+ 	(vsib_address_operand): Ditto.
+ 
+ 2025-07-16  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386-expand.cc (ix86_expand_move):
+ 	Use SYMBOL_REF_P predicate instead of open coding it.
+ 	(ix86_split_long_move): Ditto.
+ 	(construct_plt_address): Ditto.
+ 	(ix86_expand_call): Ditto.
+ 	(ix86_notrack_prefixed_insn_p): Ditto.
+ 	* config/i386/i386-features.cc
+ 	(rest_of_insert_endbr_and_patchable_area): Ditto.
+ 	* config/i386/i386.cc (symbolic_reference_mentioned_p): Ditto.
+ 	(ix86_force_load_from_GOT_p): Ditto.
+ 	(ix86_legitimate_constant_p): Ditto.
+ 	(legitimate_pic_operand_p): Ditto.
+ 	(legitimate_pic_address_disp_p): Ditto.
+ 	(ix86_legitimate_address_p): Ditto.
+ 	(legitimize_pic_address): Ditto.
+ 	(ix86_legitimize_address): Ditto.
+ 	(ix86_delegitimize_tls_address): Ditto.
+ 	(ix86_print_operand): Ditto.
+ 	(ix86_print_operand_address_as): Ditto.
+ 	(ix86_rip_relative_addr_p): Ditto.
+ 	(symbolic_base_address_p): Ditto.
+ 	* config/i386/i386.h (SYMBOLIC_CONST): Ditto.
+ 	* config/i386/i386.md (*anddi_1 to *andsi_1_zext splitter): Ditto.
+ 	* config/i386/predicates.md (symbolic_operand): Ditto.
+ 	(local_symbolic_operand): Ditto.
+ 	(local_func_symbolic_operand): Ditto.
+ 
+ 2025-07-16  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386-expand.cc (ix86_expand_vector_logical_operator):
+ 	Use CONST_VECTOR_P instead of open coding it.
+ 	(ix86_expand_int_sse_cmp): Ditto.
+ 	(ix86_extract_perm_from_pool_constant): Ditto.
+ 	(ix86_split_to_parts): Ditto.
+ 	(const_vector_equal_evenodd_p): Ditto.
+ 	* config/i386/i386.cc (ix86_print_operand): Ditto.
+ 	* config/i386/predicates.md (zero_extended_scalar_load_operand): Ditto.
+ 	(float_vector_all_ones_operand): Ditto.
+ 	* config/i386/sse.md (avx512vl_vextractf128<mode>): Ditto.
+ 
+ 2025-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121049
+ 	* internal-fn.h (widening_evenodd_fn_p): Declare.
+ 	* internal-fn.cc (widening_evenodd_fn_p): New function.
+ 	* tree-vect-stmts.cc (vectorizable_conversion): When using
+ 	an even/odd widening function disable loop masking.
+ 
+ 2025-07-16  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/119920
+ 	PR tree-optimization/112324
+ 	PR tree-optimization/110015
+ 	* tree-if-conv.cc (find_different_opnum): New function.
+ 	(factor_out_operators): New function.
+ 	(predicate_scalar_phi): Call factor_out_operators when
+ 	there is only 2 elements of a phi.
+ 
+ 2025-07-16  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	* tree-if-conv.cc (fold_build_cond_expr): Return early if lhs and rhs
+ 	are the same.
+ 
+ 2025-07-16  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	* tree-if-conv.cc (combine_blocks): Remove predicated
+ 	dynamic array.
+ 
+ 2025-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121116
+ 	* tree-vect-loop.cc (vectorizable_induction): Use the
+ 	step vector element type for further processing.
+ 
+ 2025-07-16  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* config/gcn/gcn-valu.md (add<mode>3_vcc_dup<exec_vcc>): Change
+ 	operand 2 to allow gcn_alu_operand.  Swap the operands in the VCC
+ 	update RTL.
+ 	(add<mode>3_vcc_zext_dup): Likewise.
+ 	(add<mode>3_vcc_zext_dup_exec): Likewise.
+ 	(add<mode>3_vcc_zext_dup2): Likewise.
+ 	(add<mode>3_vcc_zext_dup2_exec): Likewise.
+ 
+ 2025-07-16  Spencer Abson  <spencer.abson@arm.com>
+ 
+ 	PR target/117850
+ 	* config/aarch64/aarch64-builtins.cc (LO_HI_PAIRINGS): New, group the
+ 	lo/hi pairs from aarch64-builtin-pairs.def.
+ 	(aarch64_get_highpart_builtin): New function.
+ 	(aarch64_v128_highpart_ref): New function, helper to look for vector
+ 	highparts.
+ 	(aarch64_build_vector_cst): New function, helper to build duplicated
+ 	VECTOR_CSTs.
+ 	(aarch64_fold_lo_call_to_hi): New function.
+ 	(aarch64_general_gimple_fold_builtin): Add cases for the lo builtins
+ 	in aarch64-builtin-pairs.def.
+ 	* config/aarch64/aarch64-builtin-pairs.def: New file, declare the
+ 	parirs of lowpart-operating and highpart-operating builtins.
+ 
+ 2025-07-16  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* tree.cc (get_clone_versions): New function.
+ 	(get_clone_attr_versions): New function.
+ 	(get_version): New function.
+ 	* tree.h (get_clone_versions): New function.
+ 	(get_clone_attr_versions): New function.
+ 	(get_target_version): New function.
+ 
+ 2025-07-16  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* attribs.cc (make_attribute): Change arguments.
+ 	* attribs.h (make_attribute): Change arguments.
+ 
+ 2025-07-16  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* pretty-print.cc (format_phase_2): Add support for string_slice.
+ 	* vec.cc (string_slice::tokenize): New static method.
+ 	(string_slice::strcmp): New static method.
+ 	(string_slice::strip): New method.
+ 	(test_string_slice_initializers): New test.
+ 	(test_string_slice_tokenize): Ditto.
+ 	(test_string_slice_strcmp): Ditto.
+ 	(test_string_slice_equality): Ditto.
+ 	(test_string_slice_inequality): Ditto.
+ 	(test_string_slice_invalid): Ditto.
+ 	(test_string_slice_strip): Ditto.
+ 	(vec_cc_tests): Add new tests.
+ 	* vec.h (class string_slice): New class.
+ 
+ 2025-07-16  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR middle-end/121065
+ 	* cfgexpand.cc (expand_debug_expr): Allow fixed-point modes for
+ 	RDIV_EXPR.
+ 	* optabs-tree.cc (optab_for_tree_code): Ditto.
+ 
+ 2025-07-16  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR target/120297
+ 	* config/riscv/riscv-vsetvl.def: Do not forget ratio demand of
+ 	previous vsetvl.
+ 
+ 2025-07-16  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* config/aarch64/aarch64-sve2.md (*aarch64_sve2_bsl2n_eon<mode>):
+ 	New pattern.
+ 	(*aarch64_sve2_eon_bsl2n_unpred<mode>): Likewise.
+ 
+ 2025-07-16  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* config/aarch64/aarch64-sve2.md (*aarch64_sve2_unpred_nor<mode>):
+ 	New define_insn.
+ 	(*aarch64_sve2_nand_unpred<mode>): Likewise.
+ 
+ 2025-07-16  Jeremy Rifkin  <jeremy@rifkin.dev>
+ 
+ 	PR c/82134
+ 	* gimplify.cc (gimplify_modify_expr): Add suppress_warning
+ 	* tree-cfg.cc (do_warn_unused_result): Check warning_suppressed_p
+ 
+ 2025-07-16  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* common/config/i386/i386-common.cc
+ 	(OPTION_MASK_ISA2_AMX_AVX512_SET): Do not set AVX10.2.
+ 	(OPTION_MASK_ISA2_AVX10_2_UNSET): Remove AMX-AVX512 unset.
+ 	(OPTION_MASK_ISA2_AVX512F_UNSET): Unset AMX-AVX512.
+ 	(ix86_handle_option): Imply AVX512F for AMX-AVX512.
+ 
+ 2025-07-16  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/autovec.md (avg<mode>3_floor): Add new
+ 	pattern of avg3_floor for rvv DImode.
+ 
+ 2025-07-15  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* spellcheck.cc: Define INCLUDE_ALGORITHM.
+ 	(CASE_COST, BASE_COST): Convert to...
+ 	(case_cost, base_cost): ...these, in an anonymous namespace.
+ 	(get_edit_distance): Update for above.  Use std::min rather than
+ 	MIN.
+ 	(get_edit_distance_cutoff): Likewise.  Use std::max rather than
+ 	MAX.
+ 	(selftest::test_edit_distances): Update for BASE_COST renaming.
+ 	(selftest::get_old_cutoff): Likewise.  Use std::max.
+ 	(selftest::assert_not_suggested_for): Use nullptr.
+ 	(selftest::test_find_closest_string): Likewise.
+ 	* spellcheck.h: Replace TYPE with StringLikeType in templates,
+ 	and use CamelCase.
+ 
+ 2025-07-15  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR sarif-replay/120792
+ 	* auto-obstack.h: New file, based on material taken from
+ 	pretty-print.cc.
+ 	* diagnostic-digraphs.h
+ 	(diagnostics::digraphs::digraph::set_description): New.
+ 	(diagnostics::digraphs::node::set_label): New.
+ 	* doc/libgdiagnostics/topics/compatibility.rst: Add
+ 	LIBGDIAGNOSTICS_ABI_4.
+ 	* doc/libgdiagnostics/topics/diagnostics.rst
+ 	(diagnostic_finish_via_msg_buf): Document new entrypoint.
+ 	* doc/libgdiagnostics/topics/execution-paths.rst
+ 	(diagnostic_execution_path_add_event_via_msg_buf): Document new
+ 	entrypoint.
+ 	* doc/libgdiagnostics/topics/index.rst: Add message-buffers.rst.
+ 	* doc/libgdiagnostics/topics/message-buffers.rst: New file.
+ 	* doc/libgdiagnostics/topics/message-formatting.rst: Add note
+ 	about message buffers.
+ 	* doc/libgdiagnostics/topics/physical-locations.rst
+ 	(diagnostic_add_location_with_label_via_msg_buf): Add.
+ 	* doc/libgdiagnostics/tutorial/07-execution-paths.rst: Link to
+ 	next section.
+ 	* doc/libgdiagnostics/tutorial/08-message-buffers.rst: New file.
+ 	* doc/libgdiagnostics/tutorial/index.rst: Add
+ 	08-message-buffers.rst.
+ 	* libgdiagnostics++.h (libgdiagnostics::message_buffer): New
+ 	class.
+ 	(libgdiagnostics::execution_path::add_event_via_msg_buf): New.
+ 	(libgdiagnostics::diagnostic::add_location_with_label): New.
+ 	(libgdiagnostics::diagnostic::finish_via_msg_buf): New.
+ 	(libgdiagnostics::graph::set_description): New overload.
+ 	(libgdiagnostics::graph::add_edge): New overload.
+ 	(libgdiagnostics::node::set_label): New overload.
+ 	* libgdiagnostics-private.h
+ 	(private_diagnostic_execution_path_add_event_2): Drop decl.
+ 	(private_diagnostic_execution_path_add_event_3): New decl.
+ 	* libgdiagnostics.cc:  Include "pretty-print-format-impl.h",
+ 	"pretty-print-markup.h", and "auto-obstack.h".
+ 	(class copying_token_printer): New.
+ 	(struct diagnostic_message_buffer): New.
+ 	(class pp_element_message_buffer): New.
+ 	(libgdiagnostics_path_event::libgdiagnostics_path_event): Replace
+ 	params "gmsgid" and "args" with "msg_buf".
+ 	(libgdiagnostics_path_event::print_desc): Reimplement using
+ 	pp_element_message_buffer to replay m_msg_buf into "pp".
+ 	(libgdiagnostics_path_event::m_desc_uncolored): Drop field.
+ 	(libgdiagnostics_path_event::m_desc_colored): Drop field.
+ 	(libgdiagnostics_path_event::msg_buf): New field.
+ 	(diagnostic_execution_path::add_event_va): Reimplement.
+ 	(diagnostic_execution_path::add_event_via_msg_buf): New.
+ 	(diagnostic::add_location_with_label): New overload, using
+ 	msg_buf.
+ 	(diagnostic_manager::emit): Reimplement with...
+ 	(diagnostic_manager::emit_va): ...this.
+ 	(diagnostic_manager::emit_msg_buf): New.
+ 	(FAIL_IF_NULL): Rename "p" to "ptr_arg".
+ 	(diagnostic_finish_va): Update to use diagnostic_manager::emit_va.
+ 	(diagnostic_graph::add_node_with_id): Rename "id" to "node_id".
+ 	(diagnostic_graph_add_node): Likewise.
+ 	(diagnostic_graph_add_edge): Rename "id" to "edge_id".
+ 	(diagnostic_graph_get_node_by_id): Rename "id" to "node_id".
+ 	(diagnostic_graph_get_edge_by_id): Rename "id" to "edge_id".
+ 	(private_diagnostic_execution_path_add_event_2): Delete.
+ 	(diagnostic_message_buffer_new): New public entrypoint.
+ 	(diagnostic_message_buffer_release): Likewise.
+ 	(diagnostic_message_buffer_append_str): Likewise.
+ 	(diagnostic_message_buffer_append_text): Likewise.
+ 	(diagnostic_message_buffer_append_byte): Likewise.
+ 	(diagnostic_message_buffer_append_printf): Likewise.
+ 	(diagnostic_message_buffer_append_event_id): Likewise.
+ 	(diagnostic_message_buffer_begin_url): Likewise.
+ 	(diagnostic_message_buffer_end_url): Likewise.
+ 	(diagnostic_message_buffer_begin_quote): Likewise.
+ 	(diagnostic_message_buffer_end_quote): Likewise.
+ 	(diagnostic_message_buffer_begin_color): Likewise.
+ 	(diagnostic_message_buffer_end_color): Likewise.
+ 	(diagnostic_message_buffer_dump): Likewise.
+ 	(diagnostic_finish_via_msg_buf): Likewise.
+ 	(diagnostic_add_location_with_label_via_msg_buf): Likewise.
+ 	(diagnostic_execution_path_add_event_via_msg_buf): Likewise.
+ 	(diagnostic_graph_set_description_via_msg_buf): Likewise.
+ 	(diagnostic_graph_add_edge_via_msg_buf): Likewise.
+ 	(diagnostic_node_set_label_via_msg_buf): Likewise.
+ 	(private_diagnostic_execution_path_add_event_3): New private
+ 	entrypoint.
+ 	* libgdiagnostics.h (LIBGDIAGNOSTICS_PARAM_FORMAT_STRING): New macro.
+ 	(LIBGDIAGNOSTICS_PARAM_PRINTF_FORMAT_STRING): New macro.
+ 	(diagnostic_message_buffer): New typedef.
+ 	(LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer): New define.
+ 	(diagnostic_message_buffer_new): New decl.
+ 	(diagnostic_message_buffer_release): New decl.
+ 	(diagnostic_message_buffer_append_str): New decl.
+ 	(diagnostic_message_buffer_append_text): New decl.
+ 	(diagnostic_message_buffer_append_byte): New decl.
+ 	(diagnostic_message_buffer_append_printf): New decl.
+ 	(diagnostic_message_buffer_append_event_id): New decl.
+ 	(diagnostic_message_buffer_begin_url): New decl.
+ 	(diagnostic_message_buffer_end_url): New decl.
+ 	(diagnostic_message_buffer_begin_quote): New decl.
+ 	(diagnostic_message_buffer_end_quote): New decl.
+ 	(diagnostic_message_buffer_begin_color): New decl.
+ 	(diagnostic_message_buffer_end_color): New decl.
+ 	(diagnostic_message_buffer_dump): New decl.
+ 	(diagnostic_finish_via_msg_buf): New decl.
+ 	(diagnostic_add_location_with_label_via_msg_buf): New decl.
+ 	(diagnostic_execution_path_add_event_via_msg_buf): New decl.
+ 	(diagnostic_graph_set_description_via_msg_buf): New decl.
+ 	(diagnostic_graph_add_edge_via_msg_buf): New decl.
+ 	(diagnostic_node_set_label_via_msg_buf): New decl.
+ 	* libgdiagnostics.map (LIBGDIAGNOSTICS_ABI_3): Drop
+ 	private_diagnostic_execution_path_add_event_2.
+ 	(LIBGDIAGNOSTICS_ABI_4): New.
+ 	* libsarifreplay.cc (class annotation): Use
+ 	libgdiagnostics::message_buffer rather than label_text.
+ 	(add_any_annotations): Likewise.
+ 	(sarif_replayer::handle_result_obj): Likewise.
+ 	(make_plain_text_within_result_message): Likewise.
+ 	(handle_thread_flow_location_object): Likewise.
+ 	(handle_location_object): Likewise.
+ 	(sarif_replayer::handle_graph_object): Likewise.
+ 	(sarif_replayer::handle_node_object): Likewise.
+ 	(sarif_replayer::handle_edge_object): Likewise.
+ 	* pretty-print-format-impl.h (pp_token_list::push_back_byte): New
+ 	decl.
+ 	* pretty-print-markup.h (pp_markup::context::begin_url): New decl.
+ 	(pp_markup::context::end_url): New decl.
+ 	(pp_markup::context::add_event_id): New decl.
+ 	* pretty-print.cc: Include "auto-obstack.h".
+ 	(pp_token_list::push_back_byte): New.
+ 	(struct auto_obstack): Move to auto-obstack.h.
+ 	(default_token_printer): Make non-static.
+ 	(pp_markup::context::begin_url): New.
+ 	(pp_markup::context::end_url): New.
+ 	(pp_markup::context::add_event_id): New.
+ 
+ 2025-07-15  Umesh Kalappa  <ukalappa.mips@gmail.com>
+ 
+ 	* config/riscv/riscv-cores.def (RISCV_CORE): Updated the supported march.
+ 	* config/riscv/riscv-ext-mips.def (DEFINE_RISCV_EXT):
+ 	New file added for mips conditional mov extension.
+ 	* config/riscv/riscv-ext.def: Likewise.
+ 	* config/riscv/t-riscv: Generates riscv-ext.opt
+ 	* config/riscv/riscv-ext.opt: Generated file.
+ 	* config/riscv/riscv.cc (riscv_expand_conditional_move): Updated for mips cmov
+ 	and outlined some code that handle arch cond move.
+ 	* config/riscv/riscv.md (mov<mode>cc): updated expand for MIPS CCMOV.
+ 	* config/riscv/mips-insn.md: New file for mips-p8700 ccmov insn.
+ 	* doc/riscv-ext.texi: Updated for mips cmov.
+ 
+ 2025-07-15  Konstantinos Eleftheriou  <konstantinos.eleftheriou@vrull.eu>
+ 
+ 	* avoid-store-forwarding.cc (generate_bit_insert_sequence):
+ 	Remove adjustment of bitfield insertion's starting position
+ 	when BYTES_BIG_ENDIAN != BITS_BIG_ENDIAN.
+ 	(process_store_forwarding): Update offset check in base reg
+ 	initialization to take into account the target's endianness.
+ 
+ 2025-07-15  Soumya AR  <soumyaa@nvidia.com>
+ 
+ 	* config/aarch64/aarch64-tuning-flags.def (AARCH64_EXTRA_TUNING_OPTION):
+ 	Add AVOID_LDAPUR tuning flag.
+ 	* config/aarch64/aarch64.cc (aarch64_adjust_generic_arch_tuning):
+ 	Set AVOID_LDAPUR for architectures before armv8.8-a.
+ 	(aarch64_override_options_internal): Apply generic tuning adjustments
+ 	to generic_armv8_a_tunings and generic_armv9_a_tunings.
+ 	* config/aarch64/aarch64.h (TARGET_ENABLE_LDAPUR): New macro to
+ 	control LDAPUR usage based on RCPC2 and tuning flags.
+ 	* config/aarch64/aarch64.md: Add enable_ldapur attribute.
+ 	* config/aarch64/atomics.md (aarch64_atomic_load<mode>_rcpc): Modify
+ 	to emit LDAPUR for cores with RCPC2.
+ 	(*aarch64_atomic_load<ALLX:mode>_rcpc_zext): Likewise.
+ 	(*aarch64_atomic_load<ALLX:mode>_rcpc_sext): Update constraint to Ust.
+ 	* config/aarch64/tuning_models/cortexx925.h: Add AVOID_LDAPUR flag.
+ 	* config/aarch64/tuning_models/neoversev2.h: Likewise.
+ 	* config/aarch64/tuning_models/neoversev3.h: Likewise.
+ 	* config/aarch64/tuning_models/neoversev3ae.h: Likewise.
+ 
+ 2025-07-15  Richard Biener  <rguenther@suse.de>
+ 	    Richard Sandiford   <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/121059
+ 	* tree-vect-stmts.cc (vectorizable_operation): Query
+ 	scalar_cond_masked_set with the correct number of masks.
+ 
+ 2025-07-15  Jakub Jelinek  <jakub@redhat.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c/44677
+ 	* common.opt (Wunused-but-set-parameter=, Wunused-but-set-variable=):
+ 	New options.
+ 	(Wunused-but-set-parameter, Wunused-but-set-variable): Turn into
+ 	aliases.
+ 	* common.opt.urls: Regenerate.
+ 	* diagnostic-spec.cc (nowarn_spec_t::nowarn_spec_t): Use
+ 	OPT_Wunused_but_set_variable_ instead of OPT_Wunused_but_set_variable
+ 	and OPT_Wunused_but_set_parameter_ instead of
+ 	OPT_Wunused_but_set_parameter.
+ 	* gimple-ssa-store-merging.cc (find_bswap_or_nop_1): Remove unused
+ 	but set variable tmp.
+ 	* ipa-strub.cc (pass_ipa_strub::execute): Cast named_args to
+ 	(void) if ATTR_FNSPEC_DECONST_WATERMARK is not defined.
+ 	* doc/invoke.texi (Wunused-but-set-parameter=,
+ 	Wunused-but-set-variable=): Document new options.
+ 	(Wunused-but-set-parameter, Wunused-but-set-variable): Adjust
+ 	documentation now that they are just aliases.
+ 
+ 2025-07-15  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* config/aarch64/aarch64-sme.md (@aarch64_sme_<faminmax_uns_op><mode>):
+ 	Change gating and comment.
+ 
+ 2025-07-15  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Revert:
+ 	2025-07-11  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (*eor3qdi4): New
+ 	define_insn_and_split.
+ 
+ 2025-07-15  Spencer Abson  <spencer.abson@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (*fcm<cmp_op><mode>_and_combine):
+ 	Extend from SVE_FULL_F to SVE_F.
+ 	(*fcmuo<mode>_and_combine): Likewise.
+ 	(*fcm<cmp_op><mode>_bic_combine): Likewise.
+ 	(*fcm<cmp_op><mode>_nor_combine): Likewise.
+ 	(*fcmuo<mode>_bic_combine): Likewise.
+ 	(*fcmuo<mode>_nor_combine): Likewise.  Move the comment here to
+ 	above fcmuo<mode>_bic_combine, since it applies to both patterns.
+ 
+ 2025-07-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* tree.cc: Include memmodel.h.
+ 
+ 2025-07-14  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* config/gcn/gcn-valu.md (vec_cmpu<mode>di_exec): Call gen_vec_cmp*,
+ 	not gen_vec_cmpu*.
+ 
+ 2025-07-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Revert:
+ 	2025-07-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121059
+ 	* tree-vect-stmts.cc (vectorizable_operation): Record a
+ 	loop mask for mask AND operations.
+ 
+ 2025-07-14  Juergen Christ  <jchrist@linux.ibm.com>
+ 
+ 	* config/s390/vector.md (reduc_plus_scal_<mode>): Implement.
+ 	(reduc_plus_scal_v2df): Implement.
+ 	(reduc_plus_scal_v4sf): Implement.
+ 	(REDUC_FMINMAX): New int iterator.
+ 	(reduc_fminmax_name): New int attribute.
+ 	(reduc_minmax): New code iterator.
+ 	(reduc_minmax_name): New code attribute.
+ 	(reduc_<reduc_fminmax_name>_scal_v2df): Implement.
+ 	(reduc_<reduc_fminmax_name>_scal_v4sf): Implement.
+ 	(reduc_<reduc_minmax_name>_scal_v2df): Implement.
+ 	(reduc_<reduc_minmax_name>_scal_v4sf): Implement.
+ 	(REDUCBIN): New code iterator.
+ 	(reduc_bin_insn): New code attribute.
+ 	(reduc_<reduc_bin_insn>_scal_v2di): Implement.
+ 	(reduc_<reduc_bin_insn>_scal_v4si): Implement.
+ 	(reduc_<reduc_bin_insn>_scal_v8hi): Implement.
+ 	(reduc_<reduc_bin_insn>_scal_v16qi): Implement.
+ 
+ 2025-07-14  Juergen Christ  <jchrist@linux.ibm.com>
+ 
+ 	* config/s390/s390.cc (s390_option_override_internal): Remove override.
+ 
+ 2025-07-14  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* config/gcn/gcn-valu.md (add<mode>3<exec_clobber>): Rename ...
+ 	(add<mode>3<exec>): ... to this, remove the clobber, and change the
+ 	instruction from v_add_co_u32 to v_add_u32.
+ 	(add<mode>3_dup<exec_clobber>): Rename ...
+ 	(add<mode>3_dup<exec>): ... to this, and likewise.
+ 	(sub<mode>3<exec_clobber>): Rename ...
+ 	(sub<mode>3<exec>): ... to this, and likewise
+ 	* config/gcn/gcn.md (addsi3): Remove the DI clobber, and change the
+ 	instruction from v_add_co_u32 to v_add_u32.
+ 	(addsi3_scc): Likewise.
+ 	(subsi3): Likewise, but for v_sub_co_u32.
+ 	(muldi3): Likewise.
+ 
+ 2025-07-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121059
+ 	* tree-vect-stmts.cc (vectorizable_operation): Record a
+ 	loop mask for mask AND operations.
+ 
+ 2025-07-14  Pan Li  <pan2.li@intel.com>
+ 
+ 	* match.pd: Make sure widen mul has twice bitsize
+ 	of the inputs in SAT_MUL pattern.
+ 
+ 2025-07-14  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/121015
+ 	* config/i386/i386-features.cc (ix86_broadcast_inner): Check all
+ 	0s/1s vectors with standard_sse_constant_p.
+ 
+ 2025-07-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120881
+ 	* config.in: Regenerated.
+ 	* configure: Likewise.
+ 	* configure.ac: Add --enable-x86-64-mfentry.
+ 	* config/i386/i386-options.cc (ix86_option_override_internal):
+ 	Enable __fentry__ in 64-bit mode if ENABLE_X86_64_MFENTRY is set
+ 	to 1.  Warn -pg without -mfentry with shrink wrapping enabled.
+ 	* doc/install.texi: Document --enable-x86-64-mfentry.
+ 
+ 2025-07-14  François-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+ 
+ 	PR target/120645
+ 	* config/darwin-driver.cc: Account for latest macOS numbering
+ 	scheme.
+ 
+ 2025-07-14  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	PR target/119100
+ 	* config/riscv/autovec-opt.md (*vfwmacc_vf_<mode>): New pattern to
+ 	handle both vfwmacc and vfwmsac.
+ 	(*extend_vf_<mode>): New pattern that serves as an intermediate combine
+ 	step.
+ 	* config/riscv/vector-iterators.md (vsubel): New mode attribute. This is
+ 	just the lower-case version of VSUBEL.
+ 	* config/riscv/vector.md (@pred_widen_mul_<optab><mode>_scalar): Reorder
+ 	and swap operands to match the RTL emitted by expand, i.e. first
+ 	float_extend then vec_duplicate.
+ 
+ 2025-07-14  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* config/aarch64/aarch64-sme.md (@aarch64_sme_<faminmax_uns_op><mode>):
+ 	New patterns.
+ 	* config/aarch64/aarch64-sve-builtins-sme.def (svamin): New intrinsics.
+ 	(svamax): New intrinsics.
+ 	* config/aarch64/aarch64-sve-builtins-sve2.cc (class faminmaximpl): New
+ 	class.
+ 	(svamin): New function.
+ 	(svamax): New function.
+ 
+ 2025-07-14  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/i386.h (PTA_PANTHERLAKE): Revmoe KL and WIDEKL.
+ 	(PTA_CLEARWATERFOREST): Ditto.
+ 	* doc/invoke.texi: Revise documentation.
+ 
+ 2025-07-13  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/120866
+ 	* tree.cc: Add include to tm_p.h.
+ 
+ 2025-07-13  Benjamin Wu  <bwu25@cs.washington.edu>
+ 
+ 	* gimple.h (GTMA_DOES_GO_IRREVOCABLE): Fix typo.
+ 
  2025-07-12  Jan Hubicka  <hubicka@ucw.cz>
  
  	* auto-profile.cc (function_instance::~function_instance):
diff -Nrcpad gcc-16-20250713/gcc/DATESTAMP gcc-16-20250720/gcc/DATESTAMP
*** gcc-16-20250713/gcc/DATESTAMP	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/gcc/DATESTAMP	Sun Jul 20 22:32:08 2025
***************
*** 1 ****
! 20250713
--- 1 ----
! 20250720
diff -Nrcpad gcc-16-20250713/gcc/Makefile.in gcc-16-20250720/gcc/Makefile.in
*** gcc-16-20250713/gcc/Makefile.in	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/gcc/Makefile.in	Sun Jul 20 22:32:08 2025
*************** OBJS = \
*** 1796,1801 ****
--- 1796,1802 ----
  	tree-ssa-sink.o \
  	tree-ssa-strlen.o \
  	tree-ssa-structalias.o \
+ 	pta-andersen.o \
  	tree-ssa-tail-merge.o \
  	tree-ssa-ter.o \
  	tree-ssa-threadbackward.o \
diff -Nrcpad gcc-16-20250713/gcc/ada/ChangeLog gcc-16-20250720/gcc/ada/ChangeLog
*** gcc-16-20250713/gcc/ada/ChangeLog	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/gcc/ada/ChangeLog	Sun Jul 20 22:32:08 2025
***************
*** 1,3 ****
--- 1,64 ----
+ 2025-07-18  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_ch12.adb (Validate_Derived_Type_Instance): Cope with the case
+ 	where the ancestor type for a formal derived type is declared in
+ 	an earlier formal package but Get_Instance_Of does not return the
+ 	corresponding type from the corresponding actual package.
+ 
+ 2025-07-18  Bob Duff  <duff@adacore.com>
+ 
+ 	* tbuild.adb (Unchecked_Convert_To): Back out
+ 	change.
+ 
+ 2025-07-18  Marc Poulhiès  <poulhies@adacore.com>
+ 	    Eric Botcazou  <botcazou@adacore.com>
+ 
+ 	* exp_ch6.adb (Convert): Do not call Expand_Inlined_Call for
+ 	unsupported cases.
+ 	* inline.adb (Expand_Inlined_Call): Add assert to catch unsupported
+ 	case.
+ 
+ 2025-07-18  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* einfo.ads: Document new field Overridden_Inherited_Operation and
+ 	list it as a field for the entity kinds that it applies to.
+ 	* gen_il-fields.ads (type Opt_Field_Enum): Add new literal
+ 	Overridden_Inherited_Operation to the type.
+ 	* gen_il-gen-gen_entities.adb: Add Overridden_Inherited_Operation as
+ 	a field of entities of kinds E_Enumeration_Literal and Subprogram_Kind.
+ 	* sem_ch4.adb (Is_Callable_Private_Overriding): Change name (was
+ 	Is_Private_Overriding). Replace Is_Hidden test on Overridden_Operation
+ 	with test of Is_Hidden on the new field Overridden_Inherited_Operation.
+ 	* sem_ch6.adb (New_Overloaded_Entity): Set the new field
+ 	Overridden_Inherited_Operation on an operation derived from
+ 	an interface to refer to the inherited operation of a private
+ 	extension that's overridden by the derived operation. Also set
+ 	that field in the more common cases of an explicit subprogram
+ 	that overrides, to refer to the inherited subprogram that is
+ 	overridden. (Contrary to its name, the Overridden_Operation
+ 	field of the overriding subprogram, which is also set in these
+ 	places, refers to the *parent* subprogram from which the inherited
+ 	subprogram is derived.) Also, remove a redundant Present (Alias (S))
+ 	test in an if_statement and the dead "else" part of that statement.
+ 
+ 2025-07-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Build_Elaboration_Entity): Set ghost mode to none
+ 	before creating the elaboration entity; restore the ghost mode
+ 	afterwards.
+ 
+ 2025-07-18  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* exp_aggr.adb (Gen_Assign): Code cleanup.
+ 	(Initialize_Component): Do not adjust the tag when the type of
+ 	the aggregate components is a mutably tagged type.
+ 
+ 2025-07-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/121056
+ 	* sem_ch4.adb (Try_Object_Operation.Try_Primitive_Operation): Add
+ 	test on Is_Record_Type before accessing Underlying_Record_View.
+ 
  2025-07-10  Jakub Jelinek  <jakub@redhat.com>
  
  	* par-load.adb: Comment spelling fix: bellow -> below.
diff -Nrcpad gcc-16-20250713/gcc/ada/einfo.ads gcc-16-20250720/gcc/ada/einfo.ads
*** gcc-16-20250713/gcc/ada/einfo.ads	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/gcc/ada/einfo.ads	Sun Jul 20 22:32:08 2025
*************** package Einfo is
*** 3940,3948 ****
  --       Defined in constants and variables. Set if there is an address clause
  --       that causes the entity to overlay a constant object.
  
  --    Overridden_Operation
  --       Defined in subprograms. For overriding operations, points to the
! --       user-defined parent subprogram that is being overridden.
  
  --    Package_Instantiation
  --       Defined in packages and generic packages. When defined, this field
--- 3940,3960 ----
  --       Defined in constants and variables. Set if there is an address clause
  --       that causes the entity to overlay a constant object.
  
+ --    Overridden_Inherited_Operation
+ --       Defined in subprograms and enumeration literals. When set on a
+ --       subprogram S, indicates an inherited subprogram that S overrides.
+ --       In the case of a privately declared explicit subprogram E that
+ --       overrides a private inherited subprogram, and the inherited
+ --       subprogram itself overrides another inherited subprogram declared
+ --       for a private extension, the field on E will reference the subprogram
+ --       inherited by the private extension. This field is used for properly
+ --       handling visibility for such privately declared subprograms. This
+ --       field is always Empty for enumeration literal entities.
+ 
  --    Overridden_Operation
  --       Defined in subprograms. For overriding operations, points to the
! --       user-defined parent subprogram from which the inherited subprogram
! --       that is being overridden is derived.
  
  --    Package_Instantiation
  --       Defined in packages and generic packages. When defined, this field
*************** package Einfo is
*** 5413,5418 ****
--- 5425,5431 ----
     --    Enumeration_Pos
     --    Enumeration_Rep
     --    Alias
+    --    Overridden_Inherited_Operation
     --    Enumeration_Rep_Expr
     --    Interface_Name $$$
     --    Renamed_Object $$$
*************** package Einfo is
*** 5502,5507 ****
--- 5515,5521 ----
     --    Subps_Index                          (non-generic case only)
     --    Interface_Alias
     --    LSP_Subprogram                       (non-generic case only)
+    --    Overridden_Inherited_Operation
     --    Overridden_Operation
     --    Wrapped_Entity                       (non-generic case only)
     --    Extra_Formals
*************** package Einfo is
*** 5705,5710 ****
--- 5719,5725 ----
     --    Extra_Accessibility_Of_Result
     --    Last_Entity
     --    Subps_Index
+    --    Overridden_Inherited_Operation
     --    Overridden_Operation
     --    Linker_Section_Pragma
     --    Contract
*************** package Einfo is
*** 5858,5863 ****
--- 5873,5879 ----
     --    Subps_Index                          (non-generic case only)
     --    Interface_Alias
     --    LSP_Subprogram                       (non-generic case only)
+    --    Overridden_Inherited_Operation
     --    Overridden_Operation                 (never for init proc)
     --    Wrapped_Entity                       (non-generic case only)
     --    Extra_Formals
diff -Nrcpad gcc-16-20250713/gcc/ada/exp_aggr.adb gcc-16-20250720/gcc/ada/exp_aggr.adb
*** gcc-16-20250713/gcc/ada/exp_aggr.adb	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/gcc/ada/exp_aggr.adb	Sun Jul 20 22:32:08 2025
*************** package body Exp_Aggr is
*** 1457,1510 ****
           end if;
  
           if Present (Expr) then
! 
!             --  For mutably tagged abstract class-wide types, we rely on the
!             --  type of the initializing expression to initialize the tag of
!             --  each array component.
! 
!             --  Generate:
!             --     expr_type!(Indexed_Comp) := expr;
!             --     expr_type!(Indexed_Comp)._tag := expr_type'Tag;
! 
!             if Is_Mutably_Tagged_Type (Comp_Typ)
!               and then Is_Abstract_Type (Root_Type (Comp_Typ))
!             then
!                declare
!                   Expr_Type : Entity_Id;
! 
!                begin
!                   if Nkind (Expr) in N_Has_Etype
!                     and then Present (Etype (Expr))
!                   then
!                      Expr_Type := Etype (Expr);
! 
!                   elsif Nkind (Expr) = N_Qualified_Expression then
!                      Analyze (Subtype_Mark (Expr));
!                      Expr_Type := Etype (Subtype_Mark (Expr));
! 
!                   --  Unsupported case
! 
!                   else
!                      pragma Assert (False);
!                      raise Program_Error;
!                   end if;
! 
!                   Initialize_Component
!                     (N          => N,
!                      Comp       => Unchecked_Convert_To (Expr_Type,
!                                      Indexed_Comp),
!                      Comp_Typ   => Expr_Type,
!                      Init_Expr  => Expr,
!                      Stmts      => Stmts);
!                end;
!             else
!                Initialize_Component
!                  (N          => N,
!                   Comp       => Indexed_Comp,
!                   Comp_Typ   => Comp_Typ,
!                   Init_Expr  => Expr,
!                   Stmts      => Stmts);
!             end if;
  
           --  Ada 2005 (AI-287): In case of default initialized component, call
           --  the initialization subprogram associated with the component type.
--- 1457,1468 ----
           end if;
  
           if Present (Expr) then
!             Initialize_Component
!               (N          => N,
!                Comp       => Indexed_Comp,
!                Comp_Typ   => Comp_Typ,
!                Init_Expr  => Expr,
!                Stmts      => Stmts);
  
           --  Ada 2005 (AI-287): In case of default initialized component, call
           --  the initialization subprogram associated with the component type.
*************** package body Exp_Aggr is
*** 1519,1528 ****
  
           else
              --  For mutably tagged class-wide types, default initialization is
!             --  performed by the init procedure of their root type.
  
              if Is_Mutably_Tagged_Type (Comp_Typ) then
!                Comp_Typ := Root_Type (Comp_Typ);
              end if;
  
              if Present (Base_Init_Proc (Comp_Typ)) then
--- 1477,1486 ----
  
           else
              --  For mutably tagged class-wide types, default initialization is
!             --  performed by the init procedure of their specific type.
  
              if Is_Mutably_Tagged_Type (Comp_Typ) then
!                Comp_Typ := Find_Specific_Type (Comp_Typ);
              end if;
  
              if Present (Base_Init_Proc (Comp_Typ)) then
*************** package body Exp_Aggr is
*** 8864,8870 ****
        else
           Set_No_Ctrl_Actions (Init_Stmt);
  
!          if Tagged_Type_Expansion and then Is_Tagged_Type (Comp_Typ) then
              declare
                 Typ : Entity_Id := Underlying_Type (Comp_Typ);
  
--- 8822,8836 ----
        else
           Set_No_Ctrl_Actions (Init_Stmt);
  
!          if Tagged_Type_Expansion
!            and then Is_Tagged_Type (Comp_Typ)
! 
!          --  Cannot adjust the tag when the expected type of the component is
!          --  a mutably tagged (and therefore class-wide) type; each component
!          --  of the aggregate has the tag of its initializing expression.
! 
!            and then not Is_Mutably_Tagged_Type (Comp_Typ)
!          then
              declare
                 Typ : Entity_Id := Underlying_Type (Comp_Typ);
  
diff -Nrcpad gcc-16-20250713/gcc/ada/exp_ch6.adb gcc-16-20250720/gcc/ada/exp_ch6.adb
*** gcc-16-20250713/gcc/ada/exp_ch6.adb	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/gcc/ada/exp_ch6.adb	Sun Jul 20 22:32:08 2025
*************** package body Exp_Ch6 is
*** 5227,5232 ****
--- 5227,5236 ----
           --  also Build_Renamed_Body) cannot be expanded here because this may
           --  give rise to order-of-elaboration issues for the types of the
           --  parameters of the subprogram, if any.
+          --
+          --  Expand_Inlined_Call procedure does not support the frontend
+          --  inlining of calls that return unconstrained types used as actuals
+          --  or in return statements.
  
           elsif Present (Unit_Declaration_Node (Subp))
             and then Nkind (Unit_Declaration_Node (Subp)) =
*************** package body Exp_Ch6 is
*** 5235,5240 ****
--- 5239,5246 ----
             and then
               Nkind (Body_To_Inline (Unit_Declaration_Node (Subp))) not in
                                                                         N_Entity
+            and then Nkind (Parent (N)) /= N_Function_Call
+            and then Nkind (Parent (N)) /= N_Simple_Return_Statement
           then
              Expand_Inlined_Call (Call_Node, Subp, Orig_Subp);
  
diff -Nrcpad gcc-16-20250713/gcc/ada/gen_il-fields.ads gcc-16-20250720/gcc/ada/gen_il-fields.ads
*** gcc-16-20250713/gcc/ada/gen_il-fields.ads	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/gcc/ada/gen_il-fields.ads	Sun Jul 20 22:32:08 2025
*************** package Gen_IL.Fields is
*** 850,855 ****
--- 850,856 ----
        Original_Protected_Subprogram,
        Original_Record_Component,
        Overlays_Constant,
+       Overridden_Inherited_Operation,
        Overridden_Operation,
        Package_Instantiation,
        Packed_Array_Impl_Type,
diff -Nrcpad gcc-16-20250713/gcc/ada/gen_il-gen-gen_entities.adb gcc-16-20250720/gcc/ada/gen_il-gen-gen_entities.adb
*** gcc-16-20250713/gcc/ada/gen_il-gen-gen_entities.adb	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/gcc/ada/gen_il-gen-gen_entities.adb	Sun Jul 20 22:32:08 2025
*************** begin -- Gen_IL.Gen.Gen_Entities
*** 953,958 ****
--- 953,959 ----
          Sm (Enumeration_Rep_Expr, Node_Id),
          Sm (Esize, Uint),
          Sm (Alignment, Unat),
+         Sm (Overridden_Inherited_Operation, Node_Id),
          Sm (Interface_Name, Node_Id)));
  
     Ab (Subprogram_Kind, Overloadable_Kind,
*************** begin -- Gen_IL.Gen.Gen_Entities
*** 981,986 ****
--- 982,988 ----
          Sm (Is_Machine_Code_Subprogram, Flag),
          Sm (Last_Entity, Node_Id),
          Sm (Linker_Section_Pragma, Node_Id),
+         Sm (Overridden_Inherited_Operation, Node_Id),
          Sm (Overridden_Operation, Node_Id),
          Sm (Protected_Body_Subprogram, Node_Id),
          Sm (No_Raise, Flag),
diff -Nrcpad gcc-16-20250713/gcc/ada/inline.adb gcc-16-20250720/gcc/ada/inline.adb
*** gcc-16-20250713/gcc/ada/inline.adb	Sun Jul 13 22:32:24 2025
--- gcc-16-20250720/gcc/ada/inline.adb	Sun Jul 20 22:32:08 2025
*************** package body Inline is
*** 3797,3802 ****
--- 3797,3813 ----
                            and then Is_Unc;
        end if;
  
+       --  Inlining function calls returning an object of unconstrained type as
+       --  function actuals or in a return statement is not supported: a
+       --  temporary variable will be declared of unconstrained type without
+       --  initializing expression.
+ 
+       pragma Assert
+         (not Uses_Back_End
+            or else Nkind (Parent (N)) not in
+              N_Function_Call | N_Simple_Return_Statement
+            or else not Is_Unc);
+ 
        --  Check for an illegal attempt to inline a recursive procedure. If the
        --  subprogram has parameters this is detected when trying to supply a
        --  binding for parameters that already have one. For parameterless
diff -Nrcpad gcc-16-20250713/gcc/ada/sem_ch12.adb gcc-16-20250720/gcc/ada/sem_ch12.adb
*** gcc-16-20250713/gcc/ada/sem_ch12.adb	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/ada/sem_ch12.adb	Sun Jul 20 22:32:08 2025
*************** package body Sem_Ch12 is
*** 14371,14378 ****
           elsif
             Scope (Scope (Base_Type (Etype (A_Gen_T)))) = Scope (A_Gen_T)
           then
!             Ancestor :=
!               Get_Instance_Of (Base_Type (Etype (A_Gen_T)));
  
           --  The type may be a local derivation, or a type extension of a
           --  previous formal, or of a formal of a parent package.
--- 14371,14391 ----
           elsif
             Scope (Scope (Base_Type (Etype (A_Gen_T)))) = Scope (A_Gen_T)
           then
!             declare
!                Formal_Ancestor : constant Entity_Id :=
!                  Base_Type (Etype (A_Gen_T));
!             begin
!                Ancestor := Get_Instance_Of (Formal_Ancestor);
! 
!                --  Handle (rare) case where Get_Instance_Of found nothing in
!                --  the map.
! 
!                if Ancestor = Formal_Ancestor then
!                   Ancestor :=
!                     Get_Instance_Of
!                       (Base_Type (Etype (Get_Instance_Of (A_Gen_T))));
!                end if;
!             end;
  
           --  The type may be a local derivation, or a type extension of a
           --  previous formal, or of a formal of a parent package.
diff -Nrcpad gcc-16-20250713/gcc/ada/sem_ch4.adb gcc-16-20250720/gcc/ada/sem_ch4.adb
*** gcc-16-20250713/gcc/ada/sem_ch4.adb	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/ada/sem_ch4.adb	Sun Jul 20 22:32:08 2025
*************** package body Sem_Ch4 is
*** 10406,10416 ****
           --  may be candidates, so that Try_Primitive_Operations can examine
           --  them if no real primitive is found.
  
!          function Is_Private_Overriding (Op : Entity_Id) return Boolean;
           --  An operation that overrides an inherited operation in the private
           --  part of its package may be hidden, but if the inherited operation
!          --  is visible a direct call to it will dispatch to the private one,
!          --  which is therefore a valid candidate.
  
           function Names_Match
             (Obj_Type : Entity_Id;
--- 10406,10419 ----
           --  may be candidates, so that Try_Primitive_Operations can examine
           --  them if no real primitive is found.
  
!          function Is_Callable_Private_Overriding
!            (Op : Entity_Id) return Boolean;
           --  An operation that overrides an inherited operation in the private
           --  part of its package may be hidden, but if the inherited operation
!          --  that it overrides is visible, then a direct call to it will
!          --  dispatch to the private one, which is therefore a valid candidate.
!          --  Returns True if the operation can be called from outside the
!          --  enclosing package.
  
           function Names_Match
             (Obj_Type : Entity_Id;
*************** package body Sem_Ch4 is
*** 10581,10591 ****
              return Op_List;
           end Extended_Primitive_Ops;
  
!          ---------------------------
!          -- Is_Private_Overriding --
!          ---------------------------
  
!          function Is_Private_Overriding (Op : Entity_Id) return Boolean is
              Visible_Op : Entity_Id;
  
           begin
--- 10584,10596 ----
              return Op_List;
           end Extended_Primitive_Ops;
  
!          ------------------------------------
!          -- Is_Callable_Private_Overriding --
!          ------------------------------------
  
!          function Is_Callable_Private_Overriding
!            (Op : Entity_Id) return Boolean
!          is
              Visible_Op : Entity_Id;
  
           begin
*************** package body Sem_Ch4 is
*** 10607,10613 ****
                    --  have found what we're looking for.
  
                    if not Is_Hidden (Visible_Op)
!                     or else not Is_Hidden (Overridden_Operation (Op))
                    then
                       return True;
                    end if;
--- 10612,10621 ----
                    --  have found what we're looking for.
  
                    if not Is_Hidden (Visible_Op)
!                     or else
!                       (Present (Overridden_Inherited_Operation (Op))
!                         and then not Is_Hidden
!                                        (Overridden_Inherited_Operation (Op)))
                    then
                       return True;
                    end if;
*************** package body Sem_Ch4 is
*** 10617,10623 ****
              end loop;
  
              return False;
!          end Is_Private_Overriding;
  
           -----------------
           -- Names_Match --
--- 10625,10631 ----
              end loop;
  
              return False;
!          end Is_Callable_Private_Overriding;
  
           -----------------
           -- Names_Match --
*************** package body Sem_Ch4 is
*** 10692,10697 ****
--- 10700,10706 ----
  
                or else
                  (Has_Unknown_Discriminants (Typ)
+                   and then Is_Record_Type (Base_Type (Obj_Type))
                    and then Typ = Underlying_Record_View (Base_Type (Obj_Type)))
  
                 --  Prefix can be dereferenced
*************** package body Sem_Ch4 is
*** 10759,10771 ****
  
                   --  Do not consider hidden primitives unless the type is in an
                   --  open scope or we are within an instance, where visibility
!                  --  is known to be correct, or else if this is an overriding
!                  --  operation in the private part for an inherited operation.
  
                   or else (Is_Hidden (Prim_Op)
                             and then not Is_Immediately_Visible (Obj_Type)
                             and then not In_Instance
!                            and then not Is_Private_Overriding (Prim_Op))
                 then
                    goto Continue;
                 end if;
--- 10768,10782 ----
  
                   --  Do not consider hidden primitives unless the type is in an
                   --  open scope or we are within an instance, where visibility
!                  --  is known to be correct, or else if this is an operation
!                  --  declared in the private part that overrides a visible
!                  --  inherited operation.
  
                   or else (Is_Hidden (Prim_Op)
                             and then not Is_Immediately_Visible (Obj_Type)
                             and then not In_Instance
!                            and then
!                              not Is_Callable_Private_Overriding (Prim_Op))
                 then
                    goto Continue;
                 end if;
diff -Nrcpad gcc-16-20250713/gcc/ada/sem_ch6.adb gcc-16-20250720/gcc/ada/sem_ch6.adb
*** gcc-16-20250713/gcc/ada/sem_ch6.adb	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/ada/sem_ch6.adb	Sun Jul 20 22:32:08 2025
*************** package body Sem_Ch6 is
*** 12133,12168 ****
          and then Present (Find_Dispatching_Type (Alias (S)))
          and then Is_Interface (Find_Dispatching_Type (Alias (S)))
        then
!          --  For private types, when the full-view is processed we propagate to
!          --  the full view the non-overridden entities whose attribute "alias"
!          --  references an interface primitive. These entities were added by
!          --  Derive_Subprograms to ensure that interface primitives are
!          --  covered.
  
!          --  Inside_Freeze_Actions is non zero when S corresponds with an
!          --  internal entity that links an interface primitive with its
!          --  covering primitive through attribute Interface_Alias (see
!          --  Add_Internal_Interface_Entities).
  
!          if Inside_Freezing_Actions = 0
!            and then Is_Package_Or_Generic_Package (Current_Scope)
!            and then In_Private_Part (Current_Scope)
!            and then Parent_Kind (E) = N_Private_Extension_Declaration
!            and then Nkind (Parent (S)) = N_Full_Type_Declaration
!            and then Full_View (Defining_Identifier (Parent (E)))
!                       = Defining_Identifier (Parent (S))
!            and then Alias (E) = Alias (S)
!          then
!             Check_Operation_From_Private_View (S, E);
!             Set_Is_Dispatching_Operation (S);
  
!          --  Common case
  
!          else
!             Enter_Overloaded_Entity (S);
!             Check_Dispatching_Operation (S, Empty);
!             Check_For_Primitive_Subprogram (Is_Primitive_Subp);
!          end if;
  
           return;
        end if;
--- 12133,12183 ----
          and then Present (Find_Dispatching_Type (Alias (S)))
          and then Is_Interface (Find_Dispatching_Type (Alias (S)))
        then
!          declare
!             Private_Operation_Exported_By_Visible_Part : constant Boolean :=
!               Is_Package_Or_Generic_Package (Current_Scope)
!               and then In_Private_Part (Current_Scope)
!               and then Parent_Kind (E) = N_Private_Extension_Declaration
!               and then Nkind (Parent (S)) = N_Full_Type_Declaration
!               and then Full_View (Defining_Identifier (Parent (E)))
!                          = Defining_Identifier (Parent (S));
  
!          begin
!             --  For private types, when the full view is processed we propagate
!             --  to the full view the nonoverridden entities whose attribute
!             --  "alias" references an interface primitive. These entities were
!             --  added by Derive_Subprograms to ensure that interface primitives
!             --  are covered.
  
!             --  Inside_Freeze_Actions is nonzero when S corresponds to an
!             --  internal entity that links an interface primitive with its
!             --  covering primitive through attribute Interface_Alias (see
!             --  Add_Internal_Interface_Entities).
  
!             if Inside_Freezing_Actions = 0
!               and then Private_Operation_Exported_By_Visible_Part
!               and then Alias (E) = Alias (S)
!             then
!                Check_Operation_From_Private_View (S, E);
!                Set_Is_Dispatching_Operation (S);
  
!             --  Common case
! 
!             else
!                Enter_Overloaded_Entity (S);
!                Check_Dispatching_Operation (S, Empty);
!                Check_For_Primitive_Subprogram (Is_Primitive_Subp);
!             end if;
! 
!             if Private_Operation_Exported_By_Visible_Part
!               and then Type_Conformant (E, S)
!             then
!                --  Record the actual inherited subprogram that's being
!                --  overridden.
! 
!                Set_Overridden_Inherited_Operation (S, E);
!             end if;
!          end;
  
           return;
        end if;
*************** package body Sem_Ch6 is
*** 12601,12606 ****
--- 12616,12641 ----
                            and then not Is_Dispatch_Table_Wrapper (S)))
                    then
                       Set_Overridden_Operation    (S, Alias (E));
+ 
+                      --  Record the actual inherited subprogram that's being
+                      --  overridden. In the case where a subprogram declared
+                      --  in a private part overrides an inherited subprogram
+                      --  that itself is also declared in the private part,
+                      --  and that subprogram in turns overrides a subprogram
+                      --  declared in a package visible part (inherited via
+                      --  a private extension), we record the visible subprogram
+                      --  as the overridden one, so that we can determine
+                      --  visibility properly for prefixed calls to the
+                      --  subprogram made from outside the package. (See
+                      --  Try_Primitive_Operation in Sem_Ch4.)
+ 
+                      if Present (Overridden_Inherited_Operation (E)) then
+                         Set_Overridden_Inherited_Operation
+                           (S, Overridden_Inherited_Operation (E));
+                      else
+                         Set_Overridden_Inherited_Operation (S, E);
+                      end if;
+ 
                       Inherit_Subprogram_Contract (S, Alias (E));
  
                       Set_Is_Ada_2022_Only (S, Is_Ada_2022_Only (Alias (E)));
diff -Nrcpad gcc-16-20250713/gcc/ada/sem_util.adb gcc-16-20250720/gcc/ada/sem_util.adb
*** gcc-16-20250713/gcc/ada/sem_util.adb	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/ada/sem_util.adb	Sun Jul 20 22:32:08 2025
*************** with Exp_Ch11;       use Exp_Ch11;
*** 35,40 ****
--- 35,41 ----
  with Exp_Util;       use Exp_Util;
  with Fname;          use Fname;
  with Freeze;         use Freeze;
+ with Ghost;          use Ghost;
  with Itypes;         use Itypes;
  with Lib;            use Lib;
  with Lib.Xref;       use Lib.Xref;
*************** package body Sem_Util is
*** 1923,1928 ****
--- 1924,1933 ----
     -- Build_Elaboration_Entity --
     ------------------------------
  
+    --  WARNING: This routine manages Ghost regions. Return statements must be
+    --  replaced by gotos which jump to the end of the routine and restore the
+    --  Ghost mode.
+ 
     procedure Build_Elaboration_Entity (N : Node_Id; Spec_Id : Entity_Id) is
        Loc      : constant Source_Ptr := Sloc (N);
        Decl     : Node_Id;
*************** package body Sem_Util is
*** 1956,1961 ****
--- 1961,1972 ----
           end if;
        end Set_Package_Name;
  
+       --  Local variables
+ 
+       Saved_GM  : constant Ghost_Mode_Type := Ghost_Mode;
+       Saved_IGR : constant Node_Id         := Ignored_Ghost_Region;
+       --  Save the Ghost-related attributes to restore on exit
+ 
     --  Start of processing for Build_Elaboration_Entity
  
     begin
*************** package body Sem_Util is
*** 2003,2008 ****
--- 2014,2024 ----
           return;
        end if;
  
+       --  Elaboration entity is never a ghost object, regardless of the context
+       --  in which this routine is called.
+ 
+       Install_Ghost_Region (None, N);
+ 
        --  Here we need the elaboration entity
  
        --  Construct name of elaboration entity as xxx_E, where xxx is the unit
*************** package body Sem_Util is
*** 2043,2048 ****
--- 2059,2066 ----
  
        Set_Has_Qualified_Name       (Elab_Ent);
        Set_Has_Fully_Qualified_Name (Elab_Ent);
+ 
+       Restore_Ghost_Region (Saved_GM, Saved_IGR);
     end Build_Elaboration_Entity;
  
     --------------------------------
diff -Nrcpad gcc-16-20250713/gcc/ada/tbuild.adb gcc-16-20250720/gcc/ada/tbuild.adb
*** gcc-16-20250713/gcc/ada/tbuild.adb	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/ada/tbuild.adb	Sun Jul 20 22:32:08 2025
*************** package body Tbuild is
*** 926,936 ****
        --  conversion of an unchecked conversion. Extra unchecked conversions
        --  make the .dg output less readable. We can't do this in cases
        --  involving bitfields, because the sizes might not match. The
!       --  "not Is_Scalar_Type" checks avoid such cases.
  
        elsif Nkind (Expr) = N_Unchecked_Type_Conversion
!         and then not Is_Scalar_Type (Etype (Expr))
!         and then not Is_Scalar_Type (Typ)
        then
           Set_Subtype_Mark (Expr, New_Occurrence_Of (Typ, Loc));
           Result := Relocate_Node (Expr);
--- 926,936 ----
        --  conversion of an unchecked conversion. Extra unchecked conversions
        --  make the .dg output less readable. We can't do this in cases
        --  involving bitfields, because the sizes might not match. The
!       --  Is_Composite_Type checks avoid such cases.
  
        elsif Nkind (Expr) = N_Unchecked_Type_Conversion
!         and then Is_Composite_Type (Etype (Expr))
!         and then Is_Composite_Type (Typ)
        then
           Set_Subtype_Mark (Expr, New_Occurrence_Of (Typ, Loc));
           Result := Relocate_Node (Expr);
diff -Nrcpad gcc-16-20250713/gcc/attribs.cc gcc-16-20250720/gcc/attribs.cc
*** gcc-16-20250713/gcc/attribs.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/attribs.cc	Sun Jul 20 22:32:08 2025
*************** apply_tm_attr (tree fndecl, tree attr)
*** 1076,1096 ****
     it to CHAIN.  */
  
  tree
! make_attribute (const char *name, const char *arg_name, tree chain)
  {
!   tree attr_name;
!   tree attr_arg_name;
!   tree attr_args;
!   tree attr;
! 
!   attr_name = get_identifier (name);
!   attr_arg_name = build_string (strlen (arg_name), arg_name);
!   attr_args = tree_cons (NULL_TREE, attr_arg_name, NULL_TREE);
!   attr = tree_cons (attr_name, attr_args, chain);
    return attr;
  }
  
- 
  /* Common functions used for target clone support.  */
  
  /* Comparator function to be used in qsort routine to sort attribute
--- 1076,1090 ----
     it to CHAIN.  */
  
  tree
! make_attribute (string_slice name, string_slice arg_name, tree chain)
  {
!   tree attr_name = get_identifier_with_length (name.begin (), name.size ());
!   tree attr_arg_name = build_string (arg_name.size (), arg_name.begin ());
!   tree attr_args = tree_cons (NULL_TREE, attr_arg_name, NULL_TREE);
!   tree attr = tree_cons (attr_name, attr_args, chain);
    return attr;
  }
  
  /* Common functions used for target clone support.  */
  
  /* Comparator function to be used in qsort routine to sort attribute
diff -Nrcpad gcc-16-20250713/gcc/attribs.h gcc-16-20250720/gcc/attribs.h
*** gcc-16-20250713/gcc/attribs.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/attribs.h	Sun Jul 20 22:32:08 2025
*************** extern bool cxx11_attribute_p (const_tre
*** 45,51 ****
  extern tree get_attribute_name (const_tree);
  extern tree get_attribute_namespace (const_tree);
  extern void apply_tm_attr (tree, tree);
! extern tree make_attribute (const char *, const char *, tree);
  extern bool attribute_ignored_p (tree);
  extern bool attribute_ignored_p (const attribute_spec *const);
  extern bool any_nonignored_attribute_p (tree);
--- 45,51 ----
  extern tree get_attribute_name (const_tree);
  extern tree get_attribute_namespace (const_tree);
  extern void apply_tm_attr (tree, tree);
! extern tree make_attribute (string_slice, string_slice, tree);
  extern bool attribute_ignored_p (tree);
  extern bool attribute_ignored_p (const attribute_spec *const);
  extern bool any_nonignored_attribute_p (tree);
diff -Nrcpad gcc-16-20250713/gcc/auto-obstack.h gcc-16-20250720/gcc/auto-obstack.h
*** gcc-16-20250713/gcc/auto-obstack.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/auto-obstack.h	Sun Jul 20 22:32:08 2025
***************
*** 0 ****
--- 1,58 ----
+ /* RAII wrapper around obstack.
+    Copyright (C) 2024-2025 Free Software Foundation, Inc.
+    Contributed by David Malcolm <dmalcolm@redhat.com>.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_AUTO_OBSTACK_H
+ #define GCC_AUTO_OBSTACK_H
+ 
+ /* RAII wrapper around obstack.  */
+ 
+ struct auto_obstack
+ {
+   auto_obstack ()
+   {
+     obstack_init (&m_obstack);
+   }
+ 
+   ~auto_obstack ()
+   {
+     obstack_free (&m_obstack, NULL);
+   }
+ 
+   operator obstack & () { return m_obstack; }
+ 
+   void grow (const void *src, size_t length)
+   {
+     obstack_grow (&m_obstack, src, length);
+   }
+ 
+   void *object_base () const
+   {
+     return m_obstack.object_base;
+   }
+ 
+   size_t object_size () const
+   {
+     return obstack_object_size (&m_obstack);
+   }
+ 
+   obstack m_obstack;
+ };
+ 
+ #endif /* GCC_AUTO_OBSTACK_H */
diff -Nrcpad gcc-16-20250713/gcc/avoid-store-forwarding.cc gcc-16-20250720/gcc/avoid-store-forwarding.cc
*** gcc-16-20250713/gcc/avoid-store-forwarding.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/avoid-store-forwarding.cc	Sun Jul 20 22:32:08 2025
*************** generate_bit_insert_sequence (store_fwd_
*** 119,135 ****
    unsigned HOST_WIDE_INT bitsize = store_size * BITS_PER_UNIT;
    unsigned HOST_WIDE_INT start = store_info->offset * BITS_PER_UNIT;
  
-   /* Adjust START for machines with BITS_BIG_ENDIAN != BYTES_BIG_ENDIAN.
-      Given that the bytes will be reversed in this case, we need to
-      calculate the starting position from the end of the destination
-      register.  */
-   if (BITS_BIG_ENDIAN != BYTES_BIG_ENDIAN)
-     {
-       unsigned HOST_WIDE_INT load_mode_bitsize
- 	= (GET_MODE_BITSIZE (GET_MODE (dest))).to_constant ();
-       start = load_mode_bitsize - bitsize - start;
-     }
- 
    rtx mov_reg = store_info->mov_reg;
    store_bit_field (dest, bitsize, start, 0, 0, GET_MODE (mov_reg), mov_reg,
  		   false, false);
--- 119,124 ----
*************** process_store_forwarding (vec<store_fwd_
*** 248,258 ****
      {
        it->mov_reg = gen_reg_rtx (GET_MODE (it->store_mem));
        rtx_insn *insns = NULL;
!       const bool has_zero_offset = it->offset == 0;
  
        /* If we're eliminating the load then find the store with zero offset
  	 and use it as the base register to avoid a bit insert if possible.  */
!       if (load_elim && has_zero_offset)
  	{
  	  start_sequence ();
  
--- 237,250 ----
      {
        it->mov_reg = gen_reg_rtx (GET_MODE (it->store_mem));
        rtx_insn *insns = NULL;
!       const bool has_base_offset
! 	= known_eq (poly_uint64 (it->offset),
! 		    subreg_size_lowpart_offset (MEM_SIZE (it->store_mem),
! 						load_size));
  
        /* If we're eliminating the load then find the store with zero offset
  	 and use it as the base register to avoid a bit insert if possible.  */
!       if (load_elim && has_base_offset)
  	{
  	  start_sequence ();
  
diff -Nrcpad gcc-16-20250713/gcc/c/ChangeLog gcc-16-20250720/gcc/c/ChangeLog
*** gcc-16-20250713/gcc/c/ChangeLog	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/c/ChangeLog	Sun Jul 20 22:32:08 2025
***************
*** 1,3 ****
--- 1,27 ----
+ 2025-07-16  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 
+ 	* c-typeck.cc (handle_omp_array_sections): Use OMP_ITERATOR_DECL_P.
+ 	(c_finish_omp_clauses): Likewise.
+ 
+ 2025-07-15  Jakub Jelinek  <jakub@redhat.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c/44677
+ 	* c-parser.cc (c_parser_unary_expression): Clear DECL_READ_P
+ 	after default_function_array_read_conversion for
+ 	-Wunused-but-set-{parameter,variable}={2,3} on
+ 	PRE{IN,DE}CREMENT_EXPR argument.
+ 	(c_parser_postfix_expression_after_primary): Similarly for
+ 	POST{IN,DE}CREMENT_EXPR.
+ 	* c-decl.cc (pop_scope): Use OPT_Wunused_but_set_variable_
+ 	instead of OPT_Wunused_but_set_variable.
+ 	(finish_function): Use OPT_Wunused_but_set_parameter_
+ 	instead of OPT_Wunused_but_set_parameter.
+ 	* c-typeck.cc (mark_exp_read): Handle {PRE,POST}{IN,DE}CREMENT_EXPR
+ 	and don't handle it when cast to void.
+ 	(build_modify_expr): Clear DECL_READ_P after build_binary_op
+ 	for -Wunused-but-set-{parameter,variable}=3.
+ 
  2025-07-10  Qing Zhao  <qing.zhao@oracle.com>
  
  	* c-typeck.cc (build_access_with_size_for_counted_by): Update comments.
diff -Nrcpad gcc-16-20250713/gcc/c/c-decl.cc gcc-16-20250720/gcc/c/c-decl.cc
*** gcc-16-20250713/gcc/c/c-decl.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/c/c-decl.cc	Sun Jul 20 22:32:08 2025
*************** pop_scope (void)
*** 1363,1369 ****
  	case VAR_DECL:
  	  /* Warnings for unused variables.  */
  	  if ((!TREE_USED (p) || !DECL_READ_P (p))
! 	      && !warning_suppressed_p (p, OPT_Wunused_but_set_variable)
  	      && !DECL_IN_SYSTEM_HEADER (p)
  	      && DECL_NAME (p)
  	      && !DECL_ARTIFICIAL (p)
--- 1363,1369 ----
  	case VAR_DECL:
  	  /* Warnings for unused variables.  */
  	  if ((!TREE_USED (p) || !DECL_READ_P (p))
! 	      && !warning_suppressed_p (p, OPT_Wunused_but_set_variable_)
  	      && !DECL_IN_SYSTEM_HEADER (p)
  	      && DECL_NAME (p)
  	      && !DECL_ARTIFICIAL (p)
*************** pop_scope (void)
*** 1377,1383 ****
  		}
  	      else if (DECL_CONTEXT (p) == current_function_decl)
  		warning_at (DECL_SOURCE_LOCATION (p),
! 			    OPT_Wunused_but_set_variable,
  			    "variable %qD set but not used", p);
  	    }
  
--- 1377,1383 ----
  		}
  	      else if (DECL_CONTEXT (p) == current_function_decl)
  		warning_at (DECL_SOURCE_LOCATION (p),
! 			    OPT_Wunused_but_set_variable_,
  			    "variable %qD set but not used", p);
  	    }
  
*************** finish_function (location_t end_loc)
*** 11465,11473 ****
  	    && !DECL_READ_P (decl)
  	    && DECL_NAME (decl)
  	    && !DECL_ARTIFICIAL (decl)
! 	    && !warning_suppressed_p (decl, OPT_Wunused_but_set_parameter))
  	  warning_at (DECL_SOURCE_LOCATION (decl),
! 		      OPT_Wunused_but_set_parameter,
  		      "parameter %qD set but not used", decl);
      }
  
--- 11465,11473 ----
  	    && !DECL_READ_P (decl)
  	    && DECL_NAME (decl)
  	    && !DECL_ARTIFICIAL (decl)
! 	    && !warning_suppressed_p (decl, OPT_Wunused_but_set_parameter_))
  	  warning_at (DECL_SOURCE_LOCATION (decl),
! 		      OPT_Wunused_but_set_parameter_,
  		      "parameter %qD set but not used", decl);
      }
  
diff -Nrcpad gcc-16-20250713/gcc/c/c-parser.cc gcc-16-20250720/gcc/c/c-parser.cc
*** gcc-16-20250713/gcc/c/c-parser.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/c/c-parser.cc	Sun Jul 20 22:32:08 2025
*************** c_parser_unary_expression (c_parser *par
*** 10547,10561 ****
        c_parser_consume_token (parser);
        exp_loc = c_parser_peek_token (parser)->location;
        op = c_parser_cast_expression (parser, NULL);
! 
!       op = default_function_array_read_conversion (exp_loc, op);
        return parser_build_unary_op (op_loc, PREINCREMENT_EXPR, op);
      case CPP_MINUS_MINUS:
        c_parser_consume_token (parser);
        exp_loc = c_parser_peek_token (parser)->location;
        op = c_parser_cast_expression (parser, NULL);
! 
!       op = default_function_array_read_conversion (exp_loc, op);
        return parser_build_unary_op (op_loc, PREDECREMENT_EXPR, op);
      case CPP_AND:
        c_parser_consume_token (parser);
--- 10547,10577 ----
        c_parser_consume_token (parser);
        exp_loc = c_parser_peek_token (parser)->location;
        op = c_parser_cast_expression (parser, NULL);
!       if ((VAR_P (op.value) || TREE_CODE (op.value) == PARM_DECL)
! 	  && !DECL_READ_P (op.value)
! 	  && (VAR_P (op.value) ? warn_unused_but_set_variable
! 			       : warn_unused_but_set_parameter) > 1)
! 	{
! 	  op = default_function_array_read_conversion (exp_loc, op);
! 	  DECL_READ_P (op.value) = 0;
! 	}
!       else
! 	op = default_function_array_read_conversion (exp_loc, op);
        return parser_build_unary_op (op_loc, PREINCREMENT_EXPR, op);
      case CPP_MINUS_MINUS:
        c_parser_consume_token (parser);
        exp_loc = c_parser_peek_token (parser)->location;
        op = c_parser_cast_expression (parser, NULL);
!       if ((VAR_P (op.value) || TREE_CODE (op.value) == PARM_DECL)
! 	  && !DECL_READ_P (op.value)
! 	  && (VAR_P (op.value) ? warn_unused_but_set_variable
! 			       : warn_unused_but_set_parameter) > 1)
! 	{
! 	  op = default_function_array_read_conversion (exp_loc, op);
! 	  DECL_READ_P (op.value) = 0;
! 	}
!       else
! 	op = default_function_array_read_conversion (exp_loc, op);
        return parser_build_unary_op (op_loc, PREDECREMENT_EXPR, op);
      case CPP_AND:
        c_parser_consume_token (parser);
*************** c_parser_postfix_expression_after_primar
*** 13933,13939 ****
  	  start = expr.get_start ();
  	  finish = c_parser_peek_token (parser)->get_finish ();
  	  c_parser_consume_token (parser);
! 	  expr = default_function_array_read_conversion (expr_loc, expr);
  	  expr.value = build_unary_op (op_loc, POSTINCREMENT_EXPR,
  				       expr.value, false);
  	  set_c_expr_source_range (&expr, start, finish);
--- 13949,13965 ----
  	  start = expr.get_start ();
  	  finish = c_parser_peek_token (parser)->get_finish ();
  	  c_parser_consume_token (parser);
! 	  if ((VAR_P (expr.value) || TREE_CODE (expr.value) == PARM_DECL)
! 	      && !DECL_READ_P (expr.value)
! 	      && (VAR_P (expr.value) ? warn_unused_but_set_variable
! 				     : warn_unused_but_set_parameter) > 1
! 	      && TREE_CODE (TREE_TYPE (expr.value)) != ARRAY_TYPE)
! 	    {
! 	      expr = default_function_array_read_conversion (expr_loc, expr);
! 	      DECL_READ_P (expr.value) = 0;
! 	    }
! 	  else
! 	    expr = default_function_array_read_conversion (expr_loc, expr);
  	  expr.value = build_unary_op (op_loc, POSTINCREMENT_EXPR,
  				       expr.value, false);
  	  set_c_expr_source_range (&expr, start, finish);
*************** c_parser_postfix_expression_after_primar
*** 13945,13951 ****
  	  start = expr.get_start ();
  	  finish = c_parser_peek_token (parser)->get_finish ();
  	  c_parser_consume_token (parser);
! 	  expr = default_function_array_read_conversion (expr_loc, expr);
  	  expr.value = build_unary_op (op_loc, POSTDECREMENT_EXPR,
  				       expr.value, false);
  	  set_c_expr_source_range (&expr, start, finish);
--- 13971,13987 ----
  	  start = expr.get_start ();
  	  finish = c_parser_peek_token (parser)->get_finish ();
  	  c_parser_consume_token (parser);
! 	  if ((VAR_P (expr.value) || TREE_CODE (expr.value) == PARM_DECL)
! 	      && !DECL_READ_P (expr.value)
! 	      && (VAR_P (expr.value) ? warn_unused_but_set_variable
! 				     : warn_unused_but_set_parameter) > 1
! 	      && TREE_CODE (TREE_TYPE (expr.value)) != ARRAY_TYPE)
! 	    {
! 	      expr = default_function_array_read_conversion (expr_loc, expr);
! 	      DECL_READ_P (expr.value) = 0;
! 	    }
! 	  else
! 	    expr = default_function_array_read_conversion (expr_loc, expr);
  	  expr.value = build_unary_op (op_loc, POSTDECREMENT_EXPR,
  				       expr.value, false);
  	  set_c_expr_source_range (&expr, start, finish);
diff -Nrcpad gcc-16-20250713/gcc/c/c-typeck.cc gcc-16-20250720/gcc/c/c-typeck.cc
*** gcc-16-20250713/gcc/c/c-typeck.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/c/c-typeck.cc	Sun Jul 20 22:32:08 2025
*************** mark_exp_read (tree exp)
*** 2310,2323 ****
      case PARM_DECL:
        DECL_READ_P (exp) = 1;
        break;
      case ARRAY_REF:
      case COMPONENT_REF:
      case MODIFY_EXPR:
      case REALPART_EXPR:
      case IMAGPART_EXPR:
-     CASE_CONVERT:
      case ADDR_EXPR:
      case VIEW_CONVERT_EXPR:
        mark_exp_read (TREE_OPERAND (exp, 0));
        break;
      case COMPOUND_EXPR:
--- 2310,2339 ----
      case PARM_DECL:
        DECL_READ_P (exp) = 1;
        break;
+     CASE_CONVERT:
+       if (VOID_TYPE_P (TREE_TYPE (exp)))
+ 	switch (TREE_CODE (TREE_OPERAND (exp, 0)))
+ 	  {
+ 	  case PREINCREMENT_EXPR:
+ 	  case PREDECREMENT_EXPR:
+ 	  case POSTINCREMENT_EXPR:
+ 	  case POSTDECREMENT_EXPR:
+ 	    return;
+ 	  default:
+ 	    break;
+ 	  }
+       /* FALLTHRU */
      case ARRAY_REF:
      case COMPONENT_REF:
      case MODIFY_EXPR:
      case REALPART_EXPR:
      case IMAGPART_EXPR:
      case ADDR_EXPR:
      case VIEW_CONVERT_EXPR:
+     case PREINCREMENT_EXPR:
+     case PREDECREMENT_EXPR:
+     case POSTINCREMENT_EXPR:
+     case POSTDECREMENT_EXPR:
        mark_exp_read (TREE_OPERAND (exp, 0));
        break;
      case COMPOUND_EXPR:
*************** build_modify_expr (location_t location,
*** 7308,7315 ****
--- 7324,7344 ----
  		newrhs = build1 (EXCESS_PRECISION_EXPR, TREE_TYPE (rhs),
  				 newrhs);
  	    }
+ 	  bool clear_decl_read = false;
+ 	  if ((VAR_P (lhs) || TREE_CODE (lhs) == PARM_DECL)
+ 	      && !DECL_READ_P (lhs)
+ 	      && (VAR_P (lhs) ? warn_unused_but_set_variable
+ 			      : warn_unused_but_set_parameter) > 2)
+ 	    {
+ 	      mark_exp_read (newrhs);
+ 	      if (!DECL_READ_P (lhs))
+ 		clear_decl_read = true;
+ 	    }
+ 
  	  newrhs = build_binary_op (location,
  				    modifycode, lhs, newrhs, true);
+ 	  if (clear_decl_read)
+ 	    DECL_READ_P (lhs) = 0;
  
  	  /* The original type of the right hand side is no longer
  	     meaningful.  */
*************** handle_omp_array_sections (tree &c, enum
*** 15608,15616 ****
    tree *tp = &OMP_CLAUSE_DECL (c);
    if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
         || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_AFFINITY)
!       && TREE_CODE (*tp) == TREE_LIST
!       && TREE_PURPOSE (*tp)
!       && TREE_CODE (TREE_PURPOSE (*tp)) == TREE_VEC)
      tp = &TREE_VALUE (*tp);
    tree first = handle_omp_array_sections_1 (c, *tp, types,
  					    maybe_zero_len, first_non_one,
--- 15637,15643 ----
    tree *tp = &OMP_CLAUSE_DECL (c);
    if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
         || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_AFFINITY)
!       && OMP_ITERATOR_DECL_P (*tp))
      tp = &TREE_VALUE (*tp);
    tree first = handle_omp_array_sections_1 (c, *tp, types,
  					    maybe_zero_len, first_non_one,
*************** c_finish_omp_clauses (tree clauses, enum
*** 16807,16815 ****
  	  /* FALLTHRU */
  	case OMP_CLAUSE_AFFINITY:
  	  t = OMP_CLAUSE_DECL (c);
! 	  if (TREE_CODE (t) == TREE_LIST
! 	      && TREE_PURPOSE (t)
! 	      && TREE_CODE (TREE_PURPOSE (t)) == TREE_VEC)
  	    {
  	      if (TREE_PURPOSE (t) != last_iterators)
  		last_iterators_remove
--- 16834,16840 ----
  	  /* FALLTHRU */
  	case OMP_CLAUSE_AFFINITY:
  	  t = OMP_CLAUSE_DECL (c);
! 	  if (OMP_ITERATOR_DECL_P (t))
  	    {
  	      if (TREE_PURPOSE (t) != last_iterators)
  		last_iterators_remove
*************** c_finish_omp_clauses (tree clauses, enum
*** 16909,16918 ****
  		      break;
  		    }
  		}
! 	      if (TREE_CODE (OMP_CLAUSE_DECL (c)) == TREE_LIST
! 		  && TREE_PURPOSE (OMP_CLAUSE_DECL (c))
! 		  && (TREE_CODE (TREE_PURPOSE (OMP_CLAUSE_DECL (c)))
! 		      == TREE_VEC))
  		TREE_VALUE (OMP_CLAUSE_DECL (c)) = t;
  	      else
  		OMP_CLAUSE_DECL (c) = t;
--- 16934,16940 ----
  		      break;
  		    }
  		}
! 	      if (OMP_ITERATOR_DECL_P (OMP_CLAUSE_DECL (c)))
  		TREE_VALUE (OMP_CLAUSE_DECL (c)) = t;
  	      else
  		OMP_CLAUSE_DECL (c) = t;
diff -Nrcpad gcc-16-20250713/gcc/c-family/ChangeLog gcc-16-20250720/gcc/c-family/ChangeLog
*** gcc-16-20250713/gcc/c-family/ChangeLog	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/c-family/ChangeLog	Sun Jul 20 22:32:08 2025
***************
*** 1,3 ****
--- 1,29 ----
+ 2025-07-16  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 
+ 	* c-omp.cc (c_finish_omp_depobj): Use OMP_ITERATOR_DECL_P.
+ 
+ 2025-07-16  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* c-attribs.cc (handle_target_clones_attribute): Change to use
+ 	get_clone_versions.
+ 
+ 2025-07-16  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* c-format.cc (local_string_slice_node): New node type.
+ 	(asm_fprintf_char_table): New entry.
+ 	(init_dynamic_diag_info): Add support for string_slice.
+ 	* c-format.h (T_STRING_SLICE): New node type.
+ 
+ 2025-07-15  Jakub Jelinek  <jakub@redhat.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c/44677
+ 	* c-opts.cc (c_common_post_options): Change
+ 	warn_unused_but_set_parameter and warn_unused_but_set_variable
+ 	from 1 to 3 if they were set only implicitly.
+ 	* c-attribs.cc (build_attr_access_from_parms): Remove unused
+ 	but set variable nelts.
+ 
  2025-07-11  Jakub Jelinek  <jakub@redhat.com>
  
  	PR c++/119064
diff -Nrcpad gcc-16-20250713/gcc/c-family/c-attribs.cc gcc-16-20250720/gcc/c-family/c-attribs.cc
*** gcc-16-20250713/gcc/c-family/c-attribs.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/c-family/c-attribs.cc	Sun Jul 20 22:32:08 2025
*************** build_attr_access_from_parms (tree parms
*** 5858,5865 ****
  	     order.  */
  	  vblist = tree_cons (NULL_TREE, argvbs, vblist);
  
! 	  unsigned nelts = 0;
! 	  for (tree vb = argvbs; vb; vb = TREE_CHAIN (vb), ++nelts)
  	    {
  	      tree bound = TREE_VALUE (vb);
  	      if (const unsigned *psizpos = arg2pos.get (bound))
--- 5858,5864 ----
  	     order.  */
  	  vblist = tree_cons (NULL_TREE, argvbs, vblist);
  
! 	  for (tree vb = argvbs; vb; vb = TREE_CHAIN (vb))
  	    {
  	      tree bound = TREE_VALUE (vb);
  	      if (const unsigned *psizpos = arg2pos.get (bound))
*************** handle_target_clones_attribute (tree *no
*** 6141,6147 ****
  	    }
  	}
  
!       if (get_target_clone_attr_len (args) == -1)
  	{
  	  warning (OPT_Wattributes,
  		   "single %<target_clones%> attribute is ignored");
--- 6140,6148 ----
  	    }
  	}
  
!       auto_vec<string_slice> versions = get_clone_attr_versions (args, NULL);
! 
!       if (versions.length () == 1)
  	{
  	  warning (OPT_Wattributes,
  		   "single %<target_clones%> attribute is ignored");
diff -Nrcpad gcc-16-20250713/gcc/c-family/c-format.cc gcc-16-20250720/gcc/c-family/c-format.cc
*** gcc-16-20250713/gcc/c-family/c-format.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/c-family/c-format.cc	Sun Jul 20 22:32:08 2025
*************** static GTY(()) tree local_event_ptr_node
*** 70,75 ****
--- 70,76 ----
  static GTY(()) tree local_pp_element_ptr_node;
  static GTY(()) tree local_gimple_ptr_node;
  static GTY(()) tree local_cgraph_node_ptr_node;
+ static GTY(()) tree local_string_slice_node;
  static GTY(()) tree locus;
  
  static bool decode_format_attr (const_tree, tree, tree, function_format_info *,
*************** static const format_char_info asm_fprint
*** 770,775 ****
--- 771,777 ----
    { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q",  "c",  NULL }, \
    { "r",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "",    "//cR",   NULL }, \
    { "@",   1, STD_C89, { T_EVENT_PTR,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "", "\"",   NULL }, \
+   { "B",   1, STD_C89, { T_STRING_SLICE,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "q", "",   NULL }, \
    { "e",   1, STD_C89, { T_PP_ELEMENT_PTR,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "", "\"", NULL }, \
    { "<",   0, STD_C89, NOARGUMENTS, "",      "<",   NULL }, \
    { ">",   0, STD_C89, NOARGUMENTS, "",      ">",   NULL }, \
*************** init_dynamic_diag_info (void)
*** 5211,5216 ****
--- 5213,5223 ----
        || local_cgraph_node_ptr_node == void_type_node)
      local_cgraph_node_ptr_node = get_named_type ("cgraph_node");
  
+   /* Similar to the above but for string_slice*.  */
+   if (!local_string_slice_node
+       || local_string_slice_node == void_type_node)
+     local_string_slice_node = get_named_type ("string_slice");
+ 
    /* Similar to the above but for diagnostic_event_id_t*.  */
    if (!local_event_ptr_node
        || local_event_ptr_node == void_type_node)
diff -Nrcpad gcc-16-20250713/gcc/c-family/c-format.h gcc-16-20250720/gcc/c-family/c-format.h
*** gcc-16-20250713/gcc/c-family/c-format.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/c-family/c-format.h	Sun Jul 20 22:32:08 2025
*************** struct format_kind_info
*** 317,322 ****
--- 317,323 ----
  #define T89_G   { STD_C89, NULL, &local_gimple_ptr_node }
  #define T_CGRAPH_NODE   { STD_C89, NULL, &local_cgraph_node_ptr_node }
  #define T_EVENT_PTR    { STD_C89, NULL, &local_event_ptr_node }
+ #define T_STRING_SLICE    { STD_C89, NULL, &local_string_slice_node }
  #define T_PP_ELEMENT_PTR    { STD_C89, NULL, &local_pp_element_ptr_node }
  #define T89_T   { STD_C89, NULL, &local_tree_type_node }
  #define T89_V	{ STD_C89, NULL, T_V }
diff -Nrcpad gcc-16-20250713/gcc/c-family/c-omp.cc gcc-16-20250720/gcc/c-family/c-omp.cc
*** gcc-16-20250713/gcc/c-family/c-omp.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/c-family/c-omp.cc	Sun Jul 20 22:32:08 2025
*************** c_finish_omp_depobj (location_t loc, tre
*** 769,777 ****
  	  kind = OMP_CLAUSE_DEPEND_KIND (clause);
  	  t = OMP_CLAUSE_DECL (clause);
  	  gcc_assert (t);
! 	  if (TREE_CODE (t) == TREE_LIST
! 	      && TREE_PURPOSE (t)
! 	      && TREE_CODE (TREE_PURPOSE (t)) == TREE_VEC)
  	    {
  	      error_at (OMP_CLAUSE_LOCATION (clause),
  			"%<iterator%> modifier may not be specified on "
--- 769,775 ----
  	  kind = OMP_CLAUSE_DEPEND_KIND (clause);
  	  t = OMP_CLAUSE_DECL (clause);
  	  gcc_assert (t);
! 	  if (OMP_ITERATOR_DECL_P (t))
  	    {
  	      error_at (OMP_CLAUSE_LOCATION (clause),
  			"%<iterator%> modifier may not be specified on "
diff -Nrcpad gcc-16-20250713/gcc/c-family/c-opts.cc gcc-16-20250720/gcc/c-family/c-opts.cc
*** gcc-16-20250713/gcc/c-family/c-opts.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/c-family/c-opts.cc	Sun Jul 20 22:32:08 2025
*************** c_common_post_options (const char **pfil
*** 1226,1231 ****
--- 1226,1242 ----
    SET_OPTION_IF_UNSET (&global_options, &global_options_set,
  		       flag_range_for_ext_temps, cxx_dialect >= cxx23);
  
+   /* EnabledBy unfortunately can't specify value to use if set and
+      LangEnabledBy can't specify multiple options with &&.  For -Wunused
+      or -Wunused -Wextra we want these to default to 3 unless user specified
+      some other level explicitly.  */
+   if (warn_unused_but_set_parameter == 1)
+     SET_OPTION_IF_UNSET (&global_options, &global_options_set,
+ 			 warn_unused_but_set_parameter, 3);
+   if (warn_unused_but_set_variable == 1)
+     SET_OPTION_IF_UNSET (&global_options, &global_options_set,
+ 			 warn_unused_but_set_variable, 3);
+ 
    /* -fimmediate-escalation has no effect when immediate functions are not
       supported.  */
    if (flag_immediate_escalation && cxx_dialect < cxx20)
diff -Nrcpad gcc-16-20250713/gcc/cfgexpand.cc gcc-16-20250720/gcc/cfgexpand.cc
*** gcc-16-20250713/gcc/cfgexpand.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cfgexpand.cc	Sun Jul 20 22:32:08 2025
*************** expand_debug_expr (tree exp)
*** 5358,5364 ****
        return simplify_gen_binary (MULT, mode, op0, op1);
  
      case RDIV_EXPR:
!       gcc_assert (FLOAT_MODE_P (mode));
        /* Fall through.  */
      case TRUNC_DIV_EXPR:
      case EXACT_DIV_EXPR:
--- 5358,5365 ----
        return simplify_gen_binary (MULT, mode, op0, op1);
  
      case RDIV_EXPR:
!       gcc_assert (FLOAT_MODE_P (mode)
! 		  || ALL_FIXED_POINT_MODE_P (mode));
        /* Fall through.  */
      case TRUNC_DIV_EXPR:
      case EXACT_DIV_EXPR:
diff -Nrcpad gcc-16-20250713/gcc/cobol/ChangeLog gcc-16-20250720/gcc/cobol/ChangeLog
*** gcc-16-20250713/gcc/cobol/ChangeLog	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/ChangeLog	Sun Jul 20 22:32:08 2025
***************
*** 1,3 ****
--- 1,149 ----
+ 2025-07-15  Jakub Jelinek  <jakub@redhat.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c/44677
+ 	* gcobolspec.cc (lang_specific_driver): Remove unused but set variable
+ 	n_cobol_files.
+ 
+ 2025-07-14  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cobol1.cc (cobol_langhook_handle_option): Eliminate cppcheck warnings.
+ 	* dts.h: Likewise.
+ 	* except.cc (cbl_enabled_exceptions_t::dump): Likewise.
+ 	* gcobolspec.cc (lang_specific_driver): Likewise.
+ 	* genapi.cc (parser_file_merge): Likewise.
+ 	* gengen.cc (gg_unique_in_function): Likewise.
+ 	(gg_declare_variable): Likewise.
+ 	(gg_peek_fn_decl): Likewise.
+ 	(gg_define_function): Likewise.
+ 	* genmath.cc (set_up_on_exception_label): Likewise.
+ 	(set_up_compute_error_label): Likewise.
+ 	(arithmetic_operation): Likewise.
+ 	(fast_divide): Likewise.
+ 	* genutil.cc (get_and_check_refstart_and_reflen): Likewise.
+ 	(get_depending_on_value_from_odo): Likewise.
+ 	(get_data_offset): Likewise.
+ 	(get_binary_value): Likewise.
+ 	(process_this_exception): Likewise.
+ 	(copy_little_endian_into_place): Likewise.
+ 	(refer_is_clean): Likewise.
+ 	(refer_fill_depends): Likewise.
+ 	* genutil.h (process_this_exception): Likewise.
+ 	(copy_little_endian_into_place): Likewise.
+ 	(refer_is_clean): Likewise.
+ 	* lexio.cc (check_push_pop_directive): Likewise.
+ 	(check_source_format_directive): Likewise.
+ 	(location_in): Likewise.
+ 	(lexer_input): Likewise.
+ 	(cdftext::lex_open): Likewise.
+ 	(lexio_dialect_mf): Likewise.
+ 	(valid_sequence_area): Likewise.
+ 	(cdftext::free_form_reference_format): Likewise.
+ 	(cdftext::segment_line): Likewise.
+ 	* lexio.h (struct span_t): Likewise.
+ 	* scan_ante.h (trim_location): Likewise.
+ 	* symbols.cc (symbol_elem_cmp): Likewise.
+ 	(symbol_alphabet): Likewise.
+ 	(end_of_group): Likewise.
+ 	(cbl_field_t::attr_str): Likewise.
+ 	(symbols_update): Likewise.
+ 	(symbol_typedef_add): Likewise.
+ 	(symbol_field_add): Likewise.
+ 	(new_temporary_impl): Likewise.
+ 	(symbol_label_section_exists): Likewise.
+ 	(symbol_program_callables): Likewise.
+ 	(file_status_status_of): Likewise.
+ 	* symfind.cc (is_data_field): Likewise.
+ 	(finalize_symbol_map2): Likewise.
+ 	(class in_scope): Likewise.
+ 	(symbol_match2): Likewise.
+ 	* util.cc (get_current_dir_name): Likewise.
+ 	(gb4): Likewise.
+ 	(class cdf_directives_t): Likewise.
+ 	(cbl_field_t::report_invalid_initial_value): Likewise.
+ 	(literal_subscript_oob): Likewise.
+ 	(cbl_refer_t::str): Likewise.
+ 	(date_time_fmt): Likewise.
+ 	(class unique_stack): Likewise.
+ 	(cobol_set_pp_option): Likewise.
+ 	(cobol_filename): Likewise.
+ 	(cobol_filename_restore): Likewise.
+ 	(gcc_location_set_impl): Likewise.
+ 	(ydferror): Likewise.
+ 	(error_msg_direct): Likewise.
+ 	(yyerror): Likewise.
+ 	(cbl_unimplemented_at): Likewise.
+ 
+ 2025-07-13  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* Make-lang.in: Eliminate the .cc.o override.
+ 	* genapi.cc (level_88_helper): Eliminate cppcheck warning.
+ 	(get_level_88_domain): Likewise.
+ 	(get_class_condition_string): Likewise.
+ 	(parser_call_targets_dump): Likewise.
+ 	(parser_compile_ecs): Likewise.
+ 	(initialize_variable_internal): Likewise.
+ 	(move_tree): Likewise.
+ 	(combined_name): Likewise.
+ 	(assembler_label): Likewise.
+ 	(find_procedure): Likewise.
+ 	(parser_perform): Likewise.
+ 	(parser_perform_times): Likewise.
+ 	(internal_perform_through): Likewise.
+ 	(internal_perform_through_times): Likewise.
+ 	(psa_FldLiteralN): Likewise.
+ 	(psa_FldBlob): Likewise.
+ 	(parser_accept): Likewise.
+ 	(parser_accept_exception): Likewise.
+ 	(parser_accept_exception_end): Likewise.
+ 	(parser_accept_command_line): Likewise.
+ 	(parser_accept_envar): Likewise.
+ 	(parser_display_internal): Likewise.
+ 	(parser_display): Likewise.
+ 	(parser_assign): Likewise.
+ 	(parser_initialize_table): Likewise.
+ 	(parser_arith_error): Likewise.
+ 	(parser_arith_error_end): Likewise.
+ 	(parser_division): Likewise.
+ 	(label_fetch): Likewise.
+ 	(parser_label_label): Likewise.
+ 	(parser_label_goto): Likewise.
+ 	(parser_perform_start): Likewise.
+ 	(parser_perform_conditional): Likewise.
+ 	(parser_perform_conditional_end): Likewise.
+ 	(parser_perform_until): Likewise.
+ 	(parser_file_delete): Likewise.
+ 	(parser_intrinsic_subst): Likewise.
+ 	(create_lsearch_address_pairs): Likewise.
+ 	(parser_bsearch_start): Likewise.
+ 	(is_ascending_key): Likewise.
+ 	(parser_sort): Likewise.
+ 	(parser_file_sort): Likewise.
+ 	(parser_return_start): Likewise.
+ 	(parser_file_merge): Likewise.
+ 	(parser_string_overflow): Likewise.
+ 	(parser_unstring): Likewise.
+ 	(parser_string): Likewise.
+ 	(parser_call_exception): Likewise.
+ 	(create_and_call): Likewise.
+ 	(mh_identical): Likewise.
+ 	(move_helper): Likewise.
+ 	(binary_initial_from_float128): Likewise.
+ 	(initial_from_initial): Likewise.
+ 	(psa_FldLiteralA): Likewise.
+ 	(parser_local_add): Likewise.
+ 	(parser_symbol_add): Likewise.
+ 	* genapi.h (parser_display): Likewise.
+ 	* gengen.cc (gg_call_expr): Explict check for NULL_TREE.
+ 	(gg_call): Likewise.
+ 	* show_parse.h (SHOW_PARSE_LABEL_OK): Likewise.
+ 	(TRACE1_FIELD_VALUE): Likewise.
+ 	(CHECK_FIELD): Likewise.
+ 	(CHECK_FIELD2): Likewise.
+ 	(CHECK_LABEL): Likewise.
+ 	* util.cc (cbl_internal_error): Apply [[noreturn]] attribute.
+ 	* util.h (cbl_internal_error): Likewise.
+ 
  2025-07-11  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
  
  	PR cobol/120621
diff -Nrcpad gcc-16-20250713/gcc/cobol/cobol1.cc gcc-16-20250720/gcc/cobol/cobol1.cc
*** gcc-16-20250713/gcc/cobol/cobol1.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/cobol1.cc	Sun Jul 20 22:32:08 2025
*************** cobol_langhook_handle_option (size_t sco
*** 357,363 ****
              return true;
  
          case OPT_M:
! 	    cobol_set_pp_option('M');
              return true;
  
          case OPT_fstatic_call:
--- 357,363 ----
              return true;
  
          case OPT_M:
!             cobol_set_pp_option('M');
              return true;
  
          case OPT_fstatic_call:
*************** cobol_langhook_handle_option (size_t sco
*** 368,383 ****
              wsclear(cobol_default_byte);
              return true;
  
!         case OPT_fflex_debug:
              yy_flex_debug = 1;
              cobol_set_debugging( true, yy_debug == 1, cobol_trace_debug == 1 );
              return true;
          case OPT_fyacc_debug:
              yy_debug = 1;
              cobol_set_debugging(yy_flex_debug == 1,
                                  true,
                                  cobol_trace_debug == 1 );
              return true;
          case OPT_ftrace_debug:
              cobol_set_debugging( yy_flex_debug == 1, yy_debug == 1, true );
              return true;
--- 368,385 ----
              wsclear(cobol_default_byte);
              return true;
  
!         case OPT_fflex_debug: // cppcheck-suppress syntaxError // The need for this is a mystery
              yy_flex_debug = 1;
              cobol_set_debugging( true, yy_debug == 1, cobol_trace_debug == 1 );
              return true;
+ 
          case OPT_fyacc_debug:
              yy_debug = 1;
              cobol_set_debugging(yy_flex_debug == 1,
                                  true,
                                  cobol_trace_debug == 1 );
              return true;
+ 
          case OPT_ftrace_debug:
              cobol_set_debugging( yy_flex_debug == 1, yy_debug == 1, true );
              return true;
*************** cobol_langhook_handle_option (size_t sco
*** 406,416 ****
--- 408,420 ----
          case OPT_fsyntax_only:
            mode_syntax_only(identification_div_e);
            break;
+ 
          case OPT_preprocess:
            if( ! preprocess_filter_add(arg) ) {
              cbl_errx( "could not execute preprocessor %s", arg);
            }
            return true;
+ 
          case OPT_include:
            if( ! include_file_add(arg) ) {
              cbl_errx( "could not include %s", arg);
diff -Nrcpad gcc-16-20250713/gcc/cobol/dts.h gcc-16-20250720/gcc/cobol/dts.h
*** gcc-16-20250713/gcc/cobol/dts.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/dts.h	Sun Jul 20 22:32:08 2025
*************** namespace dts {
*** 110,115 ****
                      } );
      return true;
    }
! };
  
  
--- 110,115 ----
                      } );
      return true;
    }
! }
  
  
diff -Nrcpad gcc-16-20250713/gcc/cobol/except.cc gcc-16-20250720/gcc/cobol/except.cc
*** gcc-16-20250713/gcc/cobol/except.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/except.cc	Sun Jul 20 22:32:08 2025
*************** cbl_enabled_exceptions_t::dump() const {
*** 96,102 ****
      return;
    }
    int i = 1;
!   for( auto& elem : *this ) {
      dbgmsg("cbl_enabled_exceptions_t: %2d  {%s, %s, %lu}",
             i++,
             elem.location? "with location" : "  no location", 
--- 96,102 ----
      return;
    }
    int i = 1;
!   for( auto& elem : *this ) { // cppcheck-suppress constVariableReference
      dbgmsg("cbl_enabled_exceptions_t: %2d  {%s, %s, %lu}",
             i++,
             elem.location? "with location" : "  no location", 
diff -Nrcpad gcc-16-20250713/gcc/cobol/gcobolspec.cc gcc-16-20250720/gcc/cobol/gcobolspec.cc
*** gcc-16-20250713/gcc/cobol/gcobolspec.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/gcobolspec.cc	Sun Jul 20 22:32:08 2025
*************** lang_specific_driver (struct cl_decoded_
*** 142,150 ****
    int n_infiles = 0;
    int n_outfiles = 0;
  
-   // The number of input files when the language is "none" or "cobol"
-   int n_cobol_files = 0;
- 
    // saw_OPT_no_main means "don't expect -main"
    bool saw_OPT_no_main = false;
  
--- 142,147 ----
*************** lang_specific_driver (struct cl_decoded_
*** 234,244 ****
        case OPT_SPECIAL_input_file:
          no_files_error = false;
          n_infiles += 1;
-         if(    strcmp(language, "none")  == 0
-             || strcmp(language, "cobol") == 0 )
-           {
-           n_cobol_files += 1;
-           }
          if( strstr(decoded_options[i].orig_option_with_args_text, "libgcobol.a") )
            {
            // We have been given an explicit libgcobol.a.  We need to note that.
--- 231,236 ----
*************** lang_specific_driver (struct cl_decoded_
*** 529,535 ****
    // cl_decoded_option
  
    size_t new_option_count = new_opt.size();
!   struct cl_decoded_option *new_options = XNEWVEC (struct cl_decoded_option, new_option_count);
  
    for(size_t i=0; i<new_option_count; i++)
      {
--- 521,528 ----
    // cl_decoded_option
  
    size_t new_option_count = new_opt.size();
!   struct cl_decoded_option *new_options = XNEWVEC (struct cl_decoded_option,
!                                                     new_option_count);
  
    for(size_t i=0; i<new_option_count; i++)
      {
*************** lang_specific_driver (struct cl_decoded_
*** 539,545 ****
  #ifdef NOISY
    verbose = true;
  #endif
!   if( verbose && new_options != original_options )
      {
      fprintf(stderr, _("Driving: (" HOST_SIZE_T_PRINT_DEC ")\n"),
              (fmt_size_t)new_option_count);
--- 532,538 ----
  #ifdef NOISY
    verbose = true;
  #endif
!   if( verbose && new_options != original_options ) // cppcheck-suppress knownConditionTrueFalse
      {
      fprintf(stderr, _("Driving: (" HOST_SIZE_T_PRINT_DEC ")\n"),
              (fmt_size_t)new_option_count);
diff -Nrcpad gcc-16-20250713/gcc/cobol/genapi.cc gcc-16-20250720/gcc/cobol/genapi.cc
*** gcc-16-20250713/gcc/cobol/genapi.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/genapi.cc	Sun Jul 20 22:32:08 2025
*************** parser_file_merge(  cbl_file_t *workfile
*** 12315,12321 ****
    ELSE
      ENDIF
  
!   cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
    
    for(size_t i=0; i<ninputs; i++)
      {
--- 12315,12322 ----
    ELSE
      ENDIF
  
!   const cbl_enabled_exceptions_t&
!                                 enabled_exceptions( cdf_enabled_exceptions() );
    
    for(size_t i=0; i<ninputs; i++)
      {
diff -Nrcpad gcc-16-20250713/gcc/cobol/gengen.cc gcc-16-20250720/gcc/cobol/gengen.cc
*** gcc-16-20250713/gcc/cobol/gengen.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/gengen.cc	Sun Jul 20 22:32:08 2025
*************** struct cbl_translation_unit_t gg_trans_u
*** 140,146 ****
  // the compiler when a source code module makes that mistake.
  static std::unordered_set<std::string> names_we_have_seen;
  
! // This vector is used to process the function_decls at the point we leave 
  // the file.
  static std::vector<tree> finalized_function_decls;
  
--- 140,146 ----
  // the compiler when a source code module makes that mistake.
  static std::unordered_set<std::string> names_we_have_seen;
  
! // This vector is used to process the function_decls at the point we leave
  // the file.
  static std::vector<tree> finalized_function_decls;
  
*************** gg_create_assembler_name(const char *cob
*** 893,899 ****
  static char *
  gg_unique_in_function(const char *var_name, gg_variable_scope_t vs_scope)
    {
!   char *retval = (char *)xmalloc(strlen(var_name)+32);
    if( (vs_scope == vs_stack || vs_scope == vs_static) )
      {
      sprintf(retval, "%s." HOST_SIZE_T_PRINT_DEC, var_name,
--- 893,899 ----
  static char *
  gg_unique_in_function(const char *var_name, gg_variable_scope_t vs_scope)
    {
!   char *retval = static_cast<char *>(xmalloc(strlen(var_name)+32));
    if( (vs_scope == vs_stack || vs_scope == vs_static) )
      {
      sprintf(retval, "%s." HOST_SIZE_T_PRINT_DEC, var_name,
*************** gg_declare_variable(tree type_decl,
*** 1028,1037 ****
        break;
      }
    DECL_INITIAL(var_decl) = initial_value;
!   if( unique_name )
!     {
!     free(unique_name);
!     }
    return var_decl;
    }
  
--- 1028,1034 ----
        break;
      }
    DECL_INITIAL(var_decl) = initial_value;
!   free(unique_name);
    return var_decl;
    }
  
*************** gg_peek_fn_decl(const char *funcname, tr
*** 2521,2532 ****
      }
    return retval;
    }
!   
  tree
  gg_build_fn_decl(const char *funcname, tree fndecl_type)
    {
    tree function_decl;
!   
    std::string key = function_decl_key(funcname, fndecl_type);
    std::unordered_map<std::string, tree>::const_iterator it =
            map_of_function_decls.find(key);
--- 2518,2529 ----
      }
    return retval;
    }
! 
  tree
  gg_build_fn_decl(const char *funcname, tree fndecl_type)
    {
    tree function_decl;
! 
    std::string key = function_decl_key(funcname, fndecl_type);
    std::unordered_map<std::string, tree>::const_iterator it =
            map_of_function_decls.find(key);
*************** gg_define_function( tree return_type,
*** 2617,2629 ****
      }
    va_end(params);
  
    std::unordered_set<std::string>::const_iterator it =
            names_we_have_seen.find(funcname);
    if( it != names_we_have_seen.end() )
      {
      static int bum_counter = 1;
      // We have seen this name before.  Replace it with something unique:
-     char ach[32];
      sprintf(ach, "..no_dupes.%d", bum_counter++);
      funcname = ach;
      }
--- 2614,2626 ----
      }
    va_end(params);
  
+   char ach[32];
    std::unordered_set<std::string>::const_iterator it =
            names_we_have_seen.find(funcname);
    if( it != names_we_have_seen.end() )
      {
      static int bum_counter = 1;
      // We have seen this name before.  Replace it with something unique:
      sprintf(ach, "..no_dupes.%d", bum_counter++);
      funcname = ach;
      }
diff -Nrcpad gcc-16-20250713/gcc/cobol/genmath.cc gcc-16-20250720/gcc/cobol/genmath.cc
*** gcc-16-20250713/gcc/cobol/genmath.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/genmath.cc	Sun Jul 20 22:32:08 2025
*************** set_up_on_exception_label(cbl_label_t *a
*** 52,58 ****
      if( !arithmetic_label->structs.arith_error )
        {
        arithmetic_label->structs.arith_error
!         = (cbl_arith_error_t *)xmalloc(sizeof(struct cbl_arith_error_t) );
        // Set up the address pairs for this clause
        gg_create_goto_pair(&arithmetic_label->structs.arith_error->over.go_to,
                            &arithmetic_label->structs.arith_error->over.label);
--- 52,59 ----
      if( !arithmetic_label->structs.arith_error )
        {
        arithmetic_label->structs.arith_error
!         = static_cast<cbl_arith_error_t *>
!                                   (xmalloc(sizeof(struct cbl_arith_error_t)));
        // Set up the address pairs for this clause
        gg_create_goto_pair(&arithmetic_label->structs.arith_error->over.go_to,
                            &arithmetic_label->structs.arith_error->over.label);
*************** set_up_compute_error_label(cbl_label_t *
*** 72,79 ****
      if( !compute_label->structs.compute_error )
        {
        compute_label->structs.compute_error
!         = (cbl_compute_error_t *)
!           xmalloc(sizeof(struct cbl_compute_error_t) );
        compute_label->structs.compute_error->compute_error_code
          = gg_define_int(0);
        }
--- 73,80 ----
      if( !compute_label->structs.compute_error )
        {
        compute_label->structs.compute_error
!         = static_cast<cbl_compute_error_t *>
!           (xmalloc(sizeof(struct cbl_compute_error_t)));
        compute_label->structs.compute_error->compute_error_code
          = gg_define_int(0);
        }
*************** arithmetic_operation(size_t nC, cbl_num_
*** 112,118 ****
      {
      TRACE1_HEADER
      TRACE1_TEXT_ABC("calling ", operation, "")
-     TRACE1_END
      for(size_t ii=0; ii<nA; ii++)
        {
        TRACE1_INDENT
--- 113,118 ----
*************** arithmetic_operation(size_t nC, cbl_num_
*** 129,135 ****
                    build_int_cst_type(SIZE_T, ii));
        TRACE1_REFER("", B[ii], "");
        }
-     TRACE1_END
      }
  
    // We need to split up cbl_num_result_t into two arrays, one for the refer_t
--- 129,134 ----
*************** arithmetic_operation(size_t nC, cbl_num_
*** 223,229 ****
      {
      for(size_t ii=0; ii<nC; ii++)
        {
-       break;  // Breaks on ADD 1 SUB2 GIVING SUB4 both PIC S9(3) COMP
        TRACE1_INDENT
        gg_fprintf( trace_handle,
                    1, "result: C[%ld]: ",
--- 222,227 ----
*************** fast_divide(size_t nC, cbl_num_result_t
*** 663,670 ****
        // We now either divide into C[n] or assign dividend/divisor to C[n]:
        for(size_t i=0; i<nC; i++ )
          {
!         tree dest_type = tree_type_from_size(C[i].refer.field->data.capacity, 0);
!         tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
                                  refer_offset(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( nB )
--- 661,670 ----
        // We now either divide into C[n] or assign dividend/divisor to C[n]:
        for(size_t i=0; i<nC; i++ )
          {
!         tree dest_type =
!                        tree_type_from_size(C[i].refer.field->data.capacity, 0);
!         tree dest_addr = gg_add(member( C[i].refer.field->var_decl_node,
!                                         "data"),
                                  refer_offset(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( nB )
*************** fast_divide(size_t nC, cbl_num_result_t
*** 680,695 ****
            }
  
          // This is where we handle any remainder, keeping in mind that for
!         // nB != 0, the actual dividend is in the value we have named "divisor".
!         //
!         // And, yes, I hate comments like that, too.
  
          // We calculate the remainder by calculating
          //    dividend minus quotient * divisor
          if( remainder.field )
            {
!           tree dest_addr = gg_add(member(remainder.field->var_decl_node, "data"),
!                                   refer_offset(remainder));
            dest_type = tree_type_from_size(remainder.field->data.capacity, 0);
            ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
--- 680,694 ----
            }
  
          // This is where we handle any remainder, keeping in mind that for
!         // nB != 0, the actual dividend is in the value we have named
!         // "divisor".
  
          // We calculate the remainder by calculating
          //    dividend minus quotient * divisor
          if( remainder.field )
            {
!           dest_addr = gg_add( member(remainder.field->var_decl_node, "data"),
!                               refer_offset(remainder));
            dest_type = tree_type_from_size(remainder.field->data.capacity, 0);
            ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
diff -Nrcpad gcc-16-20250713/gcc/cobol/genutil.cc gcc-16-20250720/gcc/cobol/genutil.cc
*** gcc-16-20250713/gcc/cobol/genutil.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/genutil.cc	Sun Jul 20 22:32:08 2025
*************** get_and_check_refstart_and_reflen(  tree
*** 307,313 ****
                                      tree         reflen,  // LONG returned value
                                      cbl_refer_t &refer)
    {
!   cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
  
    if( !enabled_exceptions.match(ec_bound_ref_mod_e) )
      {
--- 307,314 ----
                                      tree         reflen,  // LONG returned value
                                      cbl_refer_t &refer)
    {
!   const cbl_enabled_exceptions_t&
!                                 enabled_exceptions( cdf_enabled_exceptions() );
  
    if( !enabled_exceptions.match(ec_bound_ref_mod_e) )
      {
*************** get_depending_on_value_from_odo(tree ret
*** 460,466 ****
        declarative with a RESUME NEXT STATEMENT, or before the default_condition
        processing can do a controlled exit.
        */
!   cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
    cbl_field_t *depending_on;
    depending_on = cbl_field_of(symbol_at(odo->occurs.depending_on));
  
--- 461,468 ----
        declarative with a RESUME NEXT STATEMENT, or before the default_condition
        processing can do a controlled exit.
        */
!   const cbl_enabled_exceptions_t&
!                                 enabled_exceptions( cdf_enabled_exceptions() );
    cbl_field_t *depending_on;
    depending_on = cbl_field_of(symbol_at(odo->occurs.depending_on));
  
*************** get_depending_on_value_from_odo(tree ret
*** 474,481 ****
      return;
      }
  
!   // Bounds checking is enabled, so we test the DEPENDING ON value to be between
!   // the lower and upper OCCURS limits:
    get_integer_value(retval,
                      depending_on,
                      NULL,
--- 476,483 ----
      return;
      }
  
!   // Bounds checking is enabled, so we test the DEPENDING ON value to be
!   // between the lower and upper OCCURS limits:
    get_integer_value(retval,
                      depending_on,
                      NULL,
*************** get_depending_on_value_from_odo(tree ret
*** 485,507 ****
      {
      // This needs to evaluate to an integer
      set_exception_code(ec_bound_odo_e);
!     gg_assign(retval, build_int_cst_type(TREE_TYPE(retval), odo->occurs.bounds.lower));
      gg_assign(var_decl_rdigits, integer_zero_node);
      }
    ELSE
      ENDIF
  
!   IF( retval, gt_op, build_int_cst_type(TREE_TYPE(retval), odo->occurs.bounds.upper) )
      {
      set_exception_code(ec_bound_odo_e);
!     gg_assign(retval, build_int_cst_type(TREE_TYPE(retval), odo->occurs.bounds.lower));
      }
    ELSE
      {
!     IF( retval, lt_op, build_int_cst_type(TREE_TYPE(retval), odo->occurs.bounds.lower) )
        {
        set_exception_code(ec_bound_odo_e);
!       gg_assign(retval, build_int_cst_type(TREE_TYPE(retval), odo->occurs.bounds.lower));
        }
      ELSE
        ENDIF
--- 487,514 ----
      {
      // This needs to evaluate to an integer
      set_exception_code(ec_bound_odo_e);
!     gg_assign(retval, build_int_cst_type( TREE_TYPE(retval),
!                                           odo->occurs.bounds.lower));
      gg_assign(var_decl_rdigits, integer_zero_node);
      }
    ELSE
      ENDIF
  
!   IF( retval, gt_op, build_int_cst_type(TREE_TYPE(retval),
!                                         odo->occurs.bounds.upper) )
      {
      set_exception_code(ec_bound_odo_e);
!     gg_assign(retval, build_int_cst_type( TREE_TYPE(retval),
!                                           odo->occurs.bounds.lower));
      }
    ELSE
      {
!     IF( retval, lt_op, build_int_cst_type(TREE_TYPE(retval),
!                                           odo->occurs.bounds.lower) )
        {
        set_exception_code(ec_bound_odo_e);
!       gg_assign(retval, build_int_cst_type( TREE_TYPE(retval),
!                                             odo->occurs.bounds.lower));
        }
      ELSE
        ENDIF
*************** get_data_offset(cbl_refer_t &refer,
*** 551,557 ****
    // We have a refer.
    // At the very least, we have an constant offset
    int all_flags = 0;
-   int all_flag_bit = 1;
  
    if( refer.nsubscript() )
      {
--- 558,563 ----
*************** get_data_offset(cbl_refer_t &refer,
*** 571,576 ****
--- 577,583 ----
      // Establish the field_t pointer for walking up through our ancestors:
      cbl_field_t *parent = refer.field;
  
+     int all_flag_bit = 1;
      // Note the backwards test, because refer->nsubscript is an unsigned value
      for(size_t i=refer.nsubscript()-1; i<refer.nsubscript(); i-- )
        {
*************** get_data_offset(cbl_refer_t &refer,
*** 604,610 ****
          }
        else
          {
!           cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
          if( !enabled_exceptions.match(ec_bound_subscript_e) )
            {
            // With no exception testing, just pick up the value
--- 611,618 ----
          }
        else
          {
!         const cbl_enabled_exceptions_t&
!                                 enabled_exceptions( cdf_enabled_exceptions() );
          if( !enabled_exceptions.match(ec_bound_subscript_e) )
            {
            // With no exception testing, just pick up the value
*************** get_data_offset(cbl_refer_t &refer,
*** 629,649 ****
              }
            ELSE
              {
!             IF( subscript, lt_op, gg_cast(TREE_TYPE(subscript), integer_one_node) )
                {
                // The subscript is too small
                set_exception_code(ec_bound_subscript_e);
!               gg_assign(subscript, build_int_cst_type(TREE_TYPE(subscript), 1));
                }
              ELSE
                {
                IF( subscript,
                    ge_op,
!                   build_int_cst_type(TREE_TYPE(subscript), parent->occurs.ntimes()) )
                  {
                  // The subscript is too large
                  set_exception_code(ec_bound_subscript_e);
!                 gg_assign(subscript, build_int_cst_type(TREE_TYPE(subscript), 1));
                  }
                ELSE
                  {
--- 637,661 ----
              }
            ELSE
              {
!             IF( subscript, lt_op, gg_cast(TREE_TYPE(subscript),
!                                           integer_one_node) )
                {
                // The subscript is too small
                set_exception_code(ec_bound_subscript_e);
!               gg_assign(subscript, build_int_cst_type(TREE_TYPE(subscript),
!                                                       1));
                }
              ELSE
                {
                IF( subscript,
                    ge_op,
!                   build_int_cst_type( TREE_TYPE(subscript),
!                                       parent->occurs.ntimes()) )
                  {
                  // The subscript is too large
                  set_exception_code(ec_bound_subscript_e);
!                 gg_assign(subscript, build_int_cst_type(TREE_TYPE(subscript),
!                                                         1));
                  }
                ELSE
                  {
*************** get_data_offset(cbl_refer_t &refer,
*** 658,673 ****
  
        all_flag_bit <<= 1;
  
!       // Although we strictly don't need to look at the ODO value at this point,
!       // we do want it checked for the purposes of ec-bound-odo
  
!       cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
  
        if( enabled_exceptions.match(ec_bound_odo_e) )
          {
          if( parent->occurs.depending_on )
            {
!           static tree value64 = gg_define_variable(LONG, ".._gdos_value64", vs_file_static);
            cbl_field_t *odo = symbol_find_odo(parent);
            get_depending_on_value_from_odo(value64, odo);
            }
--- 670,688 ----
  
        all_flag_bit <<= 1;
  
!       // Although we strictly don't need to look at the ODO value at this
!       // point, we do want it checked for the purposes of ec-bound-odo
  
!       const cbl_enabled_exceptions_t&
!                                 enabled_exceptions( cdf_enabled_exceptions() );
  
        if( enabled_exceptions.match(ec_bound_odo_e) )
          {
          if( parent->occurs.depending_on )
            {
!           static tree value64 = gg_define_variable( LONG,
!                                                     ".._gdos_value64",
!                                                     vs_file_static);
            cbl_field_t *odo = symbol_find_odo(parent);
            get_depending_on_value_from_odo(value64, odo);
            }
*************** get_binary_value( tree value,
*** 1244,1263 ****
        break;
        }
  
-     case FldAlphanumeric:
-       {
- 
-       }
- 
- 
      default:
        {
!       fprintf(stderr, "%s(): We know not how to"
!                       " get a binary value from %s\n",
!                       __func__,
!                       cbl_field_type_str(field->type) );
        abort();
!       break;
        }
      }
  
--- 1259,1273 ----
        break;
        }
  
      default:
        {
!       char *err = xasprintf("%s(): We know not how to"
!                             " get a binary value from %s\n",
!                             __func__,
!                             cbl_field_type_str(field->type) );
!       cbl_internal_error("%s", err);
        abort();
!       // break; // break not needed after abort();
        }
      }
  
*************** set_exception_code_func(ec_type_t ec, in
*** 1673,1681 ****
    }
  
  bool
! process_this_exception(ec_type_t ec)
    {
!   cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
    bool retval;
    if( enabled_exceptions.match(ec) || !skip_exception_processing )
      {
--- 1683,1691 ----
    }
  
  bool
! process_this_exception(const ec_type_t ec)
    {
!   const cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
    bool retval;
    if( enabled_exceptions.match(ec) || !skip_exception_processing )
      {
*************** copy_little_endian_into_place(cbl_field_
*** 1707,1713 ****
                                tree value,
                                int rhs_rdigits,
                                bool check_for_error,
!                               tree &size_error)
    {
    if( check_for_error )
      {
--- 1717,1723 ----
                                tree value,
                                int rhs_rdigits,
                                bool check_for_error,
!                         const tree &size_error)
    {
    if( check_for_error )
      {
*************** get_literal_string(cbl_field_t *field)
*** 1933,1939 ****
    }
  
  bool
! refer_is_clean(cbl_refer_t &refer)
    {
    if( !refer.field || refer.field->type == FldLiteralN )
      {
--- 1943,1949 ----
    }
  
  bool
! refer_is_clean(const cbl_refer_t &refer)
    {
    if( !refer.field || refer.field->type == FldLiteralN )
      {
*************** refer_refmod_length(cbl_refer_t &refer)
*** 1980,1986 ****
  
  static
  tree // size_t
! refer_fill_depends(cbl_refer_t &refer)
    {
    REFER("");
    // This returns a positive number which is the amount a depends-limited
--- 1990,1996 ----
  
  static
  tree // size_t
! refer_fill_depends(const cbl_refer_t &refer)
    {
    REFER("");
    // This returns a positive number which is the amount a depends-limited
diff -Nrcpad gcc-16-20250713/gcc/cobol/genutil.h gcc-16-20250720/gcc/cobol/genutil.h
*** gcc-16-20250713/gcc/cobol/genutil.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/genutil.h	Sun Jul 20 22:32:08 2025
*************** void      set_exception_code_func(ec_typ
*** 118,124 ****
                                    int line,
                                    int from_raise_statement=0);
  #define set_exception_code(ec) set_exception_code_func(ec, __LINE__)
! bool      process_this_exception(ec_type_t ec);
  #define   CHECK_FOR_FRACTIONAL_DIGITS true
  void      get_integer_value(tree value,  // This is always a LONG
                              cbl_field_t *field,
--- 118,124 ----
                                    int line,
                                    int from_raise_statement=0);
  #define set_exception_code(ec) set_exception_code_func(ec, __LINE__)
! bool      process_this_exception(const ec_type_t ec);
  #define   CHECK_FOR_FRACTIONAL_DIGITS true
  void      get_integer_value(tree value,  // This is always a LONG
                              cbl_field_t *field,
*************** void      copy_little_endian_into_place(
*** 130,136 ****
                                          tree value,
                                          int rhs_rdigits,
                                          bool check_for_error,
!                                         tree &size_error);
  tree      build_array_of_size_t( size_t  N,
                                   const size_t *values);
  void      parser_display_internal_field(tree file_descriptor,
--- 130,136 ----
                                          tree value,
                                          int rhs_rdigits,
                                          bool check_for_error,
!                                   const tree &size_error);
  tree      build_array_of_size_t( size_t  N,
                                   const size_t *values);
  void      parser_display_internal_field(tree file_descriptor,
*************** void      parser_display_internal_field(
*** 138,144 ****
                                          bool advance=DISPLAY_NO_ADVANCE);
  char     *get_literal_string(cbl_field_t *field);
  
! bool      refer_is_clean(cbl_refer_t &refer);
  
  tree      refer_offset(cbl_refer_t &refer,
                         int *pflags=NULL);
--- 138,144 ----
                                          bool advance=DISPLAY_NO_ADVANCE);
  char     *get_literal_string(cbl_field_t *field);
  
! bool      refer_is_clean(const cbl_refer_t &refer);
  
  tree      refer_offset(cbl_refer_t &refer,
                         int *pflags=NULL);
diff -Nrcpad gcc-16-20250713/gcc/cobol/lexio.cc gcc-16-20250720/gcc/cobol/lexio.cc
*** gcc-16-20250713/gcc/cobol/lexio.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/lexio.cc	Sun Jul 20 22:32:08 2025
*************** check_push_pop_directive( filespan_t& mf
*** 344,350 ****
    std::swap(*mfile.eol, eol); // see implementation for excuses
    bool ok = regex_search(p, const_cast<const char *>(mfile.eol), cm, re);
    std::swap(*mfile.eol, eol);
!   
    if( ok ) {
      gcc_assert(cm.size() > 1);
      bool push = TOUPPER(cm[1].first[1]) == 'U';
--- 344,350 ----
    std::swap(*mfile.eol, eol); // see implementation for excuses
    bool ok = regex_search(p, const_cast<const char *>(mfile.eol), cm, re);
    std::swap(*mfile.eol, eol);
! 
    if( ok ) {
      gcc_assert(cm.size() > 1);
      bool push = TOUPPER(cm[1].first[1]) == 'U';
*************** check_source_format_directive( filespan_
*** 400,406 ****
    std::swap(*mfile.eol, eol); // see implementation for excuses
    bool ok = regex_search(p, const_cast<const char *>(mfile.eol), cm, re);
    std::swap(*mfile.eol, eol);
!   
    if( ok ) {
      gcc_assert(cm.size() > 1);
      switch( cm[3].length() ) {
--- 400,406 ----
    std::swap(*mfile.eol, eol); // see implementation for excuses
    bool ok = regex_search(p, const_cast<const char *>(mfile.eol), cm, re);
    std::swap(*mfile.eol, eol);
! 
    if( ok ) {
      gcc_assert(cm.size() > 1);
      switch( cm[3].length() ) {
*************** check_source_format_directive( filespan_
*** 417,423 ****
  
      dbgmsg( "%s:%d: %s format set, on line " HOST_SIZE_T_PRINT_UNSIGNED,
              __func__, __LINE__,
!             cdf_source_format().description(), 
              (fmt_size_t)mfile.lineno() );
      char *bol = cdf_source_format().is_fixed()? mfile.cur : const_cast<char*>(cm[0].first);
      gcc_assert(cm[0].second <= mfile.eol);
--- 417,423 ----
  
      dbgmsg( "%s:%d: %s format set, on line " HOST_SIZE_T_PRINT_UNSIGNED,
              __func__, __LINE__,
!             cdf_source_format().description(),
              (fmt_size_t)mfile.lineno() );
      char *bol = cdf_source_format().is_fixed()? mfile.cur : const_cast<char*>(cm[0].first);
      gcc_assert(cm[0].second <= mfile.eol);
*************** location_in( const filespan_t& mfile, co
*** 941,947 ****
    gcc_assert(mfile.cur <= cm.first && cm.second <= mfile.eodata);
    auto nline = std::count(cm.first, cm.second, '\n');
    if( nline ) {
!     gcc_assert(loc.first_line < nline);
      loc.first_line -= nline;
      auto p = static_cast<const char*>(memrchr(cm.first, '\n', cm.length()));
      loc.last_column = (cm.second) - p;
--- 941,947 ----
    gcc_assert(mfile.cur <= cm.first && cm.second <= mfile.eodata);
    auto nline = std::count(cm.first, cm.second, '\n');
    if( nline ) {
!     gcc_assert(nline < loc.first_line);
      loc.first_line -= nline;
      auto p = static_cast<const char*>(memrchr(cm.first, '\n', cm.length()));
      loc.last_column = (cm.second) - p;
*************** lexer_input( char buf[], int max_size, F
*** 1379,1391 ****
    for( auto p = mfile.cur; p < next; *output.pos++ = *p++ ) {
      static bool at_bol = false;
      if( at_bol ) {
!       auto nonblank = std::find_if( p, next,
                                      []( char ch ) {
                                        return !isblank(ch); } );
!       if( nonblank + 1 < next ) {
!         if( *nonblank == '\r' ) nonblank++; // Windows
!         if( *nonblank == '\n' ) {
!           p = nonblank;
            continue;
          }
        }
--- 1379,1391 ----
    for( auto p = mfile.cur; p < next; *output.pos++ = *p++ ) {
      static bool at_bol = false;
      if( at_bol ) {
!       auto nonblank_l = std::find_if( p, next,
                                      []( char ch ) {
                                        return !isblank(ch); } );
!       if( nonblank_l + 1 < next ) {
!         if( *nonblank_l == '\r' ) nonblank_l++; // Windows
!         if( *nonblank_l == '\n' ) {
!           p = nonblank_l;
            continue;
          }
        }
*************** cdftext::lex_open( const char filename[]
*** 1513,1519 ****
  
    // Process any files supplied by the -include command-line option.
    for( auto name : included_files ) {
-     int input;
      if( -1 == (input = open(name, O_RDONLY)) ) {
        yyerrorvl(1, "", "cannot open -include file %s", name);
        continue;
--- 1513,1518 ----
*************** bool lexio_dialect_mf();
*** 1686,1692 ****
   */
  static const char *
  valid_sequence_area( const char *data, const char *eodata ) {
!   
    for( const char *p = data;
         (p = std::find_if(p, eodata, is_p)) != eodata;
         p++ )
--- 1685,1691 ----
   */
  static const char *
  valid_sequence_area( const char *data, const char *eodata ) {
! 
    for( const char *p = data;
         (p = std::find_if(p, eodata, is_p)) != eodata;
         p++ )
*************** valid_sequence_area( const char *data, c
*** 1709,1715 ****
        }
      }
    }
!   return nullptr;  
  }
  
  /*
--- 1708,1714 ----
        }
      }
    }
!   return nullptr;
  }
  
  /*
*************** cdftext::free_form_reference_format( int
*** 1745,1751 ****
    } current( mfile.data );
  
    /*
!    * Infer source code format. 
     */
    if( cdf_source_format().inference_pending()  ) {
      const char *bol = valid_sequence_area(mfile.data, mfile.eodata);
--- 1744,1750 ----
    } current( mfile.data );
  
    /*
!    * Infer source code format.
     */
    if( cdf_source_format().inference_pending()  ) {
      const char *bol = valid_sequence_area(mfile.data, mfile.eodata);
*************** cdftext::segment_line( filespan_t& mfile
*** 1983,1997 ****
      struct { unsigned long ante, post; } lineno = {
        gb4(mfile.lineno()), gb4(mfile.lineno() + segment.after.nlines())
      };
!     char *directive = lineno.ante == lineno.post?
        nullptr : xasprintf("\n#line %lu \"%s\"\n",
                            lineno.ante, cobol_filename());
  
!     if( directive ) 
        output.push_back( span_t(strlen(directive), directive) );
      output.push_back( span_t(mfile.cur, segment.before.p) );
      output.push_back( span_t(segment.after.p, segment.after.pend ) );
!     if( directive ) 
        output.push_back( span_t(strlen(directive), directive) );
  
      mfile.cur = const_cast<char*>(segment.before.pend);
--- 1982,1996 ----
      struct { unsigned long ante, post; } lineno = {
        gb4(mfile.lineno()), gb4(mfile.lineno() + segment.after.nlines())
      };
!     const char *directive = lineno.ante == lineno.post?
        nullptr : xasprintf("\n#line %lu \"%s\"\n",
                            lineno.ante, cobol_filename());
  
!     if( directive )
        output.push_back( span_t(strlen(directive), directive) );
      output.push_back( span_t(mfile.cur, segment.before.p) );
      output.push_back( span_t(segment.after.p, segment.after.pend ) );
!     if( directive )
        output.push_back( span_t(strlen(directive), directive) );
  
      mfile.cur = const_cast<char*>(segment.before.pend);
diff -Nrcpad gcc-16-20250713/gcc/cobol/lexio.h gcc-16-20250720/gcc/cobol/lexio.h
*** gcc-16-20250713/gcc/cobol/lexio.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/lexio.h	Sun Jul 20 22:32:08 2025
*************** struct span_t {
*** 244,251 ****
      return span_t(output, eout);
    }
    const char * has_nul() const {
!     auto p = std::find(this->p, pend, '\0');
!     return p != pend? p : NULL;
    }
  
    bool at_eol() const {
--- 244,251 ----
      return span_t(output, eout);
    }
    const char * has_nul() const {
!     auto p_l = std::find(this->p, pend, '\0');
!     return p_l != pend? p_l : NULL;
    }
  
    bool at_eol() const {
diff -Nrcpad gcc-16-20250713/gcc/cobol/scan_ante.h gcc-16-20250720/gcc/cobol/scan_ante.h
*** gcc-16-20250713/gcc/cobol/scan_ante.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/scan_ante.h	Sun Jul 20 22:32:08 2025
*************** trim_location( int nkeep) {
*** 490,496 ****
           (fmt_size_t)nline, (fmt_size_t)rescan.size());
    if( nline ) {
      gcc_assert( yylloc.first_line + nline <= yylloc.last_line );
!     yylloc.last_line =- int(nline);
      char *p = static_cast<char*>(memrchr(rescan.p, '\n', rescan.size()));
      yylloc.last_column = rescan.pend - ++p;
      return;
--- 490,497 ----
           (fmt_size_t)nline, (fmt_size_t)rescan.size());
    if( nline ) {
      gcc_assert( yylloc.first_line + nline <= yylloc.last_line );
!     yylloc.last_line -= int(nline);
!     gcc_assert( yylloc.first_line <= yylloc.last_line );
      char *p = static_cast<char*>(memrchr(rescan.p, '\n', rescan.size()));
      yylloc.last_column = rescan.pend - ++p;
      return;
diff -Nrcpad gcc-16-20250713/gcc/cobol/symbols.cc gcc-16-20250720/gcc/cobol/symbols.cc
*** gcc-16-20250713/gcc/cobol/symbols.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/symbols.cc	Sun Jul 20 22:32:08 2025
*************** symbol_elem_cmp( const void *K, const vo
*** 500,512 ****
        }
        return strcasecmp(key.name, elem.name);
      }
!     break;
    case SymSpecial:
      return special_pair_cmp(k->elem.special, e->elem.special)? 0 : 1;
!     break;
    case SymAlphabet:
      return strcasecmp(k->elem.alphabet.name, e->elem.alphabet.name);
!     break;
    case SymFile:
      // If the key is global, so must be the found element.
      if( (cbl_file_of(k)->attr & global_e) == global_e &&
--- 500,512 ----
        }
        return strcasecmp(key.name, elem.name);
      }
!     // break; // This break not needed if all options do a return.
    case SymSpecial:
      return special_pair_cmp(k->elem.special, e->elem.special)? 0 : 1;
!     // break; // This break not needed after return.
    case SymAlphabet:
      return strcasecmp(k->elem.alphabet.name, e->elem.alphabet.name);
!     // break; // This break not needed after return.
    case SymFile:
      // If the key is global, so must be the found element.
      if( (cbl_file_of(k)->attr & global_e) == global_e &&
*************** symbol_elem_cmp( const void *K, const vo
*** 514,520 ****
        return 1;
      }
      return strcasecmp(k->elem.file.name, e->elem.file.name);
!     break;
    }
    assert(k->type == SymField);
  
--- 514,520 ----
        return 1;
      }
      return strcasecmp(k->elem.file.name, e->elem.file.name);
!     // break; // This break not needed after return.
    }
    assert(k->type == SymField);
  
*************** symbol_special( size_t program, const ch
*** 672,678 ****
  struct symbol_elem_t *
  symbol_alphabet( size_t program, const char name[] )
  {
!   cbl_alphabet_t alphabet(YYLTYPE(), custom_encoding_e);
    assert(strlen(name) < sizeof alphabet.name);
    strcpy(alphabet.name, name);
  
--- 672,678 ----
  struct symbol_elem_t *
  symbol_alphabet( size_t program, const char name[] )
  {
!   cbl_alphabet_t alphabet(YYLTYPE(), custom_encoding_e); // cppcheck-suppress syntaxError
    assert(strlen(name) < sizeof alphabet.name);
    strcpy(alphabet.name, name);
  
*************** end_of_group( size_t igroup ) {
*** 931,937 ****
        if( e->program != group->program ) return isym;
        if( e->type == SymLabel ) return isym; // end of data division
        if( e->type == SymField ) {
!         const auto f = cbl_field_of(e);
          if( f->level == LEVEL77 || f->level == 66 ) return isym;
          if( f->level == 1 && f->parent != igroup ) {
            return isym;
--- 931,937 ----
        if( e->program != group->program ) return isym;
        if( e->type == SymLabel ) return isym; // end of data division
        if( e->type == SymField ) {
!         const cbl_field_t * f = cbl_field_of(e);
          if( f->level == LEVEL77 || f->level == 66 ) return isym;
          if( f->level == 1 && f->parent != igroup ) {
            return isym;
*************** static struct symbol_elem_t *
*** 1174,1180 ****
          // If an 01 record exists for the FD/SD, use its capacity as the
          // default_record capacity.
          if( p != symbols_end() ) {
!           const auto record = cbl_field_of(p);
            assert(record->level == 1);
            e = calculate_capacity(p);
            auto record_size = std::max(record->data.memsize,
--- 1174,1180 ----
          // If an 01 record exists for the FD/SD, use its capacity as the
          // default_record capacity.
          if( p != symbols_end() ) {
!           const cbl_field_t * record = cbl_field_of(p);
            assert(record->level == 1);
            e = calculate_capacity(p);
            auto record_size = std::max(record->data.memsize,
*************** static struct symbol_elem_t *
*** 1262,1268 ****
  
      // If group has a parent that is a record area, expand it, too.
      if( 0 < group->parent ) {
!       auto redefined = symbol_redefines(group);
        if( redefined && is_record_area(redefined) ) {
          if( redefined->data.capacity < group->data.memsize ) {
            redefined->data.capacity = group->data.memsize;
--- 1262,1268 ----
  
      // If group has a parent that is a record area, expand it, too.
      if( 0 < group->parent ) {
!       redefined = symbol_redefines(group);
        if( redefined && is_record_area(redefined) ) {
          if( redefined->data.capacity < group->data.memsize ) {
            redefined->data.capacity = group->data.memsize;
*************** cbl_field_t::attr_str( const std::vector
*** 1434,1444 ****
    const char *sep = "";
    char *out = NULL;
  
!   for( auto attr : attrs ) {
      char *part = out;
!     if( has_attr(attr) ) {
        int erc = asprintf(&out, "%s%s%s",
!                          part? part : "", sep, cbl_field_attr_str(attr));
        if( -1 == erc ) return part;
        free(part);
        sep = ", ";
--- 1434,1444 ----
    const char *sep = "";
    char *out = NULL;
  
!   for( auto attr_l : attrs ) {
      char *part = out;
!     if( has_attr(attr_l) ) {
        int erc = asprintf(&out, "%s%s%s",
!                          part? part : "", sep, cbl_field_attr_str(attr_l));
        if( -1 == erc ) return part;
        free(part);
        sep = ", ";
*************** symbols_update( size_t first, bool parse
*** 1745,1751 ****
  
      bool size_invalid = field->data.memsize > 0 && symbol_redefines(field);
      if( size_invalid ) { // redefine of record area is ok
!       const auto redefined = symbol_redefines(field);
        size_invalid = ! is_record_area(redefined);
      }
      if( !field->is_valid() || size_invalid )
--- 1745,1751 ----
  
      bool size_invalid = field->data.memsize > 0 && symbol_redefines(field);
      if( size_invalid ) { // redefine of record area is ok
!       const cbl_field_t * redefined = symbol_redefines(field);
        size_invalid = ! is_record_area(redefined);
      }
      if( !field->is_valid() || size_invalid )
*************** symbols_update( size_t first, bool parse
*** 1828,1834 ****
      }
  
      // Verify REDEFINing field has no ODO components
!     const auto parent = symbol_redefines(field);
      if( parent && !is_record_area(parent) && is_variable_length(field) ) {
        ERROR_FIELD(field, "line %d: REDEFINES field %s cannot be variable length",
                 field->line, field->name);
--- 1828,1834 ----
      }
  
      // Verify REDEFINing field has no ODO components
!     const cbl_field_t * parent = symbol_redefines(field);
      if( parent && !is_record_area(parent) && is_variable_length(field) ) {
        ERROR_FIELD(field, "line %d: REDEFINES field %s cannot be variable length",
                 field->line, field->name);
*************** symbol_typedef_add( size_t program, stru
*** 2470,2476 ****
    auto e = symbols_end() - 1;
    assert( symbols_begin() < e );
    if( e->type == SymField ) {
!     const auto f = cbl_field_of(e);
      if( f == field ) return e;
    }
  
--- 2470,2476 ----
    auto e = symbols_end() - 1;
    assert( symbols_begin() < e );
    if( e->type == SymField ) {
!     const cbl_field_t * f = cbl_field_of(e);
      if( f == field ) return e;
    }
  
*************** symbol_field_add( size_t program, struct
*** 2520,2526 ****
      if( is_numeric(parent->usage) && parent->data.capacity > 0 ) {
        field->type = parent->usage;
        field->data = parent->data;
!       field->data = 0;
        field->data.initial = NULL;
      }
    }
--- 2520,2527 ----
      if( is_numeric(parent->usage) && parent->data.capacity > 0 ) {
        field->type = parent->usage;
        field->data = parent->data;
!       field->data = 0;  // cppcheck-suppress redundantAssignment
!       //                // cppcheck doesn't understand multiple overloaded operator=
        field->data.initial = NULL;
      }
    }
*************** static cbl_field_t *
*** 3144,3150 ****
  new_temporary_impl( enum cbl_field_type_t type, const cbl_name_t name = nullptr )
  {
    extern int yylineno;
-   static int nstack, nliteral;
    static const struct cbl_field_t empty_alpha = {
                                  0, FldAlphanumeric, FldInvalid,
                                  intermediate_e, 0, 0, 0, nonarray, 0, "",
--- 3145,3150 ----
*************** new_temporary_impl( enum cbl_field_type_
*** 3213,3220 ****
--- 3213,3222 ----
  
    f->line = yylineno;
    if( is_literal(type) ) {
+     static int nliteral = 0;
      snprintf(f->name, sizeof(f->name), "_literal%d",++nliteral);
    } else {
+     static int nstack = 0;
      snprintf(f->name, sizeof(f->name), "_stack%d",++nstack);
    }
  
*************** symbol_label_add( size_t program, cbl_la
*** 3728,3733 ****
--- 3730,3741 ----
  bool
  symbol_label_section_exists( size_t eval_label_index ) {
    auto eval = symbols_begin(eval_label_index);
+   /*  cppcheck warns that the following statement depends on the order of
+       evaluation of side effects.  Since this isn't my code, and since I don't
+       think the warning can be eliminated without rewriting it, I am just
+       supprressing it.
+       -- Bob Dubner, 2025-07-14 */
+   // cppcheck-suppress unknownEvaluationOrder
    bool has_section = std::any_of( ++eval, symbols_end(),
                                 [program = eval->program]( const auto& sym ) {
                                   if( program == sym.program && sym.type == SymLabel ) {
*************** symbol_program_callables( size_t program
*** 4187,4193 ****
      if( e->type != SymLabel ) continue;
      if( e->elem.label.type != LblProgram ) continue;
  
!     const auto prog = cbl_label_of(e);
      if( program == symbol_index(e) && !prog->recursive ) continue;
  
      if( (self->parent == prog->parent && prog->common) ||
--- 4195,4201 ----
      if( e->type != SymLabel ) continue;
      if( e->elem.label.type != LblProgram ) continue;
  
!     const cbl_label_t * prog = cbl_label_of(e);
      if( program == symbol_index(e) && !prog->recursive ) continue;
  
      if( (self->parent == prog->parent && prog->common) ||
*************** file_status_status_of( file_status_t sta
*** 4658,4666 ****
    size_t n = COUNT_OF(file_status_fields);
    const file_status_field_t *fs, key { status };
  
!   fs = (file_status_field_t*)lfind( &key, file_status_fields,
!                                     &n, sizeof(*fs), cbl_file_status_cmp );
! 
    return fs? (long)fs->status : -1;
  }
  
--- 4666,4676 ----
    size_t n = COUNT_OF(file_status_fields);
    const file_status_field_t *fs, key { status };
  
!   fs = static_cast<file_status_field_t*>(lfind( &key,
!                                                 file_status_fields,
!                                                 &n,
!                                                 sizeof(*fs),
!                                                 cbl_file_status_cmp ));
    return fs? (long)fs->status : -1;
  }
  
diff -Nrcpad gcc-16-20250713/gcc/cobol/symfind.cc gcc-16-20250720/gcc/cobol/symfind.cc
*** gcc-16-20250713/gcc/cobol/symfind.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/symfind.cc	Sun Jul 20 22:32:08 2025
*************** extern int yydebug;
*** 48,54 ****
  static bool
  is_data_field( symbol_elem_t& e ) {
    if( e.type != SymField ) return false;
!   const auto f = cbl_field_of(&e);
    if( f->name[0] == '\0' ) return false;
    if( is_filler(f) ) return false;
  
--- 48,54 ----
  static bool
  is_data_field( symbol_elem_t& e ) {
    if( e.type != SymField ) return false;
!   const cbl_field_t *f = cbl_field_of(&e);
    if( f->name[0] == '\0' ) return false;
    if( is_filler(f) ) return false;
  
*************** finalize_symbol_map2() {
*** 129,135 ****
    for( auto& elem : symbol_map2 ) {
      auto& fields( elem.second );
      fields.remove_if( []( auto isym ) {
! 			const auto f = cbl_field_of(symbol_at(isym));
  			return f->type == FldInvalid;
  		      } );
      if( fields.empty() ) empties.insert(elem.first);
--- 129,135 ----
    for( auto& elem : symbol_map2 ) {
      auto& fields( elem.second );
      fields.remove_if( []( auto isym ) {
! 			const cbl_field_t *f = cbl_field_of(symbol_at(isym));
  			return f->type == FldInvalid;
  		      } );
      if( fields.empty() ) empties.insert(elem.first);
*************** public:
*** 316,324 ****
        if( p != item.second.end() ) {
          // Preserve symbol's index at front of ancestor list.
          symbol_map_t::mapped_type shorter(1 + ancestors->size());
!         auto p = shorter.begin();
!         *p = item.second.front();
!         shorter.insert( ++p, ancestors->begin(), ancestors->end() );
          return make_pair(item.first, shorter);
        }
      }
--- 316,324 ----
        if( p != item.second.end() ) {
          // Preserve symbol's index at front of ancestor list.
          symbol_map_t::mapped_type shorter(1 + ancestors->size());
!         auto p_l = shorter.begin();
!         *p_l = item.second.front();
!         shorter.insert( ++p_l, ancestors->begin(), ancestors->end() );
          return make_pair(item.first, shorter);
        }
      }
*************** class in_scope {
*** 341,347 ****
    size_t program;
  
    static size_t prog_of( size_t program ) {
!     const auto L = cbl_label_of(symbol_at(program));
      return L->parent;
    }
  
--- 341,347 ----
    size_t program;
  
    static size_t prog_of( size_t program ) {
!     const cbl_label_t *L = cbl_label_of(symbol_at(program));
      return L->parent;
    }
  
*************** symbol_match2( size_t program,
*** 430,436 ****
    auto plist = symbol_map2.find(key);
    if( plist != symbol_map2.end() ) {
      for( auto candidate : plist->second ) {
!       const auto e = symbol_at(candidate);
        if( name_has_names( e, names, local ) ) {
          fields.push_back( symbol_index(e) );
        }
--- 430,436 ----
    auto plist = symbol_map2.find(key);
    if( plist != symbol_map2.end() ) {
      for( auto candidate : plist->second ) {
!       const symbol_elem_t *e = symbol_at(candidate);
        if( name_has_names( e, names, local ) ) {
          fields.push_back( symbol_index(e) );
        }
diff -Nrcpad gcc-16-20250713/gcc/cobol/util.cc gcc-16-20250720/gcc/cobol/util.cc
*** gcc-16-20250713/gcc/cobol/util.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cobol/util.cc	Sun Jul 20 22:32:08 2025
*************** static inline char *
*** 93,99 ****
  get_current_dir_name ()
  {
    /* Use libiberty's allocator here.  */
!   char *buf = (char *) xmalloc (PATH_MAX);
    return getcwd (buf, PATH_MAX);
  }
  #endif
--- 93,99 ----
  get_current_dir_name ()
  {
    /* Use libiberty's allocator here.  */
!   char *buf = static_cast<char *>(xmalloc (PATH_MAX));
    return getcwd (buf, PATH_MAX);
  }
  #endif
*************** get_current_dir_name ()
*** 101,107 ****
  /*
   * For printing messages, usually the size of the thing is some kind of string
   * length, and doesn't really need a size_t.  For message formatting, use a
!  * simple unsigned long, and warn if that's no good.  "gb4" here stands for 
   * "4 Gigabytes".
   */
  unsigned long
--- 101,107 ----
  /*
   * For printing messages, usually the size of the thing is some kind of string
   * length, and doesn't really need a size_t.  For message formatting, use a
!  * simple unsigned long, and warn if that's no good.  "gb4" here stands for
   * "4 Gigabytes".
   */
  unsigned long
*************** gb4( size_t input ) {
*** 113,119 ****
    }
    return input;
  }
!   
  /*
   * Most CDF Directives -- those that have state -- can be pushed and popped.
   * This class maintains stacks of them, with each stack having a "default
--- 113,119 ----
    }
    return input;
  }
! 
  /*
   * Most CDF Directives -- those that have state -- can be pushed and popped.
   * This class maintains stacks of them, with each stack having a "default
*************** gb4( size_t input ) {
*** 140,159 ****
   *   PAGE
   *   PROPAGATE
   *   REF-MOD-ZERO-LENGTH
!  * 
!  * >>PUSH ALL calls the class's push() method. 
!  * >>POP ALL calls the class's pop() method. 
   */
  class cdf_directives_t
  {
    template <typename T>
!   class cdf_stack_t : private std::stack<T> {
      T default_value;
      const T& top() const { return std::stack<T>::top(); }
      bool empty() const { return std::stack<T>::empty(); }
     public:
      void value( const T& value ) {
!       T& output( empty()? default_value : std::stack<T>::top() );
        output = value;
        dbgmsg("cdf_directives_t::%s: %s", __func__, str(output).c_str());
      }
--- 140,159 ----
   *   PAGE
   *   PROPAGATE
   *   REF-MOD-ZERO-LENGTH
!  *
!  * >>PUSH ALL calls the class's push() method.
!  * >>POP ALL calls the class's pop() method.
   */
  class cdf_directives_t
  {
    template <typename T>
!   class cdf_stack_t : private std::stack<T> { // cppcheck-suppress noConstructor
      T default_value;
      const T& top() const { return std::stack<T>::top(); }
      bool empty() const { return std::stack<T>::empty(); }
     public:
      void value( const T& value ) {
!       T& output( empty()? default_value : std::stack<T>::top() ); // cppcheck-suppress constVariableReference
        output = value;
        dbgmsg("cdf_directives_t::%s: %s", __func__, str(output).c_str());
      }
*************** class cdf_directives_t
*** 166,172 ****
      }
      void pop() {
        if( empty() ) {
!         error_msg(YYLTYPE(), "CDF stack empty");
          return;
        }
        default_value = top();
--- 166,172 ----
      }
      void pop() {
        if( empty() ) {
!         error_msg(YYLTYPE(), "CDF stack empty"); // cppcheck-suppress syntaxError
          return;
        }
        default_value = top();
*************** class cdf_directives_t
*** 190,196 ****
      static std::string str(cbl_enabled_exceptions_t) {
        return "<enabled_exceptions>";
      }
-                           
    };
  
   public:
--- 190,195 ----
*************** class cdf_directives_t
*** 203,209 ****
    cdf_directives_t() {
      call_convention.value() = cbl_call_cobol_e;
    }
!  
    void push() {
      call_convention.push();
      cobol_words.push();
--- 202,208 ----
    cdf_directives_t() {
      call_convention.value() = cbl_call_cobol_e;
    }
! 
    void push() {
      call_convention.push();
      cobol_words.push();
*************** cbl_field_t::report_invalid_initial_valu
*** 995,1001 ****
          // 8 or more, we need do no further testing because we assume
          // everything fits.
          if( data.capacity < 8 ) {
!           const auto p = strchr(data.initial, symbol_decimal_point());
            if( p && atoll(p+1) != 0 ) {
              error_msg(loc, "integer type %s VALUE '%s' "
                       "requires integer VALUE",
--- 994,1000 ----
          // 8 or more, we need do no further testing because we assume
          // everything fits.
          if( data.capacity < 8 ) {
!           const char *p = strchr(data.initial, symbol_decimal_point());
            if( p && atoll(p+1) != 0 ) {
              error_msg(loc, "integer type %s VALUE '%s' "
                       "requires integer VALUE",
*************** literal_subscript_oob( const cbl_refer_t
*** 1141,1147 ****
                             pdim++;
                             return ! occurs.subscript_ok(r.field);
                           } );
!   isub = psub - r.subscripts.begin(); 
    return psub == r.subscripts.end()? NULL : dims[isub];
  }
  
--- 1140,1146 ----
                             pdim++;
                             return ! occurs.subscript_ok(r.field);
                           } );
!   isub = psub - r.subscripts.begin();
    return psub == r.subscripts.end()? NULL : dims[isub];
  }
  
*************** cbl_refer_t::subscripts_set( const std::
*** 1154,1165 ****
  
  const char *
  cbl_refer_t::str() const {
!   static char subscripts[64];
!   sprintf(subscripts, "(%u of " HOST_SIZE_T_PRINT_UNSIGNED " dimensions)",
            nsubscript(), (fmt_size_t)dimensions(field));
    char *output = xasprintf("%s %s %s",
                             field? field_str(field) : "(none)",
!                            0 < dimensions(field)? subscripts : "",
                             is_refmod_reference()? "(refmod)" : "" );
    return output;
  }
--- 1153,1164 ----
  
  const char *
  cbl_refer_t::str() const {
!   static char subscripts_l[64];
!   sprintf(subscripts_l, "(%u of " HOST_SIZE_T_PRINT_UNSIGNED " dimensions)",
            nsubscript(), (fmt_size_t)dimensions(field));
    char *output = xasprintf("%s %s %s",
                             field? field_str(field) : "(none)",
!                            0 < dimensions(field)? subscripts_l : "",
                             is_refmod_reference()? "(refmod)" : "" );
    return output;
  }
*************** date_time_fmt( const char input[] ) {
*** 1861,1872 ****
      { regex_t(), 'd', "^(" DATE_FMT_B "|" DATE_FMT_E ")$" },
      { regex_t(), 't', "^(" TIME_FMT_B "|" TIME_FMT_E ")$" },
    };
!   int erc, cflags = REG_EXTENDED | REG_ICASE, eflags=0;
    regmatch_t m[5];
    char result = 0;
  
    if( ! compiled ) {
      for( auto& fmt : fmts ) {
        if( (erc = regcomp(&fmt.reg, fmt.pattern, cflags)) != 0 ) {
          char msg[80];
          regerror(erc, &fmt.reg, msg, sizeof(msg));
--- 1860,1872 ----
      { regex_t(), 'd', "^(" DATE_FMT_B "|" DATE_FMT_E ")$" },
      { regex_t(), 't', "^(" TIME_FMT_B "|" TIME_FMT_E ")$" },
    };
!   int cflags = REG_EXTENDED | REG_ICASE, eflags=0;
    regmatch_t m[5];
    char result = 0;
  
    if( ! compiled ) {
      for( auto& fmt : fmts ) {
+       int erc;
        if( (erc = regcomp(&fmt.reg, fmt.pattern, cflags)) != 0 ) {
          char msg[80];
          regerror(erc, &fmt.reg, msg, sizeof(msg));
*************** class unique_stack : public std::stack<i
*** 1924,1930 ****
    friend void cobol_set_pp_option(int opt);
    bool option_m;
    std::set<std::string> all_names;
!   
    const char *
    no_wd( const char *wd, const char *name ) {
      int i;
--- 1924,1930 ----
    friend void cobol_set_pp_option(int opt);
    bool option_m;
    std::set<std::string> all_names;
! 
    const char *
    no_wd( const char *wd, const char *name ) {
      int i;
*************** class unique_stack : public std::stack<i
*** 1935,1941 ****
  
   public:
    unique_stack() : option_m(false) {}
!   
    bool push( const value_type& value ) {
      auto ok = std::none_of( c.cbegin(), c.cend(),
                              [value]( const auto& that ) {
--- 1935,1941 ----
  
   public:
    unique_stack() : option_m(false) {}
! 
    bool push( const value_type& value ) {
      auto ok = std::none_of( c.cbegin(), c.cend(),
                              [value]( const auto& that ) {
*************** class unique_stack : public std::stack<i
*** 1969,1976 ****
    const input_file_t& peek( size_t n ) const {
      gcc_assert( n < size() );
      return c.at(size() - ++n);
!   } 
!   
    void option( int opt ) { // capture other preprocessor options eventually
      assert(opt == 'M');
      option_m = true;
--- 1969,1976 ----
    const input_file_t& peek( size_t n ) const {
      gcc_assert( n < size() );
      return c.at(size() - ++n);
!   }
! 
    void option( int opt ) { // capture other preprocessor options eventually
      assert(opt == 'M');
      option_m = true;
*************** class unique_stack : public std::stack<i
*** 1983,1989 ****
      std::string input( top().name );
      printf( "%s: ", input.c_str() );
      for( const auto& name : all_names ) {
!       if( name != input ) 
  	printf( "\\\n\t%s ", name.c_str() );
      }
      printf("\n");
--- 1983,1989 ----
      std::string input( top().name );
      printf( "%s: ", input.c_str() );
      for( const auto& name : all_names ) {
!       if( name != input )
  	printf( "\\\n\t%s ", name.c_str() );
      }
      printf("\n");
*************** void cobol_set_pp_option(int opt) {
*** 2000,2006 ****
    assert(opt == 'M');
    input_filenames.option_m = true;
  }
! 				  
  /*
   * Maintain a stack of input filenames.  Ensure the files are unique (by
   * inode), to prevent copybook cycles. Before pushing a new name, Record the
--- 2000,2006 ----
    assert(opt == 'M');
    input_filenames.option_m = true;
  }
! 
  /*
   * Maintain a stack of input filenames.  Ensure the files are unique (by
   * inode), to prevent copybook cycles. Before pushing a new name, Record the
*************** void cobol_set_pp_option(int opt) {
*** 2011,2017 ****
   * to enforce uniqueness, and the scanner to maintain line numbers.
   */
  bool cobol_filename( const char *name, ino_t inode ) {
!   const line_map *lines = NULL;
    if( inode == 0 ) {
      auto p = old_filenames.find(name);
      if( p == old_filenames.end() ) {
--- 2011,2017 ----
   * to enforce uniqueness, and the scanner to maintain line numbers.
   */
  bool cobol_filename( const char *name, ino_t inode ) {
!   //const line_map *lines = NULL;
    if( inode == 0 ) {
      auto p = old_filenames.find(name);
      if( p == old_filenames.end() ) {
*************** bool cobol_filename( const char *name, i
*** 2021,2028 ****
        }
        cbl_errx( "logic error: missing inode for %s", name);
      }
!     inode = p->second;
!     assert(inode != 0);
    }
    linemap_add(line_table, LC_ENTER, sysp, name, 1);
    input_filename_vestige = name;
--- 2021,2030 ----
        }
        cbl_errx( "logic error: missing inode for %s", name);
      }
!     else {
!       inode = p->second;
!       assert(inode != 0);
!     }
    }
    linemap_add(line_table, LC_ENTER, sysp, name, 1);
    input_filename_vestige = name;
*************** cobol_filename_restore() {
*** 2071,2077 ****
    input_filenames.pop();
    if( input_filenames.empty() ) return;
  
!   auto& input = input_filenames.top();
  
    linemap_add(line_table, LC_LEAVE, sysp, NULL, 0);
  }
--- 2073,2079 ----
    input_filenames.pop();
    if( input_filenames.empty() ) return;
  
!   const auto& input = input_filenames.top();
  
    linemap_add(line_table, LC_LEAVE, sysp, NULL, 0);
  }
*************** location_t location_from_lineno() { retu
*** 2083,2089 ****
  template <typename LOC>
  static void
  gcc_location_set_impl( const LOC& loc ) {
!   // Set the position to the first line & column in the location. 
    token_location = linemap_line_start( line_table, loc.first_line, 80 );
    token_location = linemap_position_for_column( line_table, loc.first_column);
    location_dump(__func__, __LINE__, "parser", loc);
--- 2085,2091 ----
  template <typename LOC>
  static void
  gcc_location_set_impl( const LOC& loc ) {
!   // Set the position to the first line & column in the location.
    token_location = linemap_line_start( line_table, loc.first_line, 80 );
    token_location = linemap_position_for_column( line_table, loc.first_column);
    location_dump(__func__, __LINE__, "parser", loc);
*************** ydferror( const char gmsgid[], ... ) {
*** 2144,2151 ****
    va_list ap;
    va_start (ap, gmsgid);
    rich_location richloc (line_table, token_location);
!   bool ret = global_dc->diagnostic_impl (&richloc, nullptr, option_zero,
!                                          gmsgid, &ap, DK_ERROR);
    va_end (ap);
  }
  
--- 2146,2153 ----
    va_list ap;
    va_start (ap, gmsgid);
    rich_location richloc (line_table, token_location);
!   /*bool ret =*/ global_dc->diagnostic_impl (&richloc, nullptr, option_zero,
!                                              gmsgid, &ap, DK_ERROR);
    va_end (ap);
  }
  
*************** void error_msg_direct( const char gmsgid
*** 2222,2229 ****
    auto_diagnostic_group d;
    va_list ap;
    va_start (ap, gmsgid);
!   auto ret = emit_diagnostic_valist( DK_ERROR, token_location,
!                                      option_zero, gmsgid, &ap );
    va_end (ap);
  }
  
--- 2224,2231 ----
    auto_diagnostic_group d;
    va_list ap;
    va_start (ap, gmsgid);
!   /*auto ret = */emit_diagnostic_valist( DK_ERROR, token_location,
!                                          option_zero, gmsgid, &ap );
    va_end (ap);
  }
  
*************** yyerror( const char gmsgid[], ... ) {
*** 2236,2243 ****
    va_list ap;
    va_start (ap, gmsgid);
    rich_location richloc (line_table, token_location);
!   bool ret = global_dc->diagnostic_impl (&richloc, nullptr, option_zero,
!                                          gmsgid, &ap, DK_ERROR);
    va_end (ap);
    global_dc->end_group();
  }
--- 2238,2248 ----
    va_list ap;
    va_start (ap, gmsgid);
    rich_location richloc (line_table, token_location);
!   /*bool ret =*/ global_dc->diagnostic_impl ( &richloc,
!                                               nullptr,
!                                               option_zero,
!                                               gmsgid,
!                                               &ap, DK_ERROR);
    va_end (ap);
    global_dc->end_group();
  }
*************** cbl_unimplemented_at( const YYLTYPE& loc
*** 2483,2490 ****
    va_end(ap);
  }
  
! /* 
!  * analogs to err(3) and errx(3). 
   */
  
  #pragma GCC diagnostic push
--- 2488,2495 ----
    va_end(ap);
  }
  
! /*
!  * analogs to err(3) and errx(3).
   */
  
  #pragma GCC diagnostic push
*************** static const std::set<std::string> reser
*** 2619,2625 ****
    "VOLATILE",
    "XML",
    "END-START",
!   
    // ISO 2023 keywords
    "ACCEPT",
    "ACCESS",
--- 2624,2630 ----
    "VOLATILE",
    "XML",
    "END-START",
! 
    // ISO 2023 keywords
    "ACCEPT",
    "ACCESS",
diff -Nrcpad gcc-16-20250713/gcc/common/config/i386/i386-common.cc gcc-16-20250720/gcc/common/config/i386/i386-common.cc
*** gcc-16-20250713/gcc/common/config/i386/i386-common.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/common/config/i386/i386-common.cc	Sun Jul 20 22:32:08 2025
*************** along with GCC; see the file COPYING3.
*** 131,138 ****
  #define OPTION_MASK_ISA2_AVX10_2_SET \
    (OPTION_MASK_ISA2_AVX10_1_SET | OPTION_MASK_ISA2_AVX10_2)
  #define OPTION_MASK_ISA2_AMX_AVX512_SET \
!   (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AVX10_2_SET \
!    | OPTION_MASK_ISA2_AMX_AVX512)
  #define OPTION_MASK_ISA2_AMX_TF32_SET \
    (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_TF32)
  #define OPTION_MASK_ISA2_AMX_TRANSPOSE_SET \
--- 131,137 ----
  #define OPTION_MASK_ISA2_AVX10_2_SET \
    (OPTION_MASK_ISA2_AVX10_1_SET | OPTION_MASK_ISA2_AVX10_2)
  #define OPTION_MASK_ISA2_AMX_AVX512_SET \
!   (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_AVX512)
  #define OPTION_MASK_ISA2_AMX_TF32_SET \
    (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_TF32)
  #define OPTION_MASK_ISA2_AMX_TRANSPOSE_SET \
*************** along with GCC; see the file COPYING3.
*** 328,335 ****
  #define OPTION_MASK_ISA2_USER_MSR_UNSET OPTION_MASK_ISA2_USER_MSR
  #define OPTION_MASK_ISA2_AVX10_1_UNSET \
    (OPTION_MASK_ISA2_AVX10_1 | OPTION_MASK_ISA2_AVX10_2_UNSET)
! #define OPTION_MASK_ISA2_AVX10_2_UNSET \
!   (OPTION_MASK_ISA2_AVX10_2 | OPTION_MASK_ISA2_AMX_AVX512_UNSET)
  #define OPTION_MASK_ISA2_AMX_AVX512_UNSET OPTION_MASK_ISA2_AMX_AVX512
  #define OPTION_MASK_ISA2_AMX_TF32_UNSET OPTION_MASK_ISA2_AMX_TF32
  #define OPTION_MASK_ISA2_AMX_TRANSPOSE_UNSET OPTION_MASK_ISA2_AMX_TRANSPOSE
--- 327,333 ----
  #define OPTION_MASK_ISA2_USER_MSR_UNSET OPTION_MASK_ISA2_USER_MSR
  #define OPTION_MASK_ISA2_AVX10_1_UNSET \
    (OPTION_MASK_ISA2_AVX10_1 | OPTION_MASK_ISA2_AVX10_2_UNSET)
! #define OPTION_MASK_ISA2_AVX10_2_UNSET OPTION_MASK_ISA2_AVX10_2
  #define OPTION_MASK_ISA2_AMX_AVX512_UNSET OPTION_MASK_ISA2_AMX_AVX512
  #define OPTION_MASK_ISA2_AMX_TF32_UNSET OPTION_MASK_ISA2_AMX_TF32
  #define OPTION_MASK_ISA2_AMX_TRANSPOSE_UNSET OPTION_MASK_ISA2_AMX_TRANSPOSE
*************** along with GCC; see the file COPYING3.
*** 379,385 ****
  #define OPTION_MASK_ISA2_AVX512F_UNSET \
    (OPTION_MASK_ISA2_AVX512BW_UNSET \
     | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET \
!    | OPTION_MASK_ISA2_AVX10_1_UNSET)
  #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \
    OPTION_MASK_ISA2_SSE_UNSET
  #define OPTION_MASK_ISA2_AVX_UNSET \
--- 377,384 ----
  #define OPTION_MASK_ISA2_AVX512F_UNSET \
    (OPTION_MASK_ISA2_AVX512BW_UNSET \
     | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET \
!    | OPTION_MASK_ISA2_AVX10_1_UNSET \
!    | OPTION_MASK_ISA2_AMX_AVX512_UNSET)
  #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \
    OPTION_MASK_ISA2_SSE_UNSET
  #define OPTION_MASK_ISA2_AVX_UNSET \
*************** ix86_handle_option (struct gcc_options *
*** 1374,1381 ****
  	{
  	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_AVX512_SET;
  	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_AVX512_SET;
! 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX10_1_SET;
! 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX10_1_SET;
  	}
        else
  	{
--- 1373,1380 ----
  	{
  	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_AVX512_SET;
  	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_AVX512_SET;
! 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET;
! 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET;
  	}
        else
  	{
diff -Nrcpad gcc-16-20250713/gcc/common.opt gcc-16-20250720/gcc/common.opt
*** gcc-16-20250713/gcc/common.opt	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/common.opt	Sun Jul 20 22:32:08 2025
*************** Common Var(warn_unused) Init(0) Warning
*** 851,861 ****
  Enable all -Wunused- warnings.
  
  Wunused-but-set-parameter
! Common Var(warn_unused_but_set_parameter) Warning EnabledBy(Wunused && Wextra)
  Warn when a function parameter is only set, otherwise unused.
  
  Wunused-but-set-variable
! Common Var(warn_unused_but_set_variable) Warning EnabledBy(Wunused)
  Warn when a variable is only set, otherwise unused.
  
  Wunused-function
--- 851,867 ----
  Enable all -Wunused- warnings.
  
  Wunused-but-set-parameter
! Common Alias(Wunused-but-set-parameter=,3,0) Warning
! 
! Wunused-but-set-parameter=
! Common Var(warn_unused_but_set_parameter) RejectNegative Joined UInteger Warning IntegerRange(0, 3) EnabledBy(Wunused && Wextra)
  Warn when a function parameter is only set, otherwise unused.
  
  Wunused-but-set-variable
! Common Alias(Wunused-but-set-variable=,3,0) Warning
! 
! Wunused-but-set-variable=
! Common Var(warn_unused_but_set_variable) RejectNegative Joined UInteger Warning IntegerRange(0, 3) EnabledBy(Wunused)
  Warn when a variable is only set, otherwise unused.
  
  Wunused-function
diff -Nrcpad gcc-16-20250713/gcc/common.opt.urls gcc-16-20250720/gcc/common.opt.urls
*** gcc-16-20250713/gcc/common.opt.urls	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/common.opt.urls	Sun Jul 20 22:32:08 2025
*************** UrlSuffix(gcc/Warning-Options.html#index
*** 272,280 ****
--- 272,286 ----
  Wunused-but-set-parameter
  UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-but-set-parameter)
  
+ Wunused-but-set-parameter=
+ UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-but-set-parameter)
+ 
  Wunused-but-set-variable
  UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-but-set-variable)
  
+ Wunused-but-set-variable=
+ UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-but-set-variable)
+ 
  Wunused-function
  UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-function)
  
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64-builtin-pairs.def gcc-16-20250720/gcc/config/aarch64/aarch64-builtin-pairs.def
*** gcc-16-20250713/gcc/config/aarch64/aarch64-builtin-pairs.def	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/config/aarch64/aarch64-builtin-pairs.def	Sun Jul 20 22:32:08 2025
***************
*** 0 ****
--- 1,73 ----
+ /* Pairs of AArch64 builtins that can be folded into each other.
+    Copyright (C) 2025 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3, or (at your option)
+    any later version.
+ 
+    GCC is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ /* Pairs of single and half integer modes.  */
+ #define LO_HI_PAIR_V_HSI(T, LO, HI) \
+   LO_HI_PAIR (T##_##LO##v2si, T##_##HI##v4si) \
+   LO_HI_PAIR (T##_##LO##v4hi, T##_##HI##v8hi)
+ 
+ #define LO_HI_PAIR_V_US_HSI(T, LO, HI) \
+   LO_HI_PAIR_V_HSI (T, s##LO, s##HI) \
+   LO_HI_PAIR_V_HSI (T##U, u##LO, u##HI)
+ 
+ /* Pairs of widenable integer modes.  */
+ #define LO_HI_PAIR_V_WI(T, LO, HI) \
+   LO_HI_PAIR_V_HSI (T, LO, HI) \
+   LO_HI_PAIR (T##_##LO##v8qi, T##_##HI##v16qi)
+ 
+ #define LO_HI_PAIR_V_US_WI(T, LO, HI) \
+   LO_HI_PAIR_V_WI (T, s##LO, s##HI) \
+   LO_HI_PAIR_V_WI (T##U, u##LO, u##HI)
+ 
+ #define UNOP_LONG_LH_PAIRS \
+   LO_HI_PAIR (UNOP_sxtlv8hi,  UNOP_vec_unpacks_hi_v16qi) \
+   LO_HI_PAIR (UNOP_sxtlv4si,  UNOP_vec_unpacks_hi_v8hi) \
+   LO_HI_PAIR (UNOP_sxtlv2di,  UNOP_vec_unpacks_hi_v4si) \
+   LO_HI_PAIR (UNOPU_uxtlv8hi, UNOPU_vec_unpacku_hi_v16qi) \
+   LO_HI_PAIR (UNOPU_uxtlv4si, UNOPU_vec_unpacku_hi_v8hi) \
+   LO_HI_PAIR (UNOPU_uxtlv2di, UNOPU_vec_unpacku_hi_v4si)
+ 
+ #define BINOP_LONG_LH_PAIRS \
+   LO_HI_PAIR_V_US_WI (BINOP,  addl, addl2) \
+   LO_HI_PAIR_V_US_WI (BINOP,  subl, subl2) \
+   LO_HI_PAIR_V_US_WI (BINOP,  abdl, abdl2) \
+   LO_HI_PAIR_V_WI (BINOP,  intrinsic_vec_smult_lo_, vec_widen_smult_hi_) \
+   LO_HI_PAIR_V_WI (BINOPU, intrinsic_vec_umult_lo_, vec_widen_umult_hi_) \
+   LO_HI_PAIR_V_HSI (BINOP,  sqdmull, sqdmull2) \
+   LO_HI_PAIR (BINOPP_pmullv8qi, BINOPP_pmull_hiv16qi)
+ 
+ #define BINOP_LONG_N_LH_PAIRS \
+   LO_HI_PAIR_V_US_HSI (BINOP,  mull_n, mull_hi_n) \
+   LO_HI_PAIR_V_HSI (BINOP,  sqdmull_n, sqdmull2_n)
+ 
+ #define BINOP_WIDE_LH_PAIRS \
+   LO_HI_PAIR_V_US_WI (BINOP,  subw, subw2) \
+   LO_HI_PAIR_V_US_WI (BINOP,  addw, addw2)
+ 
+ #define TERNOP_LONG_LH_PAIRS \
+   LO_HI_PAIR_V_US_WI (TERNOP,  mlal, mlal_hi) \
+   LO_HI_PAIR_V_US_WI (TERNOP,  mlsl, mlsl_hi) \
+   LO_HI_PAIR_V_US_WI (TERNOP,  abal, abal2) \
+   LO_HI_PAIR_V_HSI (TERNOP, sqdmlal, sqdmlal2) \
+   LO_HI_PAIR_V_HSI (TERNOP, sqdmlsl, sqdmlsl2)
+ 
+ #define TERNOP_LONG_N_LH_PAIRS \
+   LO_HI_PAIR_V_US_HSI (TERNOP,  mlal_n, mlal_hi_n) \
+   LO_HI_PAIR_V_US_HSI (TERNOP,  mlsl_n, mlsl_hi_n) \
+   LO_HI_PAIR_V_HSI (TERNOP,  sqdmlal_n, sqdmlal2_n)
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64-builtins.cc gcc-16-20250720/gcc/config/aarch64/aarch64-builtins.cc
*** gcc-16-20250713/gcc/config/aarch64/aarch64-builtins.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/aarch64-builtins.cc	Sun Jul 20 22:32:08 2025
***************
*** 49,54 ****
--- 49,56 ----
  #include "attribs.h"
  #include "gimple-fold.h"
  #include "builtins.h"
+ #include "tree-pass.h"
+ #include "tree-vector-builder.h"
  #include "aarch64-builtins.h"
  
  using namespace aarch64;
*************** static aarch64_simd_builtin_datum aarch6
*** 738,743 ****
--- 740,755 ----
    VGET_HIGH_BUILTIN(u64) \
    VGET_HIGH_BUILTIN(bf16)
  
+ #include "aarch64-builtin-pairs.def"
+ 
+ #define LO_HI_PAIRINGS \
+   UNOP_LONG_LH_PAIRS \
+   BINOP_LONG_LH_PAIRS \
+   BINOP_LONG_N_LH_PAIRS \
+   BINOP_WIDE_LH_PAIRS \
+   TERNOP_LONG_LH_PAIRS \
+   TERNOP_LONG_N_LH_PAIRS
+ 
  typedef struct
  {
    const char *name;
*************** aarch64_gimple_fold_pragma_builtin
*** 5004,5009 ****
--- 5016,5182 ----
      }
  }
  
+ /* Return the fndecl of the builtin paired with FCODE_LO if one
+    exists (see aarch64-builtin-pairs.def), or NULL_TREE if not.  */
+ static inline tree
+ aarch64_get_highpart_builtin (unsigned int fcode_lo)
+ {
+ #undef LO_HI_PAIR
+ #define LO_HI_PAIR(A, B) case AARCH64_SIMD_BUILTIN_##A:   \
+   return aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_##B];
+ 
+   switch (fcode_lo)
+     {
+       LO_HI_PAIRINGS
+       default:
+ 	return NULL_TREE;
+     }
+ }
+ 
+ /* If REF describes the high half of a 128-bit vector, return this
+    vector.  Otherwise, return NULL_TREE.  */
+ static tree
+ aarch64_v128_highpart_ref (const_tree ref)
+ {
+   if (TREE_CODE (ref) != SSA_NAME)
+     return NULL_TREE;
+ 
+   gassign *stmt = dyn_cast<gassign *> (SSA_NAME_DEF_STMT (ref));
+   if (!stmt || gimple_assign_rhs_code (stmt) != BIT_FIELD_REF)
+     return NULL_TREE;
+ 
+   /* Look for a BIT_FIELD_REF that denotes the most significant 64
+      bits of a 128-bit vector.  */
+   tree bf_ref = gimple_assign_rhs1 (stmt);
+   unsigned int offset = BYTES_BIG_ENDIAN ? 0 : 64;
+ 
+   if (maybe_ne (bit_field_size (bf_ref), 64u)
+       || maybe_ne (bit_field_offset (bf_ref), offset))
+     return NULL_TREE;
+ 
+   tree obj = TREE_OPERAND (bf_ref, 0);
+   tree type = TREE_TYPE (obj);
+ 
+   if (VECTOR_TYPE_P (type) && tree_fits_uhwi_p (TYPE_SIZE (type))
+       && tree_to_uhwi (TYPE_SIZE (type)) == 128)
+     return obj;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Build and return a new VECTOR_CST of type OUT_TY, using repeated
+    copies of the elements of VEC_IN.  */
+ static tree
+ aarch64_build_vector_cst (const_tree vec_in, tree out_ty)
+ {
+   gcc_assert (TREE_CODE (vec_in) == VECTOR_CST
+ 	      && VECTOR_TYPE_P (out_ty));
+   unsigned HOST_WIDE_INT nelts
+     = VECTOR_CST_NELTS (vec_in).to_constant ();
+ 
+   tree_vector_builder vec_out (out_ty, nelts, 1);
+   for (unsigned i = 0; i < nelts; i++)
+     vec_out.quick_push (VECTOR_CST_ELT (vec_in, i));
+ 
+   return vec_out.build ();
+ }
+ 
+ /* Try to fold STMT, a call to to a lowpart-operating builtin, to
+    it's highpart-operating equivalent if doing so would save
+    unnecessary data movement instructions.
+ 
+    Return the new call if so, otherwise nullptr.  */
+ static gcall *
+ aarch64_fold_lo_call_to_hi (unsigned int fcode, gcall *stmt,
+ 			    gimple_stmt_iterator *gsi)
+ {
+   /* Punt until as late as possible:
+     1) By folding away BIT_FIELD_REFs we remove information about the
+     operands that may be useful to other optimizers.
+ 
+     2) For simplicity, we'd like the expression
+ 
+ 	x = BIT_FIELD_REF<a, x, y>
+ 
+     to imply that A is not a VECTOR_CST.  This assumption is unlikely
+     to hold before constant prop/folding.  */
+   if (!(cfun->curr_properties & PROP_last_full_fold))
+     return nullptr;
+ 
+   tree builtin_hi = aarch64_get_highpart_builtin (fcode);
+   gcc_assert (builtin_hi != NULL_TREE);
+ 
+   /* Prefer to use the highpart builtin when at least one vector
+      argument is a reference to the high half of a 128b vector, and
+      all others are VECTOR_CSTs that we can extend to 128b.  */
+   auto_vec<unsigned int, 2> vec_constants;
+   auto_vec<unsigned int, 2> vec_highparts;
+   /* The arguments and signature of the new call.  */
+   auto_vec<tree, 4> call_args;
+   auto_vec<tree, 4> call_types;
+ 
+   /* The interesting args are those that differ between the lo/hi
+      builtins.  Walk the function signatures to find these.  */
+   tree types_hi = TYPE_ARG_TYPES (TREE_TYPE (builtin_hi));
+   tree types_lo = TYPE_ARG_TYPES (gimple_call_fntype (stmt));
+   unsigned int argno = 0;
+   while (types_lo != void_list_node && types_hi != void_list_node)
+     {
+       tree type_lo = TREE_VALUE (types_lo);
+       tree type_hi = TREE_VALUE (types_hi);
+       tree arg = gimple_call_arg (stmt, argno);
+       if (!types_compatible_p (type_lo, type_hi))
+ 	{
+ 	  /* Check our assumptions about this pair.  */
+ 	  gcc_assert (wi::to_widest (TYPE_SIZE (type_lo)) == 64
+ 		      && wi::to_widest (TYPE_SIZE (type_hi)) == 128);
+ 
+ 	  tree vq = aarch64_v128_highpart_ref (arg);
+ 	  if (vq && is_gimple_reg (vq))
+ 	    {
+ 	      vec_highparts.safe_push (argno);
+ 	      arg = vq;
+ 	    }
+ 	  else if (TREE_CODE (arg) == VECTOR_CST)
+ 	    vec_constants.safe_push (argno);
+ 	  else
+ 	    return nullptr;
+ 	}
+       call_args.safe_push (arg);
+       call_types.safe_push (type_hi);
+ 
+       argno++;
+       types_hi = TREE_CHAIN (types_hi);
+       types_lo = TREE_CHAIN (types_lo);
+     }
+   gcc_assert (types_lo == void_list_node && types_hi == void_list_node);
+ 
+   if (vec_highparts.is_empty ())
+     return nullptr;
+ 
+   /* Build and return a new call to BUILTIN_HI.  */
+   for (auto i : vec_constants)
+     call_args[i] = aarch64_build_vector_cst (call_args[i], call_types[i]);
+ 
+   for (auto i : vec_highparts)
+     if (!types_compatible_p (TREE_TYPE (call_args[i]), call_types[i]))
+       {
+ 	tree vce_ssa = make_ssa_name (call_types[i]);
+ 	tree vce_expr = build1 (VIEW_CONVERT_EXPR,
+ 				call_types[i], call_args[i]);
+ 	gsi_insert_before (gsi, gimple_build_assign (vce_ssa, vce_expr),
+ 			   GSI_SAME_STMT);
+ 	call_args[i] = vce_ssa;
+       }
+ 
+   gcall *new_call = gimple_build_call_vec (builtin_hi, call_args);
+   gimple_call_set_lhs (new_call, gimple_call_lhs (stmt));
+   return new_call;
+ }
+ 
+ #undef LO_HI_PAIR
+ #define LO_HI_PAIR(A, B) case AARCH64_SIMD_BUILTIN_##A:
+ 
  /* Try to fold STMT, given that it's a call to the built-in function with
     subcode FCODE.  Return the new statement on success and null on
     failure.  */
*************** aarch64_general_gimple_fold_builtin (uns
*** 5190,5195 ****
--- 5363,5371 ----
  	    }
  	  break;
  	}
+     LO_HI_PAIRINGS
+       new_stmt = aarch64_fold_lo_call_to_hi (fcode, stmt, gsi);
+       break;
      case AARCH64_SIMD_BUILTIN_LANE_CHECK:
        if (aarch64_fold_builtin_lane_check (args[0], args[1], args[2]))
  	{
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64-simd.md gcc-16-20250720/gcc/config/aarch64/aarch64-simd.md
*** gcc-16-20250713/gcc/config/aarch64/aarch64-simd.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/aarch64-simd.md	Sun Jul 20 22:32:08 2025
***************
*** 9191,9221 ****
    [(set_attr "type" "crypto_sha3")]
  )
  
- (define_insn_and_split "*eor3qdi4"
-   [(set (match_operand:DI 0 "register_operand")
- 	(xor:DI
- 	 (xor:DI
- 	  (match_operand:DI 2 "register_operand")
- 	  (match_operand:DI 3 "register_operand"))
- 	 (match_operand:DI 1 "register_operand")))]
-   "TARGET_SHA3"
-   {@ [ cons: =0, 1, 2 , 3  ; attrs: type ]
-      [ w       , w, w , w  ; crypto_sha3 ] eor3\t%0.16b, %1.16b, %2.16b, %3.16b
-      [ &r      , r, r0, r0 ; multiple    ] #
-   }
-   "&& REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))"
-   [(set (match_dup 4) (xor:DI (match_dup 2) (match_dup 3)))
-    (set (match_dup 0) (xor:DI (match_dup 4) (match_dup 1)))]
-   {
-     if (reload_completed)
-       operands[4] = operands[0];
-     else if (can_create_pseudo_p ())
-       operands[4] = gen_reg_rtx (DImode);
-     else
-       FAIL;
-   }
- )
- 
  (define_insn "aarch64_rax1qv2di"
    [(set (match_operand:V2DI 0 "register_operand" "=w")
  	(xor:V2DI
--- 9191,9196 ----
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64-sme.md gcc-16-20250720/gcc/config/aarch64/aarch64-sme.md
*** gcc-16-20250713/gcc/config/aarch64/aarch64-sme.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/aarch64-sme.md	Sun Jul 20 22:32:08 2025
***************
*** 38,43 ****
--- 38,44 ----
  ;; ---- Binary arithmetic on ZA tile
  ;; ---- Binary arithmetic on ZA slice
  ;; ---- Binary arithmetic, writing to ZA slice
+ ;; ---- Absolute minimum/maximum
  ;;
  ;; == Ternary arithmetic
  ;; ---- [INT] Dot product
***************
*** 1264,1269 ****
--- 1265,1287 ----
    "<sme_int_op>\tza.<Vetype>[%w0, %1, vgx<vector_count>], %2, %3.<Vetype>"
  )
  
+ ;; -------------------------------------------------------------------------
+ ;; ---- Absolute minimum/maximum
+ ;; -------------------------------------------------------------------------
+ ;; Includes:
+ ;; - FAMIN (SME2+FAMINMAX)
+ ;; - FAMAX (SME2+FAMINMAX)
+ ;; -------------------------------------------------------------------------
+ 
+ (define_insn "@aarch64_sme_<faminmax_uns_op><mode>"
+   [(set (match_operand:SVE_Fx24 0 "register_operand" "=Uw<vector_count>")
+ 	(unspec:SVE_Fx24 [(match_operand:SVE_Fx24 1 "register_operand" "%0")
+ 			  (match_operand:SVE_Fx24 2 "register_operand" "Uw<vector_count>")]
+ 	 FAMINMAX_UNS))]
+   "TARGET_STREAMING_SME2 && TARGET_FAMINMAX"
+   "<faminmax_uns_op>\t%0, %1, %2"
+ )
+ 
  ;; =========================================================================
  ;; == Ternary arithmetic
  ;; =========================================================================
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64-sve-builtins-sme.def gcc-16-20250720/gcc/config/aarch64/aarch64-sve-builtins-sme.def
*** gcc-16-20250713/gcc/config/aarch64/aarch64-sve-builtins-sme.def	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/aarch64-sve-builtins-sme.def	Sun Jul 20 22:32:08 2025
*************** DEF_SME_FUNCTION (svstr_zt, str_zt, none
*** 92,97 ****
--- 92,102 ----
  DEF_SME_FUNCTION (svzero_zt, inherent_zt, none, none)
  #undef REQUIRED_EXTENSIONS
  
+ #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME2 && AARCH64_FL_FAMINMAX)
+ DEF_SME_FUNCTION_GS (svamin, binary_opt_single_n, all_float, x24, none)
+ DEF_SME_FUNCTION_GS (svamax, binary_opt_single_n, all_float, x24, none)
+ #undef REQUIRED_EXTENSIONS
+ 
  /* The d_za entries in this section just declare C _za64 overloads,
     which will then be resolved to either an integer function or a
     floating-point function.  They are needed because the integer and
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc gcc-16-20250720/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
*** gcc-16-20250713/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc	Sun Jul 20 22:32:08 2025
*************** public:
*** 930,935 ****
--- 930,973 ----
    unsigned int m_bits;
  };
  
+ /* The same as cond_or_uncond_unspec_function but the intrinsics with vector
+    modes are SME2 extensions instead of SVE.  */
+ class faminmaximpl : public function_base
+ {
+ public:
+   CONSTEXPR faminmaximpl (int cond_unspec, int uncond_unspec)
+     : m_cond_unspec (cond_unspec), m_uncond_unspec (uncond_unspec)
+     {}
+ 
+   rtx
+   expand (function_expander &e) const override
+   {
+     if (e.group_suffix ().vectors_per_tuple > 1)
+       {
+ 	/* SME2+faminmax intrinsics.  */
+ 	gcc_assert (e.pred == PRED_none);
+ 	auto mode = e.tuple_mode (0);
+ 	auto icode = (code_for_aarch64_sme (m_uncond_unspec, mode));
+ 	return e.use_exact_insn (icode);
+       }
+     /* SVE+faminmax intrinsics.  */
+     else if (e.pred == PRED_none)
+       {
+ 	auto mode = e.tuple_mode (0);
+ 	auto icode = (e.mode_suffix_id == MODE_single
+ 		      ? code_for_aarch64_sve_single (m_uncond_unspec, mode)
+ 		      : code_for_aarch64_sve (m_uncond_unspec, mode));
+ 	return e.use_exact_insn (icode);
+       }
+     return e.map_to_unspecs (m_cond_unspec, m_cond_unspec, m_cond_unspec);
+   }
+ 
+   /* The unspecs for the conditional and unconditional instructions,
+      respectively.  */
+   int m_cond_unspec;
+   int m_uncond_unspec;
+ };
+ 
  } /* end anonymous namespace */
  
  namespace aarch64_sve {
*************** FUNCTION (svaesd, fixed_insn_function, (
*** 958,967 ****
  FUNCTION (svaese, fixed_insn_function, (CODE_FOR_aarch64_sve2_aese))
  FUNCTION (svaesimc, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesimc))
  FUNCTION (svaesmc, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesmc))
! FUNCTION (svamax, cond_or_uncond_unspec_function,
! 	  (UNSPEC_COND_FAMAX, UNSPEC_FAMAX))
! FUNCTION (svamin, cond_or_uncond_unspec_function,
! 	  (UNSPEC_COND_FAMIN, UNSPEC_FAMIN))
  FUNCTION (svandqv, reduction, (UNSPEC_ANDQV, UNSPEC_ANDQV, -1))
  FUNCTION (svbcax, CODE_FOR_MODE0 (aarch64_sve2_bcax),)
  FUNCTION (svbdep, unspec_based_function, (UNSPEC_BDEP, UNSPEC_BDEP, -1))
--- 996,1003 ----
  FUNCTION (svaese, fixed_insn_function, (CODE_FOR_aarch64_sve2_aese))
  FUNCTION (svaesimc, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesimc))
  FUNCTION (svaesmc, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesmc))
! FUNCTION (svamax, faminmaximpl, (UNSPEC_COND_FAMAX, UNSPEC_FAMAX))
! FUNCTION (svamin, faminmaximpl, (UNSPEC_COND_FAMIN, UNSPEC_FAMIN))
  FUNCTION (svandqv, reduction, (UNSPEC_ANDQV, UNSPEC_ANDQV, -1))
  FUNCTION (svbcax, CODE_FOR_MODE0 (aarch64_sve2_bcax),)
  FUNCTION (svbdep, unspec_based_function, (UNSPEC_BDEP, UNSPEC_BDEP, -1))
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64-sve.md gcc-16-20250720/gcc/config/aarch64/aarch64-sve.md
*** gcc-16-20250713/gcc/config/aarch64/aarch64-sve.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/aarch64-sve.md	Sun Jul 20 22:32:08 2025
***************
*** 8690,8697 ****
  	  (unspec:<VPRED>
  	    [(match_operand:<VPRED> 1)
  	     (const_int SVE_KNOWN_PTRUE)
! 	     (match_operand:SVE_FULL_F 2 "register_operand" "w, w")
! 	     (match_operand:SVE_FULL_F 3 "aarch64_simd_reg_or_zero" "Dz, w")]
  	    SVE_COND_FP_CMP_I0)
  	  (match_operand:<VPRED> 4 "register_operand" "Upl, Upl")))]
    "TARGET_SVE"
--- 8690,8697 ----
  	  (unspec:<VPRED>
  	    [(match_operand:<VPRED> 1)
  	     (const_int SVE_KNOWN_PTRUE)
! 	     (match_operand:SVE_F 2 "register_operand" "w, w")
! 	     (match_operand:SVE_F 3 "aarch64_simd_reg_or_zero" "Dz, w")]
  	    SVE_COND_FP_CMP_I0)
  	  (match_operand:<VPRED> 4 "register_operand" "Upl, Upl")))]
    "TARGET_SVE"
***************
*** 8713,8720 ****
  	  (unspec:<VPRED>
  	    [(match_operand:<VPRED> 1)
  	     (const_int SVE_KNOWN_PTRUE)
! 	     (match_operand:SVE_FULL_F 2 "register_operand" "w")
! 	     (match_operand:SVE_FULL_F 3 "register_operand" "w")]
  	    UNSPEC_COND_FCMUO)
  	  (match_operand:<VPRED> 4 "register_operand" "Upl")))]
    "TARGET_SVE"
--- 8713,8720 ----
  	  (unspec:<VPRED>
  	    [(match_operand:<VPRED> 1)
  	     (const_int SVE_KNOWN_PTRUE)
! 	     (match_operand:SVE_F 2 "register_operand" "w")
! 	     (match_operand:SVE_F 3 "register_operand" "w")]
  	    UNSPEC_COND_FCMUO)
  	  (match_operand:<VPRED> 4 "register_operand" "Upl")))]
    "TARGET_SVE"
***************
*** 8740,8747 ****
  	      (unspec:<VPRED>
  	        [(match_operand:<VPRED> 1)
  	         (const_int SVE_KNOWN_PTRUE)
! 	         (match_operand:SVE_FULL_F 2 "register_operand" "w")
! 	         (match_operand:SVE_FULL_F 3 "aarch64_simd_reg_or_zero" "wDz")]
  	        SVE_COND_FP_CMP_I0))
  	    (match_operand:<VPRED> 4 "register_operand" "Upa"))
  	  (match_dup:<VPRED> 1)))
--- 8740,8747 ----
  	      (unspec:<VPRED>
  	        [(match_operand:<VPRED> 1)
  	         (const_int SVE_KNOWN_PTRUE)
! 	         (match_operand:SVE_F 2 "register_operand" "w")
! 	         (match_operand:SVE_F 3 "aarch64_simd_reg_or_zero" "wDz")]
  	        SVE_COND_FP_CMP_I0))
  	    (match_operand:<VPRED> 4 "register_operand" "Upa"))
  	  (match_dup:<VPRED> 1)))
***************
*** 8777,8784 ****
  	      (unspec:<VPRED>
  	        [(match_operand:<VPRED> 1)
  	         (const_int SVE_KNOWN_PTRUE)
! 	         (match_operand:SVE_FULL_F 2 "register_operand" "w")
! 	         (match_operand:SVE_FULL_F 3 "aarch64_simd_reg_or_zero" "wDz")]
  	        SVE_COND_FP_CMP_I0))
  	    (not:<VPRED>
  	      (match_operand:<VPRED> 4 "register_operand" "Upa")))
--- 8777,8784 ----
  	      (unspec:<VPRED>
  	        [(match_operand:<VPRED> 1)
  	         (const_int SVE_KNOWN_PTRUE)
! 	         (match_operand:SVE_F 2 "register_operand" "w")
! 	         (match_operand:SVE_F 3 "aarch64_simd_reg_or_zero" "wDz")]
  	        SVE_COND_FP_CMP_I0))
  	    (not:<VPRED>
  	      (match_operand:<VPRED> 4 "register_operand" "Upa")))
***************
*** 8808,8813 ****
--- 8808,8814 ----
  }
  )
  
+ ;; Same for unordered comparisons.
  (define_insn_and_split "*fcmuo<mode>_bic_combine"
    [(set (match_operand:<VPRED> 0 "register_operand" "=Upa")
  	(and:<VPRED>
***************
*** 8816,8823 ****
  	      (unspec:<VPRED>
  	        [(match_operand:<VPRED> 1)
  	         (const_int SVE_KNOWN_PTRUE)
! 	         (match_operand:SVE_FULL_F 2 "register_operand" "w")
! 	         (match_operand:SVE_FULL_F 3 "register_operand" "w")]
  	        UNSPEC_COND_FCMUO))
  	    (match_operand:<VPRED> 4 "register_operand" "Upa"))
  	  (match_dup:<VPRED> 1)))
--- 8817,8824 ----
  	      (unspec:<VPRED>
  	        [(match_operand:<VPRED> 1)
  	         (const_int SVE_KNOWN_PTRUE)
! 	         (match_operand:SVE_F 2 "register_operand" "w")
! 	         (match_operand:SVE_F 3 "register_operand" "w")]
  	        UNSPEC_COND_FCMUO))
  	    (match_operand:<VPRED> 4 "register_operand" "Upa"))
  	  (match_dup:<VPRED> 1)))
***************
*** 8843,8849 ****
  }
  )
  
- ;; Same for unordered comparisons.
  (define_insn_and_split "*fcmuo<mode>_nor_combine"
    [(set (match_operand:<VPRED> 0 "register_operand" "=Upa")
  	(and:<VPRED>
--- 8844,8849 ----
***************
*** 8852,8859 ****
  	      (unspec:<VPRED>
  	        [(match_operand:<VPRED> 1)
  	         (const_int SVE_KNOWN_PTRUE)
! 	         (match_operand:SVE_FULL_F 2 "register_operand" "w")
! 	         (match_operand:SVE_FULL_F 3 "register_operand" "w")]
  	        UNSPEC_COND_FCMUO))
  	    (not:<VPRED>
  	      (match_operand:<VPRED> 4 "register_operand" "Upa")))
--- 8852,8859 ----
  	      (unspec:<VPRED>
  	        [(match_operand:<VPRED> 1)
  	         (const_int SVE_KNOWN_PTRUE)
! 	         (match_operand:SVE_F 2 "register_operand" "w")
! 	         (match_operand:SVE_F 3 "register_operand" "w")]
  	        UNSPEC_COND_FCMUO))
  	    (not:<VPRED>
  	      (match_operand:<VPRED> 4 "register_operand" "Upa")))
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64-sve2.md gcc-16-20250720/gcc/config/aarch64/aarch64-sve2.md
*** gcc-16-20250713/gcc/config/aarch64/aarch64-sve2.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/aarch64-sve2.md	Sun Jul 20 22:32:08 2025
***************
*** 1645,1650 ****
--- 1645,1664 ----
    }
  )
  
+ (define_insn "*aarch64_sve2_unpred_nor<mode>"
+   [(set (match_operand:VDQ_I 0 "register_operand")
+ 	(and:VDQ_I
+ 	  (not:VDQ_I
+ 	    (match_operand:VDQ_I 1 "register_operand"))
+ 	  (not:VDQ_I
+ 	    (match_operand:VDQ_I 2 "register_operand"))))]
+   "TARGET_SVE2"
+   {@ [ cons: =0 , %1 , 2 ; attrs: movprfx ]
+      [ w        , 0  , w ; *              ] nbsl\t%Z0.d, %Z0.d, %Z2.d, %Z0.d
+      [ ?&w      , w  , w ; yes            ] movprfx\t%Z0, %Z1\;nbsl\t%Z0.d, %Z0.d, %Z2.d, %Z1.d
+   }
+ )
+ 
  ;; Use NBSL for vector NAND.
  (define_insn_and_rewrite "*aarch64_sve2_nand<mode>"
    [(set (match_operand:SVE_FULL_I 0 "register_operand")
***************
*** 1667,1672 ****
--- 1681,1701 ----
    }
  )
  
+ ;; Same as above but unpredicated and including Advanced SIMD modes.
+ (define_insn "*aarch64_sve2_nand_unpred<mode>"
+   [(set (match_operand:VDQ_I 0 "register_operand")
+ 	(ior:VDQ_I
+ 	  (not:VDQ_I
+ 	    (match_operand:VDQ_I 1 "register_operand"))
+ 	  (not:VDQ_I
+ 	    (match_operand:VDQ_I 2 "register_operand"))))]
+   "TARGET_SVE2"
+   {@ [ cons: =0 , %1 , 2 ; attrs: movprfx ]
+      [ w        , 0  , w ; *              ] nbsl\t%Z0.d, %Z0.d, %Z2.d, %Z2.d
+      [ ?&w      , w  , w ; yes            ] movprfx\t%Z0, %Z1\;nbsl\t%Z0.d, %Z0.d, %Z2.d, %Z2.d
+   }
+ )
+ 
  ;; Unpredicated bitwise select.
  ;; (op3 ? bsl_mov : bsl_dup) == (((bsl_mov ^ bsl_dup) & op3) ^ bsl_dup)
  (define_expand "@aarch64_sve2_bsl<mode>"
***************
*** 1927,1932 ****
--- 1956,1995 ----
    }
  )
  
+ ;; Vector EON (~(x, y)) using BSL2N.
+ (define_insn_and_rewrite "*aarch64_sve2_bsl2n_eon<mode>"
+   [(set (match_operand:SVE_FULL_I 0 "register_operand")
+ 	(unspec:SVE_FULL_I
+ 	  [(match_operand 3)
+ 	   (not:SVE_FULL_I
+ 	     (xor:SVE_FULL_I
+ 		(match_operand:SVE_FULL_I 1 "register_operand")
+ 		(match_operand:SVE_FULL_I 2 "register_operand")))]
+ 	    UNSPEC_PRED_X))]
+   "TARGET_SVE2"
+   {@ [ cons: =0, 1, 2 ; attrs: movprfx ]
+      [ w  ,      0, w ; *              ] bsl2n\t%0.d, %0.d, %0.d, %2.d
+      [ ?&w,      w, w ; yes            ] movprfx\t%0, %1\;bsl2n\t%0.d, %0.d, %1.d, %2.d
+   }
+   "&& !CONSTANT_P (operands[3])"
+   {
+     operands[3] = CONSTM1_RTX (<VPRED>mode);
+   }
+ )
+ 
+ (define_insn "*aarch64_sve2_eon_bsl2n_unpred<mode>"
+   [(set (match_operand:VDQ_I 0 "register_operand")
+        (not:VDQ_I
+          (xor:VDQ_I
+            (match_operand:VDQ_I 1 "register_operand")
+            (match_operand:VDQ_I 2 "register_operand"))))]
+   "TARGET_SVE2"
+   {@ [ cons: =0, 1, 2 ; attrs: movprfx ]
+      [ w  ,      0, w ; *              ] bsl2n\t%Z0.d, %Z0.d, %Z0.d, %Z2.d
+      [ ?&w,      w, w ; yes            ] movprfx\t%Z0, %Z1\;bsl2n\t%Z0.d, %Z0.d, %Z1.d, %Z2.d
+   }
+ )
+ 
  ;; -------------------------------------------------------------------------
  ;; ---- [INT] Shift-and-accumulate operations
  ;; -------------------------------------------------------------------------
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64-tuning-flags.def gcc-16-20250720/gcc/config/aarch64/aarch64-tuning-flags.def
*** gcc-16-20250713/gcc/config/aarch64/aarch64-tuning-flags.def	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/aarch64-tuning-flags.def	Sun Jul 20 22:32:08 2025
*************** AARCH64_EXTRA_TUNING_OPTION ("avoid_cros
*** 44,49 ****
--- 44,51 ----
  
  AARCH64_EXTRA_TUNING_OPTION ("fully_pipelined_fma", FULLY_PIPELINED_FMA)
  
+ AARCH64_EXTRA_TUNING_OPTION ("avoid_ldapur", AVOID_LDAPUR)
+ 
  /* Enable is the target prefers to use a fresh register for predicate outputs
     rather than re-use an input predicate register.  */
  AARCH64_EXTRA_TUNING_OPTION ("avoid_pred_rmw", AVOID_PRED_RMW)
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64.cc gcc-16-20250720/gcc/config/aarch64/aarch64.cc
*** gcc-16-20250713/gcc/config/aarch64/aarch64.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/aarch64.cc	Sun Jul 20 22:32:08 2025
*************** aarch64_adjust_generic_arch_tuning (stru
*** 18793,18798 ****
--- 18793,18800 ----
    if (TARGET_SVE2)
      current_tune.extra_tuning_flags
        &= ~AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS;
+   if (!AARCH64_HAVE_ISA(V8_8A))
+     aarch64_tune_params.extra_tuning_flags |= AARCH64_EXTRA_TUNE_AVOID_LDAPUR;
  }
  
  static void
*************** aarch64_override_options_internal (struc
*** 18857,18863 ****
    /* Make a copy of the tuning parameters attached to the core, which
       we may later overwrite.  */
    aarch64_tune_params = *(tune->tune);
!   if (tune->tune == &generic_tunings)
      aarch64_adjust_generic_arch_tuning (aarch64_tune_params);
  
    if (opts->x_aarch64_override_tune_string)
--- 18859,18868 ----
    /* Make a copy of the tuning parameters attached to the core, which
       we may later overwrite.  */
    aarch64_tune_params = *(tune->tune);
! 
!   if (tune->tune == &generic_tunings
!       || tune->tune == &generic_armv8_a_tunings
!       || tune->tune == &generic_armv9_a_tunings)
      aarch64_adjust_generic_arch_tuning (aarch64_tune_params);
  
    if (opts->x_aarch64_override_tune_string)
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64.h gcc-16-20250720/gcc/config/aarch64/aarch64.h
*** gcc-16-20250713/gcc/config/aarch64/aarch64.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/aarch64.h	Sun Jul 20 22:32:08 2025
*************** constexpr auto AARCH64_FL_DEFAULT_ISA_MO
*** 493,498 ****
--- 493,503 ----
    (bool (aarch64_tune_params.extra_tuning_flags \
  	 & AARCH64_EXTRA_TUNE_CHEAP_FPMR_WRITE))
  
+ /* Enable folding address computation into LDAPUR when RCPC2 is available.  */
+ #define TARGET_ENABLE_LDAPUR (TARGET_RCPC2 \
+ 			      && !(aarch64_tune_params.extra_tuning_flags \
+ 				   & AARCH64_EXTRA_TUNE_AVOID_LDAPUR))
+ 
  /* Combinatorial tests.  */
  
  #define TARGET_SVE2_OR_SME2 \
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/aarch64.md gcc-16-20250720/gcc/config/aarch64/aarch64.md
*** gcc-16-20250713/gcc/config/aarch64/aarch64.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/aarch64.md	Sun Jul 20 22:32:08 2025
***************
*** 482,487 ****
--- 482,489 ----
  ;; clobber for SVE predicates.
  (define_attr "pred_clobber" "any,no,yes" (const_string "any"))
  
+ (define_attr "enable_ldapur" "any,no,yes" (const_string "any"))
+ 
  ;; [For compatibility with Arm in pipeline models]
  ;; Attribute that specifies whether or not the instruction touches fp
  ;; registers.
***************
*** 506,512 ****
  	  (eq_attr "pred_clobber" "yes")
  	  (match_test "TARGET_SVE_PRED_CLOBBER"))
  	(eq_attr "pred_clobber" "any"))
! 
        (ior
  	(eq_attr "arch" "any")
  
--- 508,521 ----
  	  (eq_attr "pred_clobber" "yes")
  	  (match_test "TARGET_SVE_PRED_CLOBBER"))
  	(eq_attr "pred_clobber" "any"))
!       (ior
! 	(and
! 	  (eq_attr "enable_ldapur" "yes")
! 	  (match_test "TARGET_ENABLE_LDAPUR"))
! 	(and
! 	  (eq_attr "enable_ldapur" "no")
! 	  (match_test "!TARGET_ENABLE_LDAPUR"))
! 	(eq_attr "enable_ldapur" "any"))
        (ior
  	(eq_attr "arch" "any")
  
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/atomics.md gcc-16-20250720/gcc/config/aarch64/atomics.md
*** gcc-16-20250713/gcc/config/aarch64/atomics.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/atomics.md	Sun Jul 20 22:32:08 2025
***************
*** 679,691 ****
  )
  
  (define_insn "aarch64_atomic_load<mode>_rcpc"
!   [(set (match_operand:ALLI 0 "register_operand" "=r")
      (unspec_volatile:ALLI
!       [(match_operand:ALLI 1 "aarch64_sync_memory_operand" "Q")
         (match_operand:SI 2 "const_int_operand")]			;; model
        UNSPECV_LDAP))]
    "TARGET_RCPC"
!   "ldapr<atomic_sfx>\t%<w>0, %1"
  )
  
  (define_insn "aarch64_atomic_load<mode>"
--- 679,694 ----
  )
  
  (define_insn "aarch64_atomic_load<mode>_rcpc"
!   [(set (match_operand:ALLI 0 "register_operand")
      (unspec_volatile:ALLI
!       [(match_operand:ALLI 1 "aarch64_rcpc_memory_operand")
         (match_operand:SI 2 "const_int_operand")]			;; model
        UNSPECV_LDAP))]
    "TARGET_RCPC"
!   {@ [ cons: =0 , 1   ; attrs: enable_ldapur  ]
!      [ r        , Q   ; any                   ] ldapr<atomic_sfx>\t%<w>0, %1
!      [ r        , Ust ; yes                   ] ldapur<atomic_sfx>\t%<w>0, %1
!   }
  )
  
  (define_insn "aarch64_atomic_load<mode>"
***************
*** 705,725 ****
  )
  
  (define_insn "*aarch64_atomic_load<ALLX:mode>_rcpc_zext"
!   [(set (match_operand:SD_HSDI 0 "register_operand" "=r")
      (zero_extend:SD_HSDI
        (unspec_volatile:ALLX
!         [(match_operand:ALLX 1 "aarch64_sync_memory_operand" "Q")
           (match_operand:SI 2 "const_int_operand")]			;; model
         UNSPECV_LDAP)))]
    "TARGET_RCPC && (<SD_HSDI:sizen> > <ALLX:sizen>)"
!   "ldapr<ALLX:atomic_sfx>\t%w0, %1"
  )
  
  (define_insn "*aarch64_atomic_load<ALLX:mode>_rcpc_sext"
    [(set (match_operand:GPI  0 "register_operand" "=r")
      (sign_extend:GPI
        (unspec_volatile:ALLX
!         [(match_operand:ALLX 1 "aarch64_sync_memory_operand" "Q")
           (match_operand:SI 2 "const_int_operand")]			;; model
         UNSPECV_LDAP)))]
    "TARGET_RCPC2 && (<GPI:sizen> > <ALLX:sizen>)"
--- 708,731 ----
  )
  
  (define_insn "*aarch64_atomic_load<ALLX:mode>_rcpc_zext"
!   [(set (match_operand:SD_HSDI 0 "register_operand")
      (zero_extend:SD_HSDI
        (unspec_volatile:ALLX
!         [(match_operand:ALLX 1 "aarch64_rcpc_memory_operand")
           (match_operand:SI 2 "const_int_operand")]			;; model
         UNSPECV_LDAP)))]
    "TARGET_RCPC && (<SD_HSDI:sizen> > <ALLX:sizen>)"
!   {@ [ cons: =0 , 1   ; attrs: enable_ldapur ]
!      [ r        , Q   ; any                  ] ldapr<ALLX:atomic_sfx>\t%w0, %1
!      [ r        , Ust ; yes                  ] ldapur<ALLX:atomic_sfx>\t%w0, %1
!   }
  )
  
  (define_insn "*aarch64_atomic_load<ALLX:mode>_rcpc_sext"
    [(set (match_operand:GPI  0 "register_operand" "=r")
      (sign_extend:GPI
        (unspec_volatile:ALLX
!         [(match_operand:ALLX 1 "aarch64_rcpc_memory_operand" "Ust")
           (match_operand:SI 2 "const_int_operand")]			;; model
         UNSPECV_LDAP)))]
    "TARGET_RCPC2 && (<GPI:sizen> > <ALLX:sizen>)"
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/tuning_models/cortexx925.h gcc-16-20250720/gcc/config/aarch64/tuning_models/cortexx925.h
*** gcc-16-20250713/gcc/config/aarch64/tuning_models/cortexx925.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/tuning_models/cortexx925.h	Sun Jul 20 22:32:08 2025
*************** static const struct tune_params cortexx9
*** 222,228 ****
    (AARCH64_EXTRA_TUNE_BASE
     | AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS
     | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT
!    | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW),	/* tune_flags.  */
    &generic_armv9a_prefetch_tune,
    AARCH64_LDP_STP_POLICY_ALWAYS,   /* ldp_policy_model.  */
    AARCH64_LDP_STP_POLICY_ALWAYS	   /* stp_policy_model.  */
--- 222,229 ----
    (AARCH64_EXTRA_TUNE_BASE
     | AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS
     | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT
!    | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW
!    | AARCH64_EXTRA_TUNE_AVOID_LDAPUR),	/* tune_flags.  */
    &generic_armv9a_prefetch_tune,
    AARCH64_LDP_STP_POLICY_ALWAYS,   /* ldp_policy_model.  */
    AARCH64_LDP_STP_POLICY_ALWAYS	   /* stp_policy_model.  */
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/tuning_models/neoversev2.h gcc-16-20250720/gcc/config/aarch64/tuning_models/neoversev2.h
*** gcc-16-20250713/gcc/config/aarch64/tuning_models/neoversev2.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/tuning_models/neoversev2.h	Sun Jul 20 22:32:08 2025
*************** static const struct tune_params neoverse
*** 220,226 ****
    (AARCH64_EXTRA_TUNE_BASE
     | AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS
     | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT
!    | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW),	/* tune_flags.  */
    &generic_armv9a_prefetch_tune,
    AARCH64_LDP_STP_POLICY_ALWAYS,   /* ldp_policy_model.  */
    AARCH64_LDP_STP_POLICY_ALWAYS	   /* stp_policy_model.  */
--- 220,227 ----
    (AARCH64_EXTRA_TUNE_BASE
     | AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS
     | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT
!    | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW
!    | AARCH64_EXTRA_TUNE_AVOID_LDAPUR),	/* tune_flags.  */
    &generic_armv9a_prefetch_tune,
    AARCH64_LDP_STP_POLICY_ALWAYS,   /* ldp_policy_model.  */
    AARCH64_LDP_STP_POLICY_ALWAYS	   /* stp_policy_model.  */
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/tuning_models/neoversev3.h gcc-16-20250720/gcc/config/aarch64/tuning_models/neoversev3.h
*** gcc-16-20250713/gcc/config/aarch64/tuning_models/neoversev3.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/tuning_models/neoversev3.h	Sun Jul 20 22:32:08 2025
*************** static const struct tune_params neoverse
*** 220,226 ****
    (AARCH64_EXTRA_TUNE_BASE
     | AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS
     | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT
!    | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW),	/* tune_flags.  */
    &generic_armv9a_prefetch_tune,
    AARCH64_LDP_STP_POLICY_ALWAYS,   /* ldp_policy_model.  */
    AARCH64_LDP_STP_POLICY_ALWAYS	   /* stp_policy_model.  */
--- 220,227 ----
    (AARCH64_EXTRA_TUNE_BASE
     | AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS
     | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT
!    | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW
!    | AARCH64_EXTRA_TUNE_AVOID_LDAPUR),	/* tune_flags.  */
    &generic_armv9a_prefetch_tune,
    AARCH64_LDP_STP_POLICY_ALWAYS,   /* ldp_policy_model.  */
    AARCH64_LDP_STP_POLICY_ALWAYS	   /* stp_policy_model.  */
diff -Nrcpad gcc-16-20250713/gcc/config/aarch64/tuning_models/neoversev3ae.h gcc-16-20250720/gcc/config/aarch64/tuning_models/neoversev3ae.h
*** gcc-16-20250713/gcc/config/aarch64/tuning_models/neoversev3ae.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/aarch64/tuning_models/neoversev3ae.h	Sun Jul 20 22:32:08 2025
*************** static const struct tune_params neoverse
*** 220,226 ****
    (AARCH64_EXTRA_TUNE_BASE
     | AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS
     | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT
!    | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW),	/* tune_flags.  */
    &generic_armv9a_prefetch_tune,
    AARCH64_LDP_STP_POLICY_ALWAYS,   /* ldp_policy_model.  */
    AARCH64_LDP_STP_POLICY_ALWAYS	   /* stp_policy_model.  */
--- 220,227 ----
    (AARCH64_EXTRA_TUNE_BASE
     | AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS
     | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT
!    | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW
!    | AARCH64_EXTRA_TUNE_AVOID_LDAPUR),	/* tune_flags.  */
    &generic_armv9a_prefetch_tune,
    AARCH64_LDP_STP_POLICY_ALWAYS,   /* ldp_policy_model.  */
    AARCH64_LDP_STP_POLICY_ALWAYS	   /* stp_policy_model.  */
diff -Nrcpad gcc-16-20250713/gcc/config/avr/avr-passes.cc gcc-16-20250720/gcc/config/avr/avr-passes.cc
*** gcc-16-20250713/gcc/config/avr/avr-passes.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/avr/avr-passes.cc	Sun Jul 20 22:32:09 2025
*************** avr_optimize_casesi (rtx_insn *insns[5],
*** 4120,4128 ****
    JUMP_LABEL (cbranch) = xop[4];
    ++LABEL_NUSES (xop[4]);
  
-   rtx_insn *seq1 = get_insns ();
    rtx_insn *last1 = get_last_insn ();
!   end_sequence ();
  
    emit_insn_after (seq1, insns[2]);
  
--- 4120,4127 ----
    JUMP_LABEL (cbranch) = xop[4];
    ++LABEL_NUSES (xop[4]);
  
    rtx_insn *last1 = get_last_insn ();
!   rtx_insn *seq1 = end_sequence ();
  
    emit_insn_after (seq1, insns[2]);
  
*************** avr_optimize_casesi (rtx_insn *insns[5],
*** 4141,4149 ****
  
    emit_insn (pat_4);
  
-   rtx_insn *seq2 = get_insns ();
    rtx_insn *last2 = get_last_insn ();
!   end_sequence ();
  
    emit_insn_after (seq2, insns[3]);
  
--- 4140,4147 ----
  
    emit_insn (pat_4);
  
    rtx_insn *last2 = get_last_insn ();
!   rtx_insn *seq2 = end_sequence ();
  
    emit_insn_after (seq2, insns[3]);
  
diff -Nrcpad gcc-16-20250713/gcc/config/darwin-driver.cc gcc-16-20250720/gcc/config/darwin-driver.cc
*** gcc-16-20250713/gcc/config/darwin-driver.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/darwin-driver.cc	Sun Jul 20 22:32:09 2025
*************** validate_macosx_version_min (const char
*** 64,70 ****
  
    major = strtoul (version_str, &end, 10);
  
!   /* macOS 10, 11, and 12 are known. clang accepts up to 99.  */
    if (major < 10 || major > 99)
      return NULL;
  
--- 64,71 ----
  
    major = strtoul (version_str, &end, 10);
  
!   /* macOS 10, 11, 12, 13, 14, 15 and 26 are known.
!      clang accepts up to 99.  */
    if (major < 10 || major > 99)
      return NULL;
  
*************** darwin_find_version_from_kernel (void)
*** 159,173 ****
    if (*version_p++ != '.')
      goto parse_failed;
  
!   /* Darwin20 sees a transition to macOS 11.  In this, it seems that the
!      mapping to macOS minor version and patch level is now always 0, 0
!      (at least for macOS 11 and 12).  */
!   if (major_vers >= 20)
!     {
!       /* Apple clang doesn't include the minor version or the patch level
! 	 in the object file, nor does it pass it to ld  */
!       asprintf (&new_flag, "%d.00.00", major_vers - 9);
!     }
    else if (major_vers - 4 <= 4)
      /* On 10.4 and earlier, the old linker is used which does not
         support three-component system versions.
--- 160,175 ----
    if (*version_p++ != '.')
      goto parse_failed;
  
!   /* Darwin25 saw a transition to macOS 26.  */
!   if (major_vers >= 25)
!     /* Apple clang doesn't include the minor version or the patch level
!        in the object file, nor does it pass it to ld  */
!     asprintf (&new_flag, "%d.00.00", major_vers + 1);
!   /* Darwin20 saw a transition to macOS 11.  */
!   else if (major_vers >= 20)
!     /* Apple clang doesn't include the minor version or the patch level
!        in the object file, nor does it pass it to ld  */
!     asprintf (&new_flag, "%d.00.00", major_vers - 9);
    else if (major_vers - 4 <= 4)
      /* On 10.4 and earlier, the old linker is used which does not
         support three-component system versions.
diff -Nrcpad gcc-16-20250713/gcc/config/gcn/gcn-valu.md gcc-16-20250720/gcc/config/gcn/gcn-valu.md
*** gcc-16-20250713/gcc/config/gcn/gcn-valu.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/gcn/gcn-valu.md	Sun Jul 20 22:32:09 2025
***************
*** 1455,1482 ****
  ;; }}}
  ;; {{{ ALU special case: add/sub
  
! (define_insn "add<mode>3<exec_clobber>"
    [(set (match_operand:V_INT_1REG 0 "register_operand")
  	(plus:V_INT_1REG
  	  (match_operand:V_INT_1REG 1 "register_operand")
! 	  (match_operand:V_INT_1REG 2 "gcn_alu_operand")))
!    (clobber (reg:DI VCC_REG))]
    ""
    {@ [cons: =0, %1, 2; attrs: type, length]
!   [v,v,vSvA;vop2,4] v_add_co_u32\t%0, vcc, %2, %1
    [v,v,vSvB;vop2,8] ^
    })
  
! (define_insn "add<mode>3_dup<exec_clobber>"
    [(set (match_operand:V_INT_1REG 0 "register_operand")
  	(plus:V_INT_1REG
  	  (vec_duplicate:V_INT_1REG
  	    (match_operand:<SCALAR_MODE> 2 "gcn_alu_operand"))
! 	  (match_operand:V_INT_1REG 1 "register_operand")))
!    (clobber (reg:DI VCC_REG))]
    ""
    {@ [cons: =0, 1, 2; attrs: type, length]
!   [v,v,SvA;vop2,4] v_add_co_u32\t%0, vcc, %2, %1
    [v,v,SvB;vop2,8] ^
    })
  
--- 1455,1480 ----
  ;; }}}
  ;; {{{ ALU special case: add/sub
  
! (define_insn "add<mode>3<exec>"
    [(set (match_operand:V_INT_1REG 0 "register_operand")
  	(plus:V_INT_1REG
  	  (match_operand:V_INT_1REG 1 "register_operand")
! 	  (match_operand:V_INT_1REG 2 "gcn_alu_operand")))]
    ""
    {@ [cons: =0, %1, 2; attrs: type, length]
!   [v,v,vSvA;vop2,4] {v_add_u32|v_add_nc_u32}\t%0, %2, %1
    [v,v,vSvB;vop2,8] ^
    })
  
! (define_insn "add<mode>3_dup<exec>"
    [(set (match_operand:V_INT_1REG 0 "register_operand")
  	(plus:V_INT_1REG
  	  (vec_duplicate:V_INT_1REG
  	    (match_operand:<SCALAR_MODE> 2 "gcn_alu_operand"))
! 	  (match_operand:V_INT_1REG 1 "register_operand")))]
    ""
    {@ [cons: =0, 1, 2; attrs: type, length]
!   [v,v,SvA;vop2,4] {v_add_u32|v_add_nc_u32}\t%0, %2, %1
    [v,v,SvB;vop2,8] ^
    })
  
***************
*** 1503,1518 ****
  	(plus:V_SI
  	  (vec_duplicate:V_SI
  	    (match_operand:SI 1 "gcn_alu_operand"))
! 	  (match_operand:V_SI 2 "register_operand")))
     (set (match_operand:DI 3 "register_operand")
! 	(ltu:DI (plus:V_SI (vec_duplicate:V_SI (match_dup 2))
! 			   (match_dup 1))
! 		(vec_duplicate:V_SI (match_dup 2))))]
    ""
    {@ [cons: =0, 1, 2, =3; attrs: type, length]
!   [v,SvA,v,cV;vop2 ,4] v_add_co_u32\t%0, %3, %1, %2
!   [v,SvB,v,cV;vop2 ,8] ^
!   [v,SvA,v,Sg;vop3b,8] ^
    })
  
  ; v_addc does not accept an SGPR because the VCC read already counts as an
--- 1501,1516 ----
  	(plus:V_SI
  	  (vec_duplicate:V_SI
  	    (match_operand:SI 1 "gcn_alu_operand"))
! 	  (match_operand:V_SI 2 "gcn_alu_operand")))
     (set (match_operand:DI 3 "register_operand")
! 	(ltu:DI (plus:V_SI (vec_duplicate:V_SI (match_dup 1))
! 			   (match_dup 2))
! 		(match_dup 2)))]
    ""
    {@ [cons: =0, 1, 2, =3; attrs: type, length]
!   [v,SvA,vA,cV;vop2 ,4] v_add_co_u32\t%0, %3, %1, %2
!   [v,SvB,vA,cV;vop2 ,8] ^
!   [v,SvA,vA,Sg;vop3b,8] ^
    })
  
  ; v_addc does not accept an SGPR because the VCC read already counts as an
***************
*** 1551,1566 ****
    [(set_attr "type" "vop2,vop3b")
     (set_attr "length" "4,8")])
  
! (define_insn "sub<mode>3<exec_clobber>"
    [(set (match_operand:V_INT_1REG 0 "register_operand"  "=  v,   v")
  	(minus:V_INT_1REG
  	  (match_operand:V_INT_1REG 1 "gcn_alu_operand" "vSvB,   v")
! 	  (match_operand:V_INT_1REG 2 "gcn_alu_operand" "   v,vSvB")))
!    (clobber (reg:DI VCC_REG))]
    ""
    "@
!    v_sub_co_u32\t%0, vcc, %1, %2
!    v_subrev_co_u32\t%0, vcc, %2, %1"
    [(set_attr "type" "vop2")
     (set_attr "length" "8,8")])
  
--- 1549,1563 ----
    [(set_attr "type" "vop2,vop3b")
     (set_attr "length" "4,8")])
  
! (define_insn "sub<mode>3<exec>"
    [(set (match_operand:V_INT_1REG 0 "register_operand"  "=  v,   v")
  	(minus:V_INT_1REG
  	  (match_operand:V_INT_1REG 1 "gcn_alu_operand" "vSvB,   v")
! 	  (match_operand:V_INT_1REG 2 "gcn_alu_operand" "   v,vSvB")))]
    ""
    "@
!    {v_sub_u32|v_sub_nc_u32}\t%0, %1, %2
!    {v_subrev_u32|v_subrev_nc_u32}\t%0, %2, %1"
    [(set_attr "type" "vop2")
     (set_attr "length" "8,8")])
  
***************
*** 1827,1833 ****
  	(ltu:DI (plus:V_DI 
  		  (zero_extend:V_DI (vec_duplicate:<VnSI> (match_dup 1)))
  		  (match_dup 2))
! 		(match_dup 1)))]
    ""
    {@ [cons: =0, 1, 2, =3]
    [v,ASv,v,&Sg] #
--- 1824,1830 ----
  	(ltu:DI (plus:V_DI 
  		  (zero_extend:V_DI (vec_duplicate:<VnSI> (match_dup 1)))
  		  (match_dup 2))
! 		(match_dup 2)))]
    ""
    {@ [cons: =0, 1, 2, =3]
    [v,ASv,v,&Sg] #
***************
*** 1878,1884 ****
  	  (ltu:DI (plus:V_DI 
  		    (zero_extend:V_DI (vec_duplicate:<VnSI> (match_dup 1)))
  		    (match_dup 2))
! 		  (match_dup 1))
  	  (match_dup 5)))]
    ""
    {@ [cons: =0, 1, 2, =3, 4, 5]
--- 1875,1881 ----
  	  (ltu:DI (plus:V_DI 
  		    (zero_extend:V_DI (vec_duplicate:<VnSI> (match_dup 1)))
  		    (match_dup 2))
! 		  (match_dup 2))
  	  (match_dup 5)))]
    ""
    {@ [cons: =0, 1, 2, =3, 4, 5]
***************
*** 1932,1938 ****
  	(ltu:DI (plus:V_DI 
  		  (zero_extend:V_DI (match_dup 1))
  		  (vec_duplicate:V_DI (match_dup 2)))
! 		(match_dup 1)))]
    ""
    {@ [cons: =0, 1, 2, =3]
    [v,v,DbSv,&cV] #
--- 1929,1935 ----
  	(ltu:DI (plus:V_DI 
  		  (zero_extend:V_DI (match_dup 1))
  		  (vec_duplicate:V_DI (match_dup 2)))
! 		(vec_duplicate:V_DI (match_dup 2))))]
    ""
    {@ [cons: =0, 1, 2, =3]
    [v,v,DbSv,&cV] #
***************
*** 1981,1987 ****
  	  (ltu:DI (plus:V_DI 
  		    (zero_extend:V_DI (match_dup 1))
  		    (vec_duplicate:V_DI (match_dup 2)))
! 		  (match_dup 1))
  	  (match_dup 5)))]
    ""
    {@ [cons: =0, 1, 2, =3, 4, 5]
--- 1978,1984 ----
  	  (ltu:DI (plus:V_DI 
  		    (zero_extend:V_DI (match_dup 1))
  		    (vec_duplicate:V_DI (match_dup 2)))
! 		  (vec_duplicate:V_DI (match_dup 2)))
  	  (match_dup 5)))]
    ""
    {@ [cons: =0, 1, 2, =3, 4, 5]
***************
*** 3795,3803 ****
      /* Unsigned comparisons use the same patterns as signed comparisons,
         except that they use unsigned operators (e.g. LTU vs LT).
         The '%E1' directive then does the Right Thing.  */
!     emit_insn (gen_vec_cmpu<mode>di_exec (operands[0], operands[1],
! 					  operands[2], operands[3],
! 					  operands[4]));
      DONE;
    })
  
--- 3792,3800 ----
      /* Unsigned comparisons use the same patterns as signed comparisons,
         except that they use unsigned operators (e.g. LTU vs LT).
         The '%E1' directive then does the Right Thing.  */
!     emit_insn (gen_vec_cmp<mode>di_exec (operands[0], operands[1],
! 					 operands[2], operands[3],
! 					 operands[4]));
      DONE;
    })
  
diff -Nrcpad gcc-16-20250713/gcc/config/gcn/gcn.md gcc-16-20250720/gcc/config/gcn/gcn.md
*** gcc-16-20250713/gcc/config/gcn/gcn.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/gcn/gcn.md	Sun Jul 20 22:32:09 2025
***************
*** 1136,1149 ****
    [(set (match_operand:SI 0 "register_operand"         "= Sg, Sg, Sg,   v")
          (plus:SI (match_operand:SI 1 "gcn_alu_operand" "%SgA,  0,SgA,   v")
  		 (match_operand:SI 2 "gcn_alu_operand" " SgA,SgJ,  B,vBSv")))
!    (clobber (match_scratch:BI 3			       "= cs, cs, cs,   X"))
!    (clobber (match_scratch:DI 4			       "=  X,  X,  X,  cV"))]
    ""
    "@
     s_add_i32\t%0, %1, %2
     s_addk_i32\t%0, %2
     s_add_i32\t%0, %1, %2
!    v_add_co_u32\t%0, vcc, %2, %1"
    [(set_attr "type" "sop2,sopk,sop2,vop2")
     (set_attr "length" "4,4,8,8")])
  
--- 1136,1148 ----
    [(set (match_operand:SI 0 "register_operand"         "= Sg, Sg, Sg,   v")
          (plus:SI (match_operand:SI 1 "gcn_alu_operand" "%SgA,  0,SgA,   v")
  		 (match_operand:SI 2 "gcn_alu_operand" " SgA,SgJ,  B,vBSv")))
!    (clobber (match_scratch:BI 3			       "= cs, cs, cs,   X"))]
    ""
    "@
     s_add_i32\t%0, %1, %2
     s_addk_i32\t%0, %2
     s_add_i32\t%0, %1, %2
!    {v_add_u32|v_add_nc_u32}\t%0, %2, %1"
    [(set_attr "type" "sop2,sopk,sop2,vop2")
     (set_attr "length" "4,4,8,8")])
  
***************
*** 1151,1158 ****
    [(parallel [(set (match_operand:SI 0 "register_operand")
  		   (plus:SI (match_operand:SI 1 "gcn_alu_operand")
  			    (match_operand:SI 2 "gcn_alu_operand")))
! 	      (clobber (reg:BI SCC_REG))
! 	      (clobber (scratch:DI))])]
    ""
    {})
  
--- 1150,1156 ----
    [(parallel [(set (match_operand:SI 0 "register_operand")
  		   (plus:SI (match_operand:SI 1 "gcn_alu_operand")
  			    (match_operand:SI 2 "gcn_alu_operand")))
! 	      (clobber (reg:BI SCC_REG))])]
    ""
    {})
  
***************
*** 1332,1345 ****
    [(set (match_operand:SI 0 "register_operand"          "=Sg, Sg,    v,   v")
  	(minus:SI (match_operand:SI 1 "gcn_alu_operand" "SgA,SgA,    v,vBSv")
  		  (match_operand:SI 2 "gcn_alu_operand" "SgA,  B, vBSv,   v")))
!    (clobber (match_scratch:BI 3				"=cs, cs,    X,   X"))
!    (clobber (match_scratch:DI 4				"= X,  X,   cV,  cV"))]
    ""
    "@
     s_sub_i32\t%0, %1, %2
     s_sub_i32\t%0, %1, %2
!    v_subrev_co_u32\t%0, vcc, %2, %1
!    v_sub_co_u32\t%0, vcc, %1, %2"
    [(set_attr "type" "sop2,sop2,vop2,vop2")
     (set_attr "length" "4,8,8,8")])
  
--- 1330,1342 ----
    [(set (match_operand:SI 0 "register_operand"          "=Sg, Sg,    v,   v")
  	(minus:SI (match_operand:SI 1 "gcn_alu_operand" "SgA,SgA,    v,vBSv")
  		  (match_operand:SI 2 "gcn_alu_operand" "SgA,  B, vBSv,   v")))
!    (clobber (match_scratch:BI 3				"=cs, cs,    X,   X"))]
    ""
    "@
     s_sub_i32\t%0, %1, %2
     s_sub_i32\t%0, %1, %2
!    {v_subrev_u32|v_subrev_nc_u32}\t%0, %2, %1
!    {v_sub_u32|v_sub_nc_u32}\t%0, %1, %2"
    [(set_attr "type" "sop2,sop2,vop2,vop2")
     (set_attr "length" "4,8,8,8")])
  
***************
*** 1569,1576 ****
  	(mult:DI (match_operand:DI 1 "register_operand" "%Sg, Sg,  v, v")
  		 (match_operand:DI 2 "nonmemory_operand" "Sg,  i,vSv, A")))
     (clobber (match_scratch:SI 3 "=&Sg,&Sg,&v,&v"))
!    (clobber (match_scratch:BI 4  "=cs, cs, X, X"))
!    (clobber (match_scratch:DI 5   "=X,  X,cV,cV"))]
    ""
    "#"
    "reload_completed"
--- 1566,1572 ----
  	(mult:DI (match_operand:DI 1 "register_operand" "%Sg, Sg,  v, v")
  		 (match_operand:DI 2 "nonmemory_operand" "Sg,  i,vSv, A")))
     (clobber (match_scratch:SI 3 "=&Sg,&Sg,&v,&v"))
!    (clobber (match_scratch:BI 4  "=cs, cs, X, X"))]
    ""
    "#"
    "reload_completed"
***************
*** 1585,1599 ****
      emit_insn (gen_umulsidi3 (operands[0], op1lo, op2lo));
      emit_insn (gen_mulsi3 (tmp, op1lo, op2hi));
      rtx add = gen_rtx_SET (dsthi, gen_rtx_PLUS (SImode, dsthi, tmp));
!     rtx clob1 = gen_rtx_CLOBBER (VOIDmode, operands[4]);
!     rtx clob2 = gen_rtx_CLOBBER (VOIDmode, operands[5]);
!     add = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (3, add, clob1, clob2));
      emit_insn (add);
      emit_insn (gen_mulsi3 (tmp, op1hi, op2lo));
      add = gen_rtx_SET (dsthi, gen_rtx_PLUS (SImode, dsthi, tmp));
!     clob1 = gen_rtx_CLOBBER (VOIDmode, operands[4]);
!     clob2 = gen_rtx_CLOBBER (VOIDmode, operands[5]);
!     add = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (3, add, clob1, clob2));
      emit_insn (add);
      DONE;
    })
--- 1581,1593 ----
      emit_insn (gen_umulsidi3 (operands[0], op1lo, op2lo));
      emit_insn (gen_mulsi3 (tmp, op1lo, op2hi));
      rtx add = gen_rtx_SET (dsthi, gen_rtx_PLUS (SImode, dsthi, tmp));
!     rtx clob = gen_rtx_CLOBBER (VOIDmode, operands[4]);
!     add = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, add, clob));
      emit_insn (add);
      emit_insn (gen_mulsi3 (tmp, op1hi, op2lo));
      add = gen_rtx_SET (dsthi, gen_rtx_PLUS (SImode, dsthi, tmp));
!     clob = gen_rtx_CLOBBER (VOIDmode, operands[4]);
!     add = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, add, clob));
      emit_insn (add);
      DONE;
    })
diff -Nrcpad gcc-16-20250713/gcc/config/i386/i386-expand.cc gcc-16-20250720/gcc/config/i386/i386-expand.cc
*** gcc-16-20250713/gcc/config/i386/i386-expand.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/i386/i386-expand.cc	Sun Jul 20 22:32:09 2025
*************** ix86_expand_move (machine_mode mode, rtx
*** 387,393 ****
        tmp = XEXP (op1, 0);
  
        if (GET_CODE (tmp) != PLUS
! 	  || GET_CODE (XEXP (tmp, 0)) != SYMBOL_REF)
  	break;
  
        op1 = XEXP (tmp, 0);
--- 387,393 ----
        tmp = XEXP (op1, 0);
  
        if (GET_CODE (tmp) != PLUS
! 	  || !SYMBOL_REF_P (XEXP (tmp, 0)))
  	break;
  
        op1 = XEXP (tmp, 0);
*************** ix86_expand_move (machine_mode mode, rtx
*** 487,493 ****
  		op1 = machopic_legitimize_pic_address (op1, mode,
  						       tmp == op1 ? 0 : tmp);
  	    }
! 	  if (op0 != op1 && GET_CODE (op0) != MEM)
  	    {
  	      rtx insn = gen_rtx_SET (op0, op1);
  	      emit_insn (insn);
--- 487,493 ----
  		op1 = machopic_legitimize_pic_address (op1, mode,
  						       tmp == op1 ? 0 : tmp);
  	    }
! 	  if (op0 != op1 && !MEM_P (op0))
  	    {
  	      rtx insn = gen_rtx_SET (op0, op1);
  	      emit_insn (insn);
*************** ix86_expand_vector_logical_operator (enu
*** 1396,1406 ****
       to cast them temporarily to integer vectors.  */
    if (op1
        && !TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL
!       && (SUBREG_P (op2) || GET_CODE (op2) == CONST_VECTOR)
        && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op1))) == MODE_VECTOR_FLOAT
        && GET_MODE_SIZE (GET_MODE (SUBREG_REG (op1))) == GET_MODE_SIZE (mode)
        && SUBREG_BYTE (op1) == 0
!       && (GET_CODE (op2) == CONST_VECTOR
  	  || (GET_MODE (SUBREG_REG (op1)) == GET_MODE (SUBREG_REG (op2))
  	      && SUBREG_BYTE (op2) == 0))
        && can_create_pseudo_p ())
--- 1396,1406 ----
       to cast them temporarily to integer vectors.  */
    if (op1
        && !TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL
!       && (SUBREG_P (op2) || CONST_VECTOR_P (op2))
        && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op1))) == MODE_VECTOR_FLOAT
        && GET_MODE_SIZE (GET_MODE (SUBREG_REG (op1))) == GET_MODE_SIZE (mode)
        && SUBREG_BYTE (op1) == 0
!       && (CONST_VECTOR_P (op2)
  	  || (GET_MODE (SUBREG_REG (op1)) == GET_MODE (SUBREG_REG (op2))
  	      && SUBREG_BYTE (op2) == 0))
        && can_create_pseudo_p ())
*************** ix86_expand_vector_logical_operator (enu
*** 1415,1421 ****
  	case E_V4DFmode:
  	case E_V8DFmode:
  	  dst = gen_reg_rtx (GET_MODE (SUBREG_REG (op1)));
! 	  if (GET_CODE (op2) == CONST_VECTOR)
  	    {
  	      op2 = gen_lowpart (GET_MODE (dst), op2);
  	      op2 = force_reg (GET_MODE (dst), op2);
--- 1415,1421 ----
  	case E_V4DFmode:
  	case E_V8DFmode:
  	  dst = gen_reg_rtx (GET_MODE (SUBREG_REG (op1)));
! 	  if (CONST_VECTOR_P (op2))
  	    {
  	      op2 = gen_lowpart (GET_MODE (dst), op2);
  	      op2 = force_reg (GET_MODE (dst), op2);
*************** ix86_expand_int_sse_cmp (rtx dest, enum
*** 4918,4924 ****
  	case LEU:
  	  /* x <= cst can be handled as x < cst + 1 unless there is
  	     wrap around in cst + 1.  */
! 	  if (GET_CODE (cop1) == CONST_VECTOR
  	      && GET_MODE_INNER (mode) != TImode)
  	    {
  	      unsigned int n_elts = GET_MODE_NUNITS (mode), i;
--- 4918,4924 ----
  	case LEU:
  	  /* x <= cst can be handled as x < cst + 1 unless there is
  	     wrap around in cst + 1.  */
! 	  if (CONST_VECTOR_P (cop1)
  	      && GET_MODE_INNER (mode) != TImode)
  	    {
  	      unsigned int n_elts = GET_MODE_NUNITS (mode), i;
*************** ix86_expand_int_sse_cmp (rtx dest, enum
*** 4962,4968 ****
  	case GEU:
  	  /* x >= cst can be handled as x > cst - 1 unless there is
  	     wrap around in cst - 1.  */
! 	  if (GET_CODE (cop1) == CONST_VECTOR
  	      && GET_MODE_INNER (mode) != TImode)
  	    {
  	      unsigned int n_elts = GET_MODE_NUNITS (mode), i;
--- 4962,4968 ----
  	case GEU:
  	  /* x >= cst can be handled as x > cst - 1 unless there is
  	     wrap around in cst - 1.  */
! 	  if (CONST_VECTOR_P (cop1)
  	      && GET_MODE_INNER (mode) != TImode)
  	    {
  	      unsigned int n_elts = GET_MODE_NUNITS (mode), i;
*************** ix86_expand_int_sse_cmp (rtx dest, enum
*** 5033,5041 ****
  	    }
  	}
  
!       if (GET_CODE (cop0) == CONST_VECTOR)
  	cop0 = force_reg (mode, cop0);
!       else if (GET_CODE (cop1) == CONST_VECTOR)
  	cop1 = force_reg (mode, cop1);
  
        rtx optrue = op_true ? op_true : CONSTM1_RTX (data_mode);
--- 5033,5041 ----
  	    }
  	}
  
!       if (CONST_VECTOR_P (cop0))
  	cop0 = force_reg (mode, cop0);
!       else if (CONST_VECTOR_P (cop1))
  	cop1 = force_reg (mode, cop1);
  
        rtx optrue = op_true ? op_true : CONSTM1_RTX (data_mode);
*************** ix86_expand_int_sse_cmp (rtx dest, enum
*** 5234,5240 ****
    if (*negate)
      std::swap (op_true, op_false);
  
!   if (GET_CODE (cop1) == CONST_VECTOR)
      cop1 = force_reg (mode, cop1);
  
    /* Allow the comparison to be done in one mode, but the movcc to
--- 5234,5240 ----
    if (*negate)
      std::swap (op_true, op_false);
  
!   if (CONST_VECTOR_P (cop1))
      cop1 = force_reg (mode, cop1);
  
    /* Allow the comparison to be done in one mode, but the movcc to
*************** ix86_extract_perm_from_pool_constant (in
*** 6188,6194 ****
  
    rtx constant = get_pool_constant (XEXP (mem, 0));
  
!   if (GET_CODE (constant) != CONST_VECTOR)
      return false;
  
    /* There could be some rtx like
--- 6188,6194 ----
  
    rtx constant = get_pool_constant (XEXP (mem, 0));
  
!   if (!CONST_VECTOR_P (constant))
      return false;
  
    /* There could be some rtx like
*************** ix86_extract_perm_from_pool_constant (in
*** 6198,6204 ****
      {
        constant = simplify_subreg (mode, constant, GET_MODE (constant), 0);
  
!       if (constant == nullptr || GET_CODE (constant) != CONST_VECTOR)
  	return false;
      }
  
--- 6198,6204 ----
      {
        constant = simplify_subreg (mode, constant, GET_MODE (constant), 0);
  
!       if (constant == nullptr || !CONST_VECTOR_P (constant))
  	return false;
      }
  
*************** ix86_split_to_parts (rtx operand, rtx *p
*** 6244,6250 ****
        return size;
      }
  
!   if (GET_CODE (operand) == CONST_VECTOR)
      {
        scalar_int_mode imode = int_mode_for_mode (mode).require ();
        /* Caution: if we looked through a constant pool memory above,
--- 6244,6250 ----
        return size;
      }
  
!   if (CONST_VECTOR_P (operand))
      {
        scalar_int_mode imode = int_mode_for_mode (mode).require ();
        /* Caution: if we looked through a constant pool memory above,
*************** ix86_split_long_move (rtx operands[])
*** 6378,6384 ****
  	 fp moves, that force all constants to memory to allow combining.  */
  
        if (MEM_P (operands[1])
! 	  && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF
  	  && CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0)))
  	operands[1] = get_pool_constant (XEXP (operands[1], 0));
        if (push_operand (operands[0], VOIDmode))
--- 6378,6384 ----
  	 fp moves, that force all constants to memory to allow combining.  */
  
        if (MEM_P (operands[1])
! 	  && SYMBOL_REF_P (XEXP (operands[1], 0))
  	  && CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0)))
  	operands[1] = get_pool_constant (XEXP (operands[1], 0));
        if (push_operand (operands[0], VOIDmode))
*************** construct_plt_address (rtx symbol)
*** 10245,10251 ****
  {
    rtx tmp, unspec;
  
!   gcc_assert (GET_CODE (symbol) == SYMBOL_REF);
    gcc_assert (ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF);
    gcc_assert (Pmode == DImode);
  
--- 10245,10251 ----
  {
    rtx tmp, unspec;
  
!   gcc_assert (SYMBOL_REF_P (symbol));
    gcc_assert (ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF);
    gcc_assert (Pmode == DImode);
  
*************** ix86_expand_call (rtx retval, rtx fnaddr
*** 10279,10285 ****
    tree fndecl;
    bool call_no_callee_saved_registers = false;
  
!   if (GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF)
      {
        fndecl = SYMBOL_REF_DECL (XEXP (fnaddr, 0));
        if (fndecl)
--- 10279,10285 ----
    tree fndecl;
    bool call_no_callee_saved_registers = false;
  
!   if (SYMBOL_REF_P (XEXP (fnaddr, 0)))
      {
        fndecl = SYMBOL_REF_DECL (XEXP (fnaddr, 0));
        if (fndecl)
*************** ix86_expand_call (rtx retval, rtx fnaddr
*** 10316,10322 ****
    if (TARGET_MACHO && !TARGET_64BIT)
      {
  #if TARGET_MACHO
!       if (flag_pic && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF)
  	fnaddr = machopic_indirect_call_target (fnaddr);
  #endif
      }
--- 10316,10322 ----
    if (TARGET_MACHO && !TARGET_64BIT)
      {
  #if TARGET_MACHO
!       if (flag_pic && SYMBOL_REF_P (XEXP (fnaddr, 0)))
  	fnaddr = machopic_indirect_call_target (fnaddr);
  #endif
      }
*************** ix86_expand_call (rtx retval, rtx fnaddr
*** 10326,10332 ****
  	 check if PLT was explicitly avoided via no-plt or "noplt" attribute, making
  	 it an indirect call.  */
        if (flag_pic
! 	  && GET_CODE (addr) == SYMBOL_REF
  	  && ix86_call_use_plt_p (addr))
  	{
  	  if (flag_plt
--- 10326,10332 ----
  	 check if PLT was explicitly avoided via no-plt or "noplt" attribute, making
  	 it an indirect call.  */
        if (flag_pic
! 	  && SYMBOL_REF_P (addr)
  	  && ix86_call_use_plt_p (addr))
  	{
  	  if (flag_plt
*************** ix86_expand_call (rtx retval, rtx fnaddr
*** 10400,10406 ****
    if (ix86_cmodel == CM_LARGE_PIC
        && !TARGET_PECOFF
        && MEM_P (fnaddr)
!       && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF
        && !local_symbolic_operand (XEXP (fnaddr, 0), VOIDmode))
      fnaddr = gen_rtx_MEM (QImode, construct_plt_address (XEXP (fnaddr, 0)));
    /* Since x32 GOT slot is 64 bit with zero upper 32 bits, indirect
--- 10400,10406 ----
    if (ix86_cmodel == CM_LARGE_PIC
        && !TARGET_PECOFF
        && MEM_P (fnaddr)
!       && SYMBOL_REF_P (XEXP (fnaddr, 0))
        && !local_symbolic_operand (XEXP (fnaddr, 0), VOIDmode))
      fnaddr = gen_rtx_MEM (QImode, construct_plt_address (XEXP (fnaddr, 0)));
    /* Since x32 GOT slot is 64 bit with zero upper 32 bits, indirect
*************** ix86_expand_call (rtx retval, rtx fnaddr
*** 10503,10509 ****
      }
  
    if (TARGET_MACHO && TARGET_64BIT && !sibcall
!       && ((GET_CODE (addr) == SYMBOL_REF && !SYMBOL_REF_LOCAL_P (addr))
  	  || !fndecl || TREE_PUBLIC (fndecl)))
      {
        /* We allow public functions defined in a TU to bind locally for PIC
--- 10503,10509 ----
      }
  
    if (TARGET_MACHO && TARGET_64BIT && !sibcall
!       && ((SYMBOL_REF_P (addr) && !SYMBOL_REF_LOCAL_P (addr))
  	  || !fndecl || TREE_PUBLIC (fndecl)))
      {
        /* We allow public functions defined in a TU to bind locally for PIC
*************** ix86_expand_args_builtin (const struct b
*** 12612,12618 ****
  static rtx
  ix86_erase_embedded_rounding (rtx pat)
  {
!   if (GET_CODE (pat) == INSN)
      pat = PATTERN (pat);
  
    gcc_assert (GET_CODE (pat) == SET);
--- 12612,12618 ----
  static rtx
  ix86_erase_embedded_rounding (rtx pat)
  {
!   if (NONJUMP_INSN_P (pat))
      pat = PATTERN (pat);
  
    gcc_assert (GET_CODE (pat) == SET);
*************** const_vector_equal_evenodd_p (rtx op)
*** 25327,25333 ****
  {
    machine_mode mode = GET_MODE (op);
    int i, nunits = GET_MODE_NUNITS (mode);
!   if (GET_CODE (op) != CONST_VECTOR
        || nunits != CONST_VECTOR_NUNITS (op))
      return false;
    for (i = 0; i < nunits; i += 2)
--- 25327,25333 ----
  {
    machine_mode mode = GET_MODE (op);
    int i, nunits = GET_MODE_NUNITS (mode);
!   if (!CONST_VECTOR_P (op)
        || nunits != CONST_VECTOR_NUNITS (op))
      return false;
    for (i = 0; i < nunits; i += 2)
*************** ix86_notrack_prefixed_insn_p (rtx_insn *
*** 25670,25676 ****
  
        /* Do not emit 'notrack' if it's not an indirect call.  */
        if (MEM_P (addr)
! 	  && GET_CODE (XEXP (addr, 0)) == SYMBOL_REF)
  	return false;
        else
  	return find_reg_note (insn, REG_CALL_NOCF_CHECK, 0);
--- 25670,25676 ----
  
        /* Do not emit 'notrack' if it's not an indirect call.  */
        if (MEM_P (addr)
! 	  && SYMBOL_REF_P (XEXP (addr, 0)))
  	return false;
        else
  	return find_reg_note (insn, REG_CALL_NOCF_CHECK, 0);
*************** do_mem_operand:
*** 26487,26494 ****
        if (rtx_equal_p (op, args[2]))
  	return 0xaa;
        /* Check if CONST_VECTOR is the ones-complement of args[2].  */
!       if (GET_CODE (op) == CONST_VECTOR
! 	  && GET_CODE (args[2]) == CONST_VECTOR
  	  && rtx_equal_p (simplify_const_unary_operation (NOT, GET_MODE (op),
  							  op, GET_MODE (op)),
  			  args[2]))
--- 26487,26494 ----
        if (rtx_equal_p (op, args[2]))
  	return 0xaa;
        /* Check if CONST_VECTOR is the ones-complement of args[2].  */
!       if (CONST_VECTOR_P (op)
! 	  && CONST_VECTOR_P (args[2])
  	  && rtx_equal_p (simplify_const_unary_operation (NOT, GET_MODE (op),
  							  op, GET_MODE (op)),
  			  args[2]))
*************** do_mem_operand:
*** 26501,26508 ****
        if (rtx_equal_p (op, args[0]))
  	return 0xf0;
        /* Check if CONST_VECTOR is the ones-complement of args[0].  */
!       if (GET_CODE (op) == CONST_VECTOR
! 	  && GET_CODE (args[0]) == CONST_VECTOR
  	  && rtx_equal_p (simplify_const_unary_operation (NOT, GET_MODE (op),
  							  op, GET_MODE (op)),
  			  args[0]))
--- 26501,26508 ----
        if (rtx_equal_p (op, args[0]))
  	return 0xf0;
        /* Check if CONST_VECTOR is the ones-complement of args[0].  */
!       if (CONST_VECTOR_P (op)
! 	  && CONST_VECTOR_P (args[0])
  	  && rtx_equal_p (simplify_const_unary_operation (NOT, GET_MODE (op),
  							  op, GET_MODE (op)),
  			  args[0]))
*************** do_mem_operand:
*** 26515,26522 ****
        if (rtx_equal_p (op, args[1]))
  	return 0xcc;
        /* Check if CONST_VECTOR is the ones-complement of args[1].  */
!       if (GET_CODE (op) == CONST_VECTOR
! 	  && GET_CODE (args[1]) == CONST_VECTOR
  	  && rtx_equal_p (simplify_const_unary_operation (NOT, GET_MODE (op),
  							  op, GET_MODE (op)),
  			  args[1]))
--- 26515,26522 ----
        if (rtx_equal_p (op, args[1]))
  	return 0xcc;
        /* Check if CONST_VECTOR is the ones-complement of args[1].  */
!       if (CONST_VECTOR_P (op)
! 	  && CONST_VECTOR_P (args[1])
  	  && rtx_equal_p (simplify_const_unary_operation (NOT, GET_MODE (op),
  							  op, GET_MODE (op)),
  			  args[1]))
*************** ix86_expand_ternlog (machine_mode mode,
*** 26746,26760 ****
  	  && (!op2 || !side_effects_p (op2))
  	  && op0)
  	{
- 	  if (GET_MODE (op0) != mode)
- 	    op0 = gen_lowpart (mode, op0);
- 	  if (!TARGET_64BIT && !register_operand (op0, mode))
- 	    {
- 	      /* Avoid force_reg (mode, op0).  */
- 	      rtx reg = gen_reg_rtx (mode);
- 	      emit_move_insn (reg, op0);
- 	      op0 = reg;
- 	    }
  	  emit_move_insn (target, gen_rtx_XOR (mode, op0, CONSTM1_RTX (mode)));
  	  return target;
  	}
--- 26746,26751 ----
*************** ix86_expand_ternlog (machine_mode mode,
*** 26779,26793 ****
  	  && (!op2 || !side_effects_p (op2))
  	  && op1)
  	{
- 	  if (GET_MODE (op1) != mode)
- 	    op1 = gen_lowpart (mode, op1);
- 	  if (!TARGET_64BIT && !register_operand (op1, mode))
- 	    {
- 	      /* Avoid force_reg (mode, op1).  */
- 	      rtx reg = gen_reg_rtx (mode);
- 	      emit_move_insn (reg, op1);
- 	      op1 = reg;
- 	    }
  	  emit_move_insn (target, gen_rtx_XOR (mode, op1, CONSTM1_RTX (mode)));
  	  return target;
  	}
--- 26770,26775 ----
*************** ix86_expand_ternlog (machine_mode mode,
*** 26819,26833 ****
  	  && (!op1 || !side_effects_p (op1))
  	  && op2)
  	{
- 	  if (GET_MODE (op2) != mode)
- 	    op2 = gen_lowpart (mode, op2);
- 	  if (!TARGET_64BIT && !register_operand (op2, mode))
- 	    {
- 	      /* Avoid force_reg (mode, op2).  */
- 	      rtx reg = gen_reg_rtx (mode);
- 	      emit_move_insn (reg, op2);
- 	      op2 = reg;
- 	    }
  	  emit_move_insn (target, gen_rtx_XOR (mode, op2, CONSTM1_RTX (mode)));
  	  return target;
  	}
--- 26801,26806 ----
diff -Nrcpad gcc-16-20250713/gcc/config/i386/i386-features.cc gcc-16-20250720/gcc/config/i386/i386-features.cc
*** gcc-16-20250713/gcc/config/i386/i386-features.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/i386/i386-features.cc	Sun Jul 20 22:32:09 2025
*************** convertible_comparison_p (rtx_insn *insn
*** 2141,2147 ****
  
    gcc_assert (GET_CODE (src) == COMPARE);
  
!   if (GET_CODE (dst) != REG
        || REGNO (dst) != FLAGS_REG
        || GET_MODE (dst) != CCZmode)
      return false;
--- 2141,2147 ----
  
    gcc_assert (GET_CODE (src) == COMPARE);
  
!   if (!REG_P (dst)
        || REGNO (dst) != FLAGS_REG
        || GET_MODE (dst) != CCZmode)
      return false;
*************** rest_of_insert_endbr_and_patchable_area
*** 2953,2959 ****
  
  		  /* Also generate ENDBRANCH for non-tail call which
  		     may return via indirect branch.  */
! 		  if (GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF)
  		    fndecl = SYMBOL_REF_DECL (XEXP (fnaddr, 0));
  		  if (fndecl == NULL_TREE)
  		    fndecl = MEM_EXPR (fnaddr);
--- 2953,2959 ----
  
  		  /* Also generate ENDBRANCH for non-tail call which
  		     may return via indirect branch.  */
! 		  if (SYMBOL_REF_P (XEXP (fnaddr, 0)))
  		    fndecl = SYMBOL_REF_DECL (XEXP (fnaddr, 0));
  		  if (fndecl == NULL_TREE)
  		    fndecl = MEM_EXPR (fnaddr);
*************** ix86_broadcast_inner (rtx op, machine_mo
*** 3534,3555 ****
  		      machine_mode *scalar_mode_p,
  		      x86_cse_kind *kind_p, rtx_insn **insn_p)
  {
!   if (op == const0_rtx || op == CONST0_RTX (mode))
      {
        *scalar_mode_p = QImode;
        *kind_p = X86_CSE_CONST0_VECTOR;
        *insn_p = nullptr;
        return const0_rtx;
!     }
!   else if ((GET_MODE_CLASS (mode) == MODE_VECTOR_INT
! 	    && (op == constm1_rtx || op == CONSTM1_RTX (mode)))
! 	    || (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT
! 		&& float_vector_all_ones_operand (op, mode)))
!     {
        *scalar_mode_p = QImode;
        *kind_p = X86_CSE_CONSTM1_VECTOR;
        *insn_p = nullptr;
        return constm1_rtx;
      }
  
    mode = GET_MODE (op);
--- 3534,3553 ----
  		      machine_mode *scalar_mode_p,
  		      x86_cse_kind *kind_p, rtx_insn **insn_p)
  {
!   switch (standard_sse_constant_p (op, mode))
      {
+     case 1:
        *scalar_mode_p = QImode;
        *kind_p = X86_CSE_CONST0_VECTOR;
        *insn_p = nullptr;
        return const0_rtx;
!     case 2:
        *scalar_mode_p = QImode;
        *kind_p = X86_CSE_CONSTM1_VECTOR;
        *insn_p = nullptr;
        return constm1_rtx;
+     default:
+       break;
      }
  
    mode = GET_MODE (op);
diff -Nrcpad gcc-16-20250713/gcc/config/i386/i386-options.cc gcc-16-20250720/gcc/config/i386/i386-options.cc
*** gcc-16-20250713/gcc/config/i386/i386-options.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/i386/i386-options.cc	Sun Jul 20 22:32:09 2025
*************** ix86_option_override_internal (bool main
*** 2839,2845 ****
  
    /* Set the default value for -mfentry.  */
    if (!opts_set->x_flag_fentry)
!     opts->x_flag_fentry = TARGET_SEH;
    else
      {
        if (!TARGET_64BIT_P (opts->x_ix86_isa_flags) && opts->x_flag_pic
--- 2839,2847 ----
  
    /* Set the default value for -mfentry.  */
    if (!opts_set->x_flag_fentry)
!     opts->x_flag_fentry = (TARGET_SEH
! 			   || (TARGET_64BIT_P (opts->x_ix86_isa_flags)
! 			       && ENABLE_X86_64_MFENTRY));
    else
      {
        if (!TARGET_64BIT_P (opts->x_ix86_isa_flags) && opts->x_flag_pic
*************** ix86_option_override_internal (bool main
*** 2850,2855 ****
--- 2852,2868 ----
  	sorry ("%<-mno-fentry%> isn%'t compatible with SEH");
      }
  
+ #ifdef OPTION_GLIBC_P
+   /* -mfentry is supported only on glibc targets.  */
+   if (!opts->x_flag_fentry
+       && OPTION_GLIBC_P (opts)
+       && (TARGET_64BIT_P (opts->x_ix86_isa_flags) || !opts->x_flag_pic)
+       && opts->x_flag_shrink_wrap
+       && opts->x_profile_flag)
+     warning (0, "%<-pg%> without %<-mfentry%> may be unreliable with "
+ 	     "shrink wrapping");
+ #endif
+ 
    if (TARGET_SEH && TARGET_CALL_MS2SYSV_XLOGUES)
      sorry ("%<-mcall-ms2sysv-xlogues%> isn%'t currently supported with SEH");
  
diff -Nrcpad gcc-16-20250713/gcc/config/i386/i386.cc gcc-16-20250720/gcc/config/i386/i386.cc
*** gcc-16-20250713/gcc/config/i386/i386.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/i386/i386.cc	Sun Jul 20 22:32:09 2025
*************** symbolic_reference_mentioned_p (rtx op)
*** 5979,5985 ****
    const char *fmt;
    int i;
  
!   if (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == LABEL_REF)
      return true;
  
    fmt = GET_RTX_FORMAT (GET_CODE (op));
--- 5979,5985 ----
    const char *fmt;
    int i;
  
!   if (SYMBOL_REF_P (op) || LABEL_REF_P (op))
      return true;
  
    fmt = GET_RTX_FORMAT (GET_CODE (op));
*************** split_stack_prologue_scratch_regno (void
*** 10724,10731 ****
  
  static GTY(()) rtx split_stack_fn;
  
! /* A SYMBOL_REF for the more stack function when using the large
!    model.  */
  
  static GTY(()) rtx split_stack_fn_large;
  
--- 10724,10730 ----
  
  static GTY(()) rtx split_stack_fn;
  
! /* A SYMBOL_REF for the more stack function when using the large model.  */
  
  static GTY(()) rtx split_stack_fn_large;
  
*************** ix86_force_load_from_GOT_p (rtx x, bool
*** 11413,11419 ****
  	  && (!flag_pic || this_is_asm_operands)
  	  && ix86_cmodel != CM_LARGE
  	  && ix86_cmodel != CM_LARGE_PIC
! 	  && GET_CODE (x) == SYMBOL_REF
  	  && ((!call_p
  	       && (!ix86_direct_extern_access
  		   || (SYMBOL_REF_DECL (x)
--- 11412,11418 ----
  	  && (!flag_pic || this_is_asm_operands)
  	  && ix86_cmodel != CM_LARGE
  	  && ix86_cmodel != CM_LARGE_PIC
! 	  && SYMBOL_REF_P (x)
  	  && ((!call_p
  	       && (!ix86_direct_extern_access
  		   || (SYMBOL_REF_DECL (x)
*************** ix86_legitimate_constant_p (machine_mode
*** 11459,11481 ****
  	  case UNSPEC_TPOFF:
  	  case UNSPEC_NTPOFF:
  	    x = XVECEXP (x, 0, 0);
! 	    return (GET_CODE (x) == SYMBOL_REF
  		    && SYMBOL_REF_TLS_MODEL (x) == TLS_MODEL_LOCAL_EXEC);
  	  case UNSPEC_DTPOFF:
  	    x = XVECEXP (x, 0, 0);
! 	    return (GET_CODE (x) == SYMBOL_REF
  		    && SYMBOL_REF_TLS_MODEL (x) == TLS_MODEL_LOCAL_DYNAMIC);
  	  case UNSPEC_SECREL32:
  	    x = XVECEXP (x, 0, 0);
! 	    return GET_CODE (x) == SYMBOL_REF;
  	  default:
  	    return false;
  	  }
  
        /* We must have drilled down to a symbol.  */
!       if (GET_CODE (x) == LABEL_REF)
  	return true;
!       if (GET_CODE (x) != SYMBOL_REF)
  	return false;
        /* FALLTHRU */
  
--- 11458,11480 ----
  	  case UNSPEC_TPOFF:
  	  case UNSPEC_NTPOFF:
  	    x = XVECEXP (x, 0, 0);
! 	    return (SYMBOL_REF_P (x)
  		    && SYMBOL_REF_TLS_MODEL (x) == TLS_MODEL_LOCAL_EXEC);
  	  case UNSPEC_DTPOFF:
  	    x = XVECEXP (x, 0, 0);
! 	    return (SYMBOL_REF_P (x)
  		    && SYMBOL_REF_TLS_MODEL (x) == TLS_MODEL_LOCAL_DYNAMIC);
  	  case UNSPEC_SECREL32:
  	    x = XVECEXP (x, 0, 0);
! 	    return SYMBOL_REF_P (x);
  	  default:
  	    return false;
  	  }
  
        /* We must have drilled down to a symbol.  */
!       if (LABEL_REF_P (x))
  	return true;
!       if (!SYMBOL_REF_P (x))
  	return false;
        /* FALLTHRU */
  
*************** legitimate_pic_operand_p (rtx x)
*** 11602,11612 ****
  	    return TARGET_64BIT;
  	  case UNSPEC_TPOFF:
  	    x = XVECEXP (inner, 0, 0);
! 	    return (GET_CODE (x) == SYMBOL_REF
  		    && SYMBOL_REF_TLS_MODEL (x) == TLS_MODEL_LOCAL_EXEC);
  	  case UNSPEC_SECREL32:
  	    x = XVECEXP (inner, 0, 0);
! 	    return GET_CODE (x) == SYMBOL_REF;
  	  case UNSPEC_MACHOPIC_OFFSET:
  	    return legitimate_pic_address_disp_p (x);
  	  default:
--- 11601,11611 ----
  	    return TARGET_64BIT;
  	  case UNSPEC_TPOFF:
  	    x = XVECEXP (inner, 0, 0);
! 	    return (SYMBOL_REF_P (x)
  		    && SYMBOL_REF_TLS_MODEL (x) == TLS_MODEL_LOCAL_EXEC);
  	  case UNSPEC_SECREL32:
  	    x = XVECEXP (inner, 0, 0);
! 	    return SYMBOL_REF_P (x);
  	  case UNSPEC_MACHOPIC_OFFSET:
  	    return legitimate_pic_address_disp_p (x);
  	  default:
*************** legitimate_pic_address_disp_p (rtx disp)
*** 11657,11663 ****
  	  if (INTVAL (op1) >= 16*1024*1024
  	      || INTVAL (op1) < -16*1024*1024)
  	    break;
! 	  if (GET_CODE (op0) == LABEL_REF)
  	    return true;
  	  if (GET_CODE (op0) == CONST
  	      && GET_CODE (XEXP (op0, 0)) == UNSPEC
--- 11656,11662 ----
  	  if (INTVAL (op1) >= 16*1024*1024
  	      || INTVAL (op1) < -16*1024*1024)
  	    break;
! 	  if (LABEL_REF_P (op0))
  	    return true;
  	  if (GET_CODE (op0) == CONST
  	      && GET_CODE (XEXP (op0, 0)) == UNSPEC
*************** legitimate_pic_address_disp_p (rtx disp)
*** 11666,11672 ****
  	  if (GET_CODE (op0) == UNSPEC
  	      && XINT (op0, 1) == UNSPEC_PCREL)
  	    return true;
! 	  if (GET_CODE (op0) != SYMBOL_REF)
  	    break;
  	  /* FALLTHRU */
  
--- 11665,11671 ----
  	  if (GET_CODE (op0) == UNSPEC
  	      && XINT (op0, 1) == UNSPEC_PCREL)
  	    return true;
! 	  if (!SYMBOL_REF_P (op0))
  	    break;
  	  /* FALLTHRU */
  
*************** legitimate_pic_address_disp_p (rtx disp)
*** 11731,11738 ****
  	      && XINT (disp, 1) != UNSPEC_PLTOFF))
  	return false;
  
!       if (GET_CODE (XVECEXP (disp, 0, 0)) != SYMBOL_REF
! 	  && GET_CODE (XVECEXP (disp, 0, 0)) != LABEL_REF)
  	return false;
        return true;
      }
--- 11730,11737 ----
  	      && XINT (disp, 1) != UNSPEC_PLTOFF))
  	return false;
  
!       if (!SYMBOL_REF_P (XVECEXP (disp, 0, 0))
! 	  && !LABEL_REF_P (XVECEXP (disp, 0, 0)))
  	return false;
        return true;
      }
*************** legitimate_pic_address_disp_p (rtx disp)
*** 11760,11773 ****
        /* We need to check for both symbols and labels because VxWorks loads
  	 text labels with @GOT rather than @GOTOFF.  See gotoff_operand for
  	 details.  */
!       return (GET_CODE (XVECEXP (disp, 0, 0)) == SYMBOL_REF
! 	      || GET_CODE (XVECEXP (disp, 0, 0)) == LABEL_REF);
      case UNSPEC_GOTOFF:
        /* Refuse GOTOFF in 64bit mode since it is always 64bit when used.
  	 While ABI specify also 32bit relocation but we don't produce it in
  	 small PIC model at all.  */
!       if ((GET_CODE (XVECEXP (disp, 0, 0)) == SYMBOL_REF
! 	   || GET_CODE (XVECEXP (disp, 0, 0)) == LABEL_REF)
  	  && !TARGET_64BIT)
          return !TARGET_PECOFF && gotoff_operand (XVECEXP (disp, 0, 0), Pmode);
        return false;
--- 11759,11772 ----
        /* We need to check for both symbols and labels because VxWorks loads
  	 text labels with @GOT rather than @GOTOFF.  See gotoff_operand for
  	 details.  */
!       return (SYMBOL_REF_P (XVECEXP (disp, 0, 0))
! 	      || LABEL_REF_P (XVECEXP (disp, 0, 0)));
      case UNSPEC_GOTOFF:
        /* Refuse GOTOFF in 64bit mode since it is always 64bit when used.
  	 While ABI specify also 32bit relocation but we don't produce it in
  	 small PIC model at all.  */
!       if ((SYMBOL_REF_P (XVECEXP (disp, 0, 0))
! 	   || LABEL_REF_P (XVECEXP (disp, 0, 0)))
  	  && !TARGET_64BIT)
          return !TARGET_PECOFF && gotoff_operand (XVECEXP (disp, 0, 0), Pmode);
        return false;
*************** legitimate_pic_address_disp_p (rtx disp)
*** 11777,11795 ****
        if (saw_plus)
  	return false;
        disp = XVECEXP (disp, 0, 0);
!       return (GET_CODE (disp) == SYMBOL_REF
  	      && SYMBOL_REF_TLS_MODEL (disp) == TLS_MODEL_INITIAL_EXEC);
      case UNSPEC_NTPOFF:
        disp = XVECEXP (disp, 0, 0);
!       return (GET_CODE (disp) == SYMBOL_REF
  	      && SYMBOL_REF_TLS_MODEL (disp) == TLS_MODEL_LOCAL_EXEC);
      case UNSPEC_DTPOFF:
        disp = XVECEXP (disp, 0, 0);
!       return (GET_CODE (disp) == SYMBOL_REF
  	      && SYMBOL_REF_TLS_MODEL (disp) == TLS_MODEL_LOCAL_DYNAMIC);
      case UNSPEC_SECREL32:
        disp = XVECEXP (disp, 0, 0);
!       return GET_CODE (disp) == SYMBOL_REF;
      }
  
    return false;
--- 11776,11794 ----
        if (saw_plus)
  	return false;
        disp = XVECEXP (disp, 0, 0);
!       return (SYMBOL_REF_P (disp)
  	      && SYMBOL_REF_TLS_MODEL (disp) == TLS_MODEL_INITIAL_EXEC);
      case UNSPEC_NTPOFF:
        disp = XVECEXP (disp, 0, 0);
!       return (SYMBOL_REF_P (disp)
  	      && SYMBOL_REF_TLS_MODEL (disp) == TLS_MODEL_LOCAL_EXEC);
      case UNSPEC_DTPOFF:
        disp = XVECEXP (disp, 0, 0);
!       return (SYMBOL_REF_P (disp)
  	      && SYMBOL_REF_TLS_MODEL (disp) == TLS_MODEL_LOCAL_DYNAMIC);
      case UNSPEC_SECREL32:
        disp = XVECEXP (disp, 0, 0);
!       return SYMBOL_REF_P (disp);
      }
  
    return false;
*************** ix86_legitimate_address_p (machine_mode,
*** 12131,12141 ****
  	     that never results in lea, this seems to be easier and
  	     correct fix for crash to disable this test.  */
  	}
!       else if (GET_CODE (disp) != LABEL_REF
  	       && !CONST_INT_P (disp)
  	       && (GET_CODE (disp) != CONST
  		   || !ix86_legitimate_constant_p (Pmode, disp))
! 	       && (GET_CODE (disp) != SYMBOL_REF
  		   || !ix86_legitimate_constant_p (Pmode, disp)))
  	/* Displacement is not constant.  */
  	return false;
--- 12130,12140 ----
  	     that never results in lea, this seems to be easier and
  	     correct fix for crash to disable this test.  */
  	}
!       else if (!LABEL_REF_P (disp)
  	       && !CONST_INT_P (disp)
  	       && (GET_CODE (disp) != CONST
  		   || !ix86_legitimate_constant_p (Pmode, disp))
! 	       && (!SYMBOL_REF_P (disp)
  		   || !ix86_legitimate_constant_p (Pmode, disp)))
  	/* Displacement is not constant.  */
  	return false;
*************** legitimize_pic_address (rtx orig, rtx re
*** 12242,12251 ****
        else
  	new_rtx = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, new_rtx);
      }
!   else if ((GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (addr) == 0)
  	   /* We can't always use @GOTOFF for text labels
  	      on VxWorks, see gotoff_operand.  */
! 	   || (TARGET_VXWORKS_VAROFF && GET_CODE (addr) == LABEL_REF))
      {
  #if TARGET_PECOFF
        rtx tmp = legitimize_pe_coff_symbol (addr, true);
--- 12241,12250 ----
        else
  	new_rtx = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, new_rtx);
      }
!   else if ((SYMBOL_REF_P (addr) && SYMBOL_REF_TLS_MODEL (addr) == 0)
  	   /* We can't always use @GOTOFF for text labels
  	      on VxWorks, see gotoff_operand.  */
! 	   || (TARGET_VXWORKS_VAROFF && LABEL_REF_P (addr)))
      {
  #if TARGET_PECOFF
        rtx tmp = legitimize_pe_coff_symbol (addr, true);
*************** legitimize_pic_address (rtx orig, rtx re
*** 12380,12387 ****
  		  /* For %rip addressing, we have to use
  		     just disp32, not base nor index.  */
  		  if (TARGET_64BIT
! 		      && (GET_CODE (base) == SYMBOL_REF
! 			  || GET_CODE (base) == LABEL_REF))
  		    base = force_reg (mode, base);
  		  if (GET_CODE (new_rtx) == PLUS
  		      && CONSTANT_P (XEXP (new_rtx, 1)))
--- 12379,12386 ----
  		  /* For %rip addressing, we have to use
  		     just disp32, not base nor index.  */
  		  if (TARGET_64BIT
! 		      && (SYMBOL_REF_P (base)
! 			  || LABEL_REF_P (base)))
  		    base = force_reg (mode, base);
  		  if (GET_CODE (new_rtx) == PLUS
  		      && CONSTANT_P (XEXP (new_rtx, 1)))
*************** ix86_legitimize_address (rtx x, rtx, mac
*** 12883,12894 ****
    bool changed = false;
    unsigned log;
  
!   log = GET_CODE (x) == SYMBOL_REF ? SYMBOL_REF_TLS_MODEL (x) : 0;
    if (log)
      return legitimize_tls_address (x, (enum tls_model) log, false);
    if (GET_CODE (x) == CONST
        && GET_CODE (XEXP (x, 0)) == PLUS
!       && GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF
        && (log = SYMBOL_REF_TLS_MODEL (XEXP (XEXP (x, 0), 0))))
      {
        rtx t = legitimize_tls_address (XEXP (XEXP (x, 0), 0),
--- 12882,12893 ----
    bool changed = false;
    unsigned log;
  
!   log = SYMBOL_REF_P (x) ? SYMBOL_REF_TLS_MODEL (x) : 0;
    if (log)
      return legitimize_tls_address (x, (enum tls_model) log, false);
    if (GET_CODE (x) == CONST
        && GET_CODE (XEXP (x, 0)) == PLUS
!       && SYMBOL_REF_P (XEXP (XEXP (x, 0), 0))
        && (log = SYMBOL_REF_TLS_MODEL (XEXP (XEXP (x, 0), 0))))
      {
        rtx t = legitimize_tls_address (XEXP (XEXP (x, 0), 0),
*************** ix86_delegitimize_tls_address (rtx orig_
*** 13305,13311 ****
    if (GET_CODE (unspec) != UNSPEC || XINT (unspec, 1) != UNSPEC_NTPOFF)
      return orig_x;
    x = XVECEXP (unspec, 0, 0);
!   gcc_assert (GET_CODE (x) == SYMBOL_REF);
    if (unspec != XEXP (addr.disp, 0))
      x = gen_rtx_PLUS (Pmode, x, XEXP (XEXP (addr.disp, 0), 1));
    if (addr.index)
--- 13304,13310 ----
    if (GET_CODE (unspec) != UNSPEC || XINT (unspec, 1) != UNSPEC_NTPOFF)
      return orig_x;
    x = XVECEXP (unspec, 0, 0);
!   gcc_assert (SYMBOL_REF_P (x));
    if (unspec != XEXP (addr.disp, 0))
      x = gen_rtx_PLUS (Pmode, x, XEXP (XEXP (addr.disp, 0), 1));
    if (addr.index)
*************** ix86_print_operand (FILE *file, rtx x, i
*** 14669,14675 ****
        /* We have patterns that allow zero sets of memory, for instance.
  	 In 64-bit mode, we should probably support all 8-byte vectors,
  	 since we can in fact encode that into an immediate.  */
!       if (GET_CODE (x) == CONST_VECTOR)
  	{
  	  if (x != CONST0_RTX (GET_MODE (x)))
  	    output_operand_lossage ("invalid vector immediate");
--- 14668,14674 ----
        /* We have patterns that allow zero sets of memory, for instance.
  	 In 64-bit mode, we should probably support all 8-byte vectors,
  	 since we can in fact encode that into an immediate.  */
!       if (CONST_VECTOR_P (x))
  	{
  	  if (x != CONST0_RTX (GET_MODE (x)))
  	    output_operand_lossage ("invalid vector immediate");
*************** ix86_print_operand (FILE *file, rtx x, i
*** 14699,14706 ****
  	      if (ASSEMBLER_DIALECT == ASM_ATT)
  		putc ('$', file);
  	    }
! 	  else if (GET_CODE (x) == CONST || GET_CODE (x) == SYMBOL_REF
! 		   || GET_CODE (x) == LABEL_REF)
  	    {
  	      if (ASSEMBLER_DIALECT == ASM_ATT)
  		putc ('$', file);
--- 14698,14705 ----
  	      if (ASSEMBLER_DIALECT == ASM_ATT)
  		putc ('$', file);
  	    }
! 	  else if (GET_CODE (x) == CONST || SYMBOL_REF_P (x)
! 		   || LABEL_REF_P (x))
  	    {
  	      if (ASSEMBLER_DIALECT == ASM_ATT)
  		putc ('$', file);
*************** ix86_print_operand_address_as (FILE *fil
*** 14795,14802 ****
  	  && CONST_INT_P (XEXP (XEXP (disp, 0), 1)))
  	symbol = XEXP (XEXP (disp, 0), 0);
  
!       if (GET_CODE (symbol) == LABEL_REF
! 	  || (GET_CODE (symbol) == SYMBOL_REF
  	      && SYMBOL_REF_TLS_MODEL (symbol) == 0))
  	base = pc_rtx;
      }
--- 14794,14801 ----
  	  && CONST_INT_P (XEXP (XEXP (disp, 0), 1)))
  	symbol = XEXP (XEXP (disp, 0), 0);
  
!       if (LABEL_REF_P (symbol)
! 	  || (SYMBOL_REF_P (symbol)
  	      && SYMBOL_REF_TLS_MODEL (symbol) == 0))
  	base = pc_rtx;
      }
*************** ix86_print_operand_address_as (FILE *fil
*** 14884,14890 ****
  	    {
  	      if (flag_pic)
  		output_pic_addr_const (file, disp, 0);
! 	      else if (GET_CODE (disp) == LABEL_REF)
  		output_asm_label (disp);
  	      else
  		output_addr_const (file, disp);
--- 14883,14889 ----
  	    {
  	      if (flag_pic)
  		output_pic_addr_const (file, disp, 0);
! 	      else if (LABEL_REF_P (disp))
  		output_asm_label (disp);
  	      else
  		output_addr_const (file, disp);
*************** ix86_print_operand_address_as (FILE *fil
*** 14920,14926 ****
  
  	      if (flag_pic)
  		output_pic_addr_const (file, disp, 0);
! 	      else if (GET_CODE (disp) == LABEL_REF)
  		output_asm_label (disp);
  	      else if (CONST_INT_P (disp))
  		offset = disp;
--- 14919,14925 ----
  
  	      if (flag_pic)
  		output_pic_addr_const (file, disp, 0);
! 	      else if (LABEL_REF_P (disp))
  		output_asm_label (disp);
  	      else if (CONST_INT_P (disp))
  		offset = disp;
*************** ix86_convert_const_vector_to_integer (rt
*** 16704,16709 ****
--- 16703,16712 ----
  	  val = wi::insert (val, wv, innermode_bits * i, innermode_bits);
  	}
        break;
+     case E_V1SImode:
+     case E_V1DImode:
+       op = CONST_VECTOR_ELT (op, 0);
+       return INTVAL (op);
      case E_V2HFmode:
      case E_V2BFmode:
      case E_V4HFmode:
*************** ix86_rip_relative_addr_p (struct ix86_ad
*** 17679,17686 ****
  	      && CONST_INT_P (XEXP (symbol, 1)))
  	    symbol = XEXP (symbol, 0);
  
! 	  if (GET_CODE (symbol) == LABEL_REF
! 	      || (GET_CODE (symbol) == SYMBOL_REF
  		  && SYMBOL_REF_TLS_MODEL (symbol) == 0)
  	      || (GET_CODE (symbol) == UNSPEC
  		  && (XINT (symbol, 1) == UNSPEC_GOTPCREL
--- 17682,17689 ----
  	      && CONST_INT_P (XEXP (symbol, 1)))
  	    symbol = XEXP (symbol, 0);
  
! 	  if (LABEL_REF_P (symbol)
! 	      || (SYMBOL_REF_P (symbol)
  		  && SYMBOL_REF_TLS_MODEL (symbol) == 0)
  	      || (GET_CODE (symbol) == UNSPEC
  		  && (XINT (symbol, 1) == UNSPEC_GOTPCREL
*************** ix86_rtx_costs (rtx x, machine_mode mode
*** 23087,23093 ****
  	  /* Make (subreg:V4SI (not:V16QI (reg:V16QI ..)) 0)
  	     cost the same as register.
  	     This is used by avx_cmp<mode>3_ltint_not.  */
! 	  if (GET_CODE (unsop0) == SUBREG)
  	    unsop0 = XEXP (unsop0, 0);
  	  if (GET_CODE (unsop0) == NOT)
  	    unsop0 = XEXP (unsop0, 0);
--- 23090,23096 ----
  	  /* Make (subreg:V4SI (not:V16QI (reg:V16QI ..)) 0)
  	     cost the same as register.
  	     This is used by avx_cmp<mode>3_ltint_not.  */
! 	  if (SUBREG_P (unsop0))
  	    unsop0 = XEXP (unsop0, 0);
  	  if (GET_CODE (unsop0) == NOT)
  	    unsop0 = XEXP (unsop0, 0);
*************** ix86_reloc_rw_mask (void)
*** 26798,26804 ****
  static bool
  symbolic_base_address_p (rtx addr)
  {
!   if (GET_CODE (addr) == SYMBOL_REF)
      return true;
  
    if (GET_CODE (addr) == UNSPEC && XINT (addr, 1) == UNSPEC_GOTOFF)
--- 26801,26807 ----
  static bool
  symbolic_base_address_p (rtx addr)
  {
!   if (SYMBOL_REF_P (addr))
      return true;
  
    if (GET_CODE (addr) == UNSPEC && XINT (addr, 1) == UNSPEC_GOTOFF)
diff -Nrcpad gcc-16-20250713/gcc/config/i386/i386.h gcc-16-20250720/gcc/config/i386/i386.h
*** gcc-16-20250713/gcc/config/i386/i386.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/i386/i386.h	Sun Jul 20 22:32:09 2025
*************** typedef struct ix86_args {
*** 1842,1849 ****
  #define STRIP_UNARY(X) (UNARY_P (X) ? XEXP (X, 0) : X)
  
  #define SYMBOLIC_CONST(X)	\
!   (GET_CODE (X) == SYMBOL_REF						\
!    || GET_CODE (X) == LABEL_REF						\
     || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X)))
  
  /* Max number of args passed in registers.  If this is more than 3, we will
--- 1842,1849 ----
  #define STRIP_UNARY(X) (UNARY_P (X) ? XEXP (X, 0) : X)
  
  #define SYMBOLIC_CONST(X)	\
!   (SYMBOL_REF_P (X)							\
!    || LABEL_REF_P (X)							\
     || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X)))
  
  /* Max number of args passed in registers.  If this is more than 3, we will
*************** constexpr wide_int_bitmask PTA_ARROWLAKE
*** 2465,2474 ****
    | PTA_AVXVNNIINT8 | PTA_AVXNECONVERT | PTA_CMPCCXADD | PTA_UINTR;
  constexpr wide_int_bitmask PTA_ARROWLAKE_S = PTA_ARROWLAKE | PTA_AVXVNNIINT16
    | PTA_SHA512 | PTA_SM3 | PTA_SM4;
! constexpr wide_int_bitmask PTA_CLEARWATERFOREST = PTA_SIERRAFOREST
!   | PTA_AVXVNNIINT16 | PTA_SHA512 | PTA_SM3 | PTA_SM4 | PTA_USER_MSR
!   | PTA_PREFETCHI;
! constexpr wide_int_bitmask PTA_PANTHERLAKE = PTA_ARROWLAKE_S | PTA_PREFETCHI;
  constexpr wide_int_bitmask PTA_DIAMONDRAPIDS = PTA_GRANITERAPIDS_D
    | PTA_AVXIFMA | PTA_AVXNECONVERT | PTA_AVXVNNIINT16 | PTA_AVXVNNIINT8
    | PTA_CMPCCXADD | PTA_SHA512 | PTA_SM3 | PTA_SM4 | PTA_AVX10_2
--- 2465,2475 ----
    | PTA_AVXVNNIINT8 | PTA_AVXNECONVERT | PTA_CMPCCXADD | PTA_UINTR;
  constexpr wide_int_bitmask PTA_ARROWLAKE_S = PTA_ARROWLAKE | PTA_AVXVNNIINT16
    | PTA_SHA512 | PTA_SM3 | PTA_SM4;
! constexpr wide_int_bitmask PTA_CLEARWATERFOREST =
!   (PTA_SIERRAFOREST & (~(PTA_KL | PTA_WIDEKL))) | PTA_AVXVNNIINT16 | PTA_SHA512
!   | PTA_SM3 | PTA_SM4 | PTA_USER_MSR | PTA_PREFETCHI;
! constexpr wide_int_bitmask PTA_PANTHERLAKE =
!   (PTA_ARROWLAKE_S & (~(PTA_KL | PTA_WIDEKL))) | PTA_PREFETCHI;
  constexpr wide_int_bitmask PTA_DIAMONDRAPIDS = PTA_GRANITERAPIDS_D
    | PTA_AVXIFMA | PTA_AVXNECONVERT | PTA_AVXVNNIINT16 | PTA_AVXVNNIINT8
    | PTA_CMPCCXADD | PTA_SHA512 | PTA_SM3 | PTA_SM4 | PTA_AVX10_2
diff -Nrcpad gcc-16-20250713/gcc/config/i386/i386.md gcc-16-20250720/gcc/config/i386/i386.md
*** gcc-16-20250713/gcc/config/i386/i386.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/i386/i386.md	Sun Jul 20 22:32:09 2025
***************
*** 12810,12817 ****
  		   (zero_extend:DI (and:SI (match_dup 1) (match_dup 2))))
  	      (clobber (reg:CC FLAGS_REG))])]
  {
!   if (GET_CODE (operands[2]) == SYMBOL_REF
!       || GET_CODE (operands[2]) == LABEL_REF)
      {
        operands[2] = shallow_copy_rtx (operands[2]);
        PUT_MODE (operands[2], SImode);
--- 12810,12817 ----
  		   (zero_extend:DI (and:SI (match_dup 1) (match_dup 2))))
  	      (clobber (reg:CC FLAGS_REG))])]
  {
!   if (SYMBOL_REF_P (operands[2])
!       || LABEL_REF_P (operands[2]))
      {
        operands[2] = shallow_copy_rtx (operands[2]);
        PUT_MODE (operands[2], SImode);
diff -Nrcpad gcc-16-20250713/gcc/config/i386/mmx.md gcc-16-20250720/gcc/config/i386/mmx.md
*** gcc-16-20250713/gcc/config/i386/mmx.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/i386/mmx.md	Sun Jul 20 22:32:09 2025
***************
*** 81,92 ****
  ;; 4-byte and 2-byte QImode vector modes
  (define_mode_iterator VI1_16_32 [V4QI V2QI])
  
! ;; All 2-byte, 4-byte and 8-byte vector modes with more than 1 element
  (define_mode_iterator V_16_32_64
!    [V2QI V4QI V2HI V2HF
      (V8QI "TARGET_64BIT") (V4HI "TARGET_64BIT")
      (V4HF "TARGET_64BIT") (V4BF "TARGET_64BIT")
!     (V2SI "TARGET_64BIT") (V2SF "TARGET_64BIT")])
  
  ;; V2S* modes
  (define_mode_iterator V2FI [V2SF V2SI])
--- 81,93 ----
  ;; 4-byte and 2-byte QImode vector modes
  (define_mode_iterator VI1_16_32 [V4QI V2QI])
  
! ;; All 2-byte, 4-byte and 8-byte vector modes.
  (define_mode_iterator V_16_32_64
!    [V2QI V4QI V2HI V1SI V2HF V2BF
      (V8QI "TARGET_64BIT") (V4HI "TARGET_64BIT")
      (V4HF "TARGET_64BIT") (V4BF "TARGET_64BIT")
!     (V2SI "TARGET_64BIT") (V2SF "TARGET_64BIT")
!     (V1DI "TARGET_64BIT")])
  
  ;; V2S* modes
  (define_mode_iterator V2FI [V2SF V2SI])
***************
*** 107,112 ****
--- 108,114 ----
    [(V8QI "DI") (V4QI "SI") (V2QI "HI")
     (V4HI "DI") (V2HI "SI")
     (V2SI "DI")
+    (V1DI "DI") (V1SI "SI")
     (V4HF "DI") (V2HF "SI")
     (V4BF "DI") (V2BF "SI")
     (V2SF "DI")])
***************
*** 407,428 ****
  	   ]
  	   (symbol_ref "true")))])
  
- ;; 16-bit, 32-bit and 64-bit constant vector stores.  After reload,
- ;; convert them to immediate integer stores.
- (define_insn_and_split "*mov<mode>_imm"
-   [(set (match_operand:V_16_32_64 0 "memory_operand" "=m")
- 	(match_operand:V_16_32_64 1 "x86_64_const_vector_operand" "i"))]
-   ""
-   "#"
-   "&& reload_completed"
-   [(set (match_dup 0) (match_dup 1))]
- {
-   HOST_WIDE_INT val = ix86_convert_const_vector_to_integer (operands[1],
- 							    <MODE>mode);
-   operands[1] = GEN_INT (val);
-   operands[0] = lowpart_subreg (<mmxinsnmode>mode, operands[0], <MODE>mode);
- })
- 
  ;; For TARGET_64BIT we always round up to 8 bytes.
  (define_insn "*push<mode>2_rex64"
    [(set (match_operand:V_32 0 "push_operand" "=X,X")
--- 409,414 ----
***************
*** 588,593 ****
--- 574,615 ----
  	   ]
  	   (symbol_ref "true")))])
  
+ (define_split
+   [(set (match_operand:V_16_32_64 0 "general_reg_operand")
+ 	(match_operand:V_16_32_64 1 "memory_operand"))]
+   "reload_completed
+    && SYMBOL_REF_P (XEXP (operands[1], 0))
+    && CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0))"
+   [(set (match_dup 0) (match_dup 1))]
+ {
+   rtx op1 = avoid_constant_pool_reference (operands[1]);
+ 
+   if (!CONST_VECTOR_P (op1))
+     FAIL;
+ 
+   HOST_WIDE_INT val = ix86_convert_const_vector_to_integer (op1, <MODE>mode);
+ 
+   operands[0] = lowpart_subreg (<mmxinsnmode>mode, operands[0], <MODE>mode);
+   operands[1] = GEN_INT (val);
+ })
+ 
+ ;; 16-bit, 32-bit and 64-bit constant vector stores.  After reload,
+ ;; convert them to immediate integer stores.
+ (define_insn_and_split "*mov<mode>_imm"
+   [(set (match_operand:V_16_32_64 0 "memory_operand" "=m")
+ 	(match_operand:V_16_32_64 1 "x86_64_const_vector_operand" "i"))]
+   ""
+   "#"
+   "&& reload_completed"
+   [(set (match_dup 0) (match_dup 1))]
+ {
+   rtx op1 = operands[1];
+   HOST_WIDE_INT val = ix86_convert_const_vector_to_integer (op1, <MODE>mode);
+ 
+   operands[0] = adjust_address (operands[0], <mmxinsnmode>mode, 0);
+   operands[1] = GEN_INT (val);
+ })
+ 
  ;; We always round up to UNITS_PER_WORD bytes.
  (define_insn "*pushv2qi2"
    [(set (match_operand:V2QI 0 "push_operand" "=X,X")
diff -Nrcpad gcc-16-20250713/gcc/config/i386/predicates.md gcc-16-20250720/gcc/config/i386/predicates.md
*** gcc-16-20250713/gcc/config/i386/predicates.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/i386/predicates.md	Sun Jul 20 22:32:09 2025
***************
*** 573,580 ****
  
      case CONST:
        op = XEXP (op, 0);
!       if (GET_CODE (op) == SYMBOL_REF
! 	  || GET_CODE (op) == LABEL_REF
  	  || (GET_CODE (op) == UNSPEC
  	      && (XINT (op, 1) == UNSPEC_GOT
  		  || XINT (op, 1) == UNSPEC_GOTOFF
--- 573,580 ----
  
      case CONST:
        op = XEXP (op, 0);
!       if (SYMBOL_REF_P (op)
! 	  || LABEL_REF_P (op)
  	  || (GET_CODE (op) == UNSPEC
  	      && (XINT (op, 1) == UNSPEC_GOT
  		  || XINT (op, 1) == UNSPEC_GOTOFF
***************
*** 586,593 ****
  	return false;
  
        op = XEXP (op, 0);
!       if (GET_CODE (op) == SYMBOL_REF
! 	  || GET_CODE (op) == LABEL_REF)
  	return true;
        /* Only @GOTOFF gets offsets.  */
        if (GET_CODE (op) != UNSPEC
--- 586,593 ----
  	return false;
  
        op = XEXP (op, 0);
!       if (SYMBOL_REF_P (op)
! 	  || LABEL_REF_P (op))
  	return true;
        /* Only @GOTOFF gets offsets.  */
        if (GET_CODE (op) != UNSPEC
***************
*** 595,602 ****
  	return false;
  
        op = XVECEXP (op, 0, 0);
!       if (GET_CODE (op) == SYMBOL_REF
! 	  || GET_CODE (op) == LABEL_REF)
  	return true;
        return false;
  
--- 595,602 ----
  	return false;
  
        op = XVECEXP (op, 0, 0);
!       if (SYMBOL_REF_P (op)
! 	  || LABEL_REF_P (op))
  	return true;
        return false;
  
***************
*** 614,623 ****
        && CONST_INT_P (XEXP (XEXP (op, 0), 1)))
      op = XEXP (XEXP (op, 0), 0);
  
!   if (GET_CODE (op) == LABEL_REF)
      return true;
  
!   if (GET_CODE (op) != SYMBOL_REF)
      return false;
  
    if (SYMBOL_REF_TLS_MODEL (op))
--- 614,623 ----
        && CONST_INT_P (XEXP (XEXP (op, 0), 1)))
      op = XEXP (XEXP (op, 0), 0);
  
!   if (LABEL_REF_P (op))
      return true;
  
!   if (!SYMBOL_REF_P (op))
      return false;
  
    if (SYMBOL_REF_TLS_MODEL (op))
***************
*** 649,655 ****
        && CONST_INT_P (XEXP (XEXP (op, 0), 1)))
      op = XEXP (XEXP (op, 0), 0);
  
!   if (GET_CODE (op) == SYMBOL_REF
        && !SYMBOL_REF_FUNCTION_P (op))
      return false;
  
--- 649,655 ----
        && CONST_INT_P (XEXP (XEXP (op, 0), 1)))
      op = XEXP (XEXP (op, 0), 0);
  
!   if (SYMBOL_REF_P (op)
        && !SYMBOL_REF_FUNCTION_P (op))
      return false;
  
***************
*** 1145,1151 ****
    unsigned n_elts;
    op = avoid_constant_pool_reference (op);
  
!   if (GET_CODE (op) != CONST_VECTOR)
      return false;
  
    n_elts = CONST_VECTOR_NUNITS (op);
--- 1145,1151 ----
    unsigned n_elts;
    op = avoid_constant_pool_reference (op);
  
!   if (!CONST_VECTOR_P (op))
      return false;
  
    n_elts = CONST_VECTOR_NUNITS (op);
***************
*** 1173,1179 ****
    if (MEM_P (op))
      {
        op = get_pool_constant (XEXP (op, 0));
!       if (GET_CODE (op) != CONST_VECTOR)
  	return false;
  
        if (GET_MODE (op) != mode
--- 1173,1179 ----
    if (MEM_P (op))
      {
        op = get_pool_constant (XEXP (op, 0));
!       if (!CONST_VECTOR_P (op))
  	return false;
  
        if (GET_MODE (op) != mode
***************
*** 1422,1429 ****
  	}
        if (TARGET_64BIT
  	  && flag_pic
! 	  && (GET_CODE (disp) == SYMBOL_REF
! 	      || GET_CODE (disp) == LABEL_REF))
  	return false;
      }
  
--- 1422,1429 ----
  	}
        if (TARGET_64BIT
  	  && flag_pic
! 	  && (SYMBOL_REF_P (disp)
! 	      || LABEL_REF_P (disp)))
  	return false;
      }
  
diff -Nrcpad gcc-16-20250713/gcc/config/i386/sse.md gcc-16-20250720/gcc/config/i386/sse.md
*** gcc-16-20250713/gcc/config/i386/sse.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/i386/sse.md	Sun Jul 20 22:32:09 2025
***************
*** 12756,12762 ****
  	     lo insns have =m and 0C constraints.  */
  	  : (operands[2] != const0_rtx
  	     || (!rtx_equal_p (dest, operands[3])
! 		 && GET_CODE (operands[3]) != CONST_VECTOR))))
      dest = gen_reg_rtx (<ssehalfvecmode>mode);
    switch (INTVAL (operands[2]))
      {
--- 12756,12762 ----
  	     lo insns have =m and 0C constraints.  */
  	  : (operands[2] != const0_rtx
  	     || (!rtx_equal_p (dest, operands[3])
! 		 && !CONST_VECTOR_P (operands[3])))))
      dest = gen_reg_rtx (<ssehalfvecmode>mode);
    switch (INTVAL (operands[2]))
      {
diff -Nrcpad gcc-16-20250713/gcc/config/loongarch/lasx.md gcc-16-20250720/gcc/config/loongarch/lasx.md
*** gcc-16-20250713/gcc/config/loongarch/lasx.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/loongarch/lasx.md	Sun Jul 20 22:32:09 2025
***************
*** 2060,2068 ****
    [(set_attr "type" "simd_int_arith")
     (set_attr "mode" "<MODE>")])
  
! (define_insn "lasx_xvshuf_<lasxfmt_f>"
    [(set (match_operand:LASX_DWH 0 "register_operand" "=f")
! 	(unspec:LASX_DWH [(match_operand:LASX_DWH 1 "register_operand" "0")
  			  (match_operand:LASX_DWH 2 "register_operand" "f")
  			  (match_operand:LASX_DWH 3 "register_operand" "f")]
  			UNSPEC_LASX_XVSHUF))]
--- 2060,2068 ----
    [(set_attr "type" "simd_int_arith")
     (set_attr "mode" "<MODE>")])
  
! (define_insn "@lasx_xvshuf_<lasxfmt_f>"
    [(set (match_operand:LASX_DWH 0 "register_operand" "=f")
! 	(unspec:LASX_DWH [(match_operand:<VIMODE> 1 "register_operand" "0")
  			  (match_operand:LASX_DWH 2 "register_operand" "f")
  			  (match_operand:LASX_DWH 3 "register_operand" "f")]
  			UNSPEC_LASX_XVSHUF))]
diff -Nrcpad gcc-16-20250713/gcc/config/loongarch/loongarch.cc gcc-16-20250720/gcc/config/loongarch/loongarch.cc
*** gcc-16-20250713/gcc/config/loongarch/loongarch.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/loongarch/loongarch.cc	Sun Jul 20 22:32:09 2025
*************** static bool
*** 8380,8386 ****
  loongarch_try_expand_lsx_vshuf_const (struct expand_vec_perm_d *d)
  {
    int i;
!   rtx target, op0, op1, sel, tmp;
    rtx rperm[MAX_VECT_LEN];
  
    if (GET_MODE_SIZE (d->vmode) == 16)
--- 8380,8386 ----
  loongarch_try_expand_lsx_vshuf_const (struct expand_vec_perm_d *d)
  {
    int i;
!   rtx target, op0, op1;
    rtx rperm[MAX_VECT_LEN];
  
    if (GET_MODE_SIZE (d->vmode) == 16)
*************** loongarch_try_expand_lsx_vshuf_const (st
*** 8399,8445 ****
        for (i = 0; i < d->nelt; i += 1)
  	  rperm[i] = GEN_INT (d->perm[i]);
  
!       if (d->vmode == E_V2DFmode)
! 	{
! 	  sel = gen_rtx_CONST_VECTOR (E_V2DImode, gen_rtvec_v (d->nelt, rperm));
! 	  tmp = simplify_gen_subreg (E_V2DImode, d->target, d->vmode, 0);
! 	  emit_move_insn (tmp, sel);
! 	}
!       else if (d->vmode == E_V4SFmode)
! 	{
! 	  sel = gen_rtx_CONST_VECTOR (E_V4SImode, gen_rtvec_v (d->nelt, rperm));
! 	  tmp = simplify_gen_subreg (E_V4SImode, d->target, d->vmode, 0);
! 	  emit_move_insn (tmp, sel);
! 	}
!       else
! 	{
! 	  sel = gen_rtx_CONST_VECTOR (d->vmode, gen_rtvec_v (d->nelt, rperm));
! 	  emit_move_insn (d->target, sel);
! 	}
  
!       switch (d->vmode)
! 	{
! 	case E_V2DFmode:
! 	  emit_insn (gen_lsx_vshuf_d_f (target, target, op1, op0));
! 	  break;
! 	case E_V2DImode:
! 	  emit_insn (gen_lsx_vshuf_d (target, target, op1, op0));
! 	  break;
! 	case E_V4SFmode:
! 	  emit_insn (gen_lsx_vshuf_w_f (target, target, op1, op0));
! 	  break;
! 	case E_V4SImode:
! 	  emit_insn (gen_lsx_vshuf_w (target, target, op1, op0));
! 	  break;
! 	case E_V8HImode:
! 	  emit_insn (gen_lsx_vshuf_h (target, target, op1, op0));
! 	  break;
! 	case E_V16QImode:
! 	  emit_insn (gen_lsx_vshuf_b (target, op1, op0, target));
! 	  break;
! 	default:
! 	  break;
! 	}
  
        return true;
      }
--- 8399,8421 ----
        for (i = 0; i < d->nelt; i += 1)
  	  rperm[i] = GEN_INT (d->perm[i]);
  
!       machine_mode sel_mode = related_int_vector_mode (d->vmode)
! 	.require ();
!       rtvec sel_v = gen_rtvec_v (d->nelt, rperm);
  
!       /* Despite vshuf.* (except vshuf.b) needs sel == target, we cannot
! 	 load sel into target right now: here we are dealing with
! 	 pseudo regs, and target may be the same pseudo as one of op0
! 	 or op1.  Then we'd clobber the input.  Instead, we use a new
! 	 pseudo reg here.  The reload pass will look at the constraint
! 	 of vshuf.* and move sel into target first if needed.  */
!       rtx sel = force_reg (sel_mode,
! 			   gen_rtx_CONST_VECTOR (sel_mode, sel_v));
! 
!       if (d->vmode == E_V16QImode)
! 	emit_insn (gen_lsx_vshuf_b (target, op1, op0, sel));
!       else
! 	emit_insn (gen_lsx_vshuf (d->vmode, target, sel, op1, op0));
  
        return true;
      }
*************** loongarch_expand_vec_perm_const (struct
*** 9435,9441 ****
    bool flag = false;
    unsigned int i;
    unsigned char idx;
!   rtx target, op0, op1, sel, tmp;
    rtx rperm[MAX_VECT_LEN];
    unsigned int remapped[MAX_VECT_LEN];
    unsigned char perm2[MAX_VECT_LEN];
--- 9411,9417 ----
    bool flag = false;
    unsigned int i;
    unsigned char idx;
!   rtx target, op0, op1;
    rtx rperm[MAX_VECT_LEN];
    unsigned int remapped[MAX_VECT_LEN];
    unsigned char perm2[MAX_VECT_LEN];
*************** loongarch_expand_vec_perm_const (struct
*** 9615,9677 ****
  expand_perm_const_end:
        if (flag)
  	{
- 	  /* Copy selector vector from memory to vector register for later insn
- 	     gen function.
- 	     If vector's element in floating point value, we cannot fit
- 	     selector argument into insn gen function directly, because of the
- 	     insn template definition.  As a solution, generate a integral mode
- 	     subreg of target, then copy selector vector (that is in integral
- 	     mode) to this subreg.  */
- 	  switch (d->vmode)
- 	    {
- 	    case E_V4DFmode:
- 	      sel = gen_rtx_CONST_VECTOR (E_V4DImode, gen_rtvec_v (d->nelt,
- 								   rperm));
- 	      tmp = simplify_gen_subreg (E_V4DImode, d->target, d->vmode, 0);
- 	      emit_move_insn (tmp, sel);
- 	      break;
- 	    case E_V8SFmode:
- 	      sel = gen_rtx_CONST_VECTOR (E_V8SImode, gen_rtvec_v (d->nelt,
- 								   rperm));
- 	      tmp = simplify_gen_subreg (E_V8SImode, d->target, d->vmode, 0);
- 	      emit_move_insn (tmp, sel);
- 	      break;
- 	    default:
- 	      sel = gen_rtx_CONST_VECTOR (d->vmode, gen_rtvec_v (d->nelt,
- 								 rperm));
- 	      emit_move_insn (d->target, sel);
- 	      break;
- 	    }
- 
  	  target = d->target;
  	  op0 = d->op0;
  	  op1 = d->one_vector_p ? d->op0 : d->op1;
  
! 	  /* We FINALLY can generate xvshuf.* insn.  */
! 	  switch (d->vmode)
! 	    {
! 	    case E_V4DFmode:
! 	      emit_insn (gen_lasx_xvshuf_d_f (target, target, op1, op0));
! 	      break;
! 	    case E_V4DImode:
! 	      emit_insn (gen_lasx_xvshuf_d (target, target, op1, op0));
! 	      break;
! 	    case E_V8SFmode:
! 	      emit_insn (gen_lasx_xvshuf_w_f (target, target, op1, op0));
! 	      break;
! 	    case E_V8SImode:
! 	      emit_insn (gen_lasx_xvshuf_w (target, target, op1, op0));
! 	      break;
! 	    case E_V16HImode:
! 	      emit_insn (gen_lasx_xvshuf_h (target, target, op1, op0));
! 	      break;
! 	    case E_V32QImode:
! 	      emit_insn (gen_lasx_xvshuf_b (target, op1, op0, target));
! 	      break;
! 	    default:
! 	      gcc_unreachable ();
! 	      break;
! 	    }
  
  	  return true;
  	}
--- 9591,9613 ----
  expand_perm_const_end:
        if (flag)
  	{
  	  target = d->target;
  	  op0 = d->op0;
  	  op1 = d->one_vector_p ? d->op0 : d->op1;
  
! 	  machine_mode sel_mode = related_int_vector_mode (d->vmode)
! 	    .require ();
! 	  rtvec sel_v = gen_rtvec_v (d->nelt, rperm);
! 
! 	  /* See the comment in loongarch_expand_lsx_shuffle for why
! 	     we don't simply use a SUBREG to pun target.  */
! 	  rtx sel = force_reg (sel_mode,
! 			       gen_rtx_CONST_VECTOR (sel_mode, sel_v));
! 
! 	  if (d->vmode == E_V32QImode)
! 	    emit_insn (gen_lasx_xvshuf_b (target, op1, op0, sel));
! 	  else
! 	    emit_insn (gen_lasx_xvshuf (d->vmode, target, sel, op1, op0));
  
  	  return true;
  	}
diff -Nrcpad gcc-16-20250713/gcc/config/loongarch/lsx.md gcc-16-20250720/gcc/config/loongarch/lsx.md
*** gcc-16-20250713/gcc/config/loongarch/lsx.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/loongarch/lsx.md	Sun Jul 20 22:32:09 2025
***************
*** 535,543 ****
    DONE;
  })
  
! (define_insn "lsx_vshuf_<lsxfmt_f>"
    [(set (match_operand:LSX_DWH 0 "register_operand" "=f")
! 	(unspec:LSX_DWH [(match_operand:LSX_DWH 1 "register_operand" "0")
  			 (match_operand:LSX_DWH 2 "register_operand" "f")
  			 (match_operand:LSX_DWH 3 "register_operand" "f")]
  			UNSPEC_LSX_VSHUF))]
--- 535,543 ----
    DONE;
  })
  
! (define_insn "@lsx_vshuf_<lsxfmt_f>"
    [(set (match_operand:LSX_DWH 0 "register_operand" "=f")
! 	(unspec:LSX_DWH [(match_operand:<VIMODE> 1 "register_operand" "0")
  			 (match_operand:LSX_DWH 2 "register_operand" "f")
  			 (match_operand:LSX_DWH 3 "register_operand" "f")]
  			UNSPEC_LSX_VSHUF))]
diff -Nrcpad gcc-16-20250713/gcc/config/pru/pru-pragma.cc gcc-16-20250720/gcc/config/pru/pru-pragma.cc
*** gcc-16-20250713/gcc/config/pru/pru-pragma.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/pru/pru-pragma.cc	Sun Jul 20 22:32:09 2025
*************** pru_pragma_ctable_entry (cpp_reader *)
*** 46,66 ****
    enum cpp_ttype type;
  
    type = pragma_lex (&ctable_index);
!   if (type == CPP_NUMBER && tree_fits_uhwi_p (ctable_index))
      {
        type = pragma_lex (&base_addr);
!       if (type == CPP_NUMBER  && tree_fits_uhwi_p (base_addr))
  	{
! 	  unsigned HOST_WIDE_INT i = tree_to_uhwi (ctable_index);
! 	  unsigned HOST_WIDE_INT base = tree_to_uhwi (base_addr);
  
  	  type = pragma_lex (&base_addr);
  	  if (type != CPP_EOF)
  	    error ("junk at end of %<#pragma CTABLE_ENTRY%>");
! 	  else if (i >= ARRAY_SIZE (pru_ctable))
  	    error ("%<CTABLE_ENTRY%> index %wd is not valid", i);
  	  else if (pru_ctable[i].valid && pru_ctable[i].base != base)
  	    error ("redefinition of %<CTABLE_ENTRY %wd%>", i);
  	  else
  	    {
  	      if (base & 0xff)
--- 46,69 ----
    enum cpp_ttype type;
  
    type = pragma_lex (&ctable_index);
!   if (type == CPP_NUMBER && tree_fits_shwi_p (ctable_index))
      {
        type = pragma_lex (&base_addr);
!       if (type == CPP_NUMBER && tree_fits_shwi_p (base_addr))
  	{
! 	  HOST_WIDE_INT i = tree_to_shwi (ctable_index);
! 	  HOST_WIDE_INT base = sext_hwi (tree_to_shwi (base_addr),
! 					 POINTER_SIZE);
  
  	  type = pragma_lex (&base_addr);
  	  if (type != CPP_EOF)
  	    error ("junk at end of %<#pragma CTABLE_ENTRY%>");
! 	  else if (!IN_RANGE (i, 0, ARRAY_SIZE (pru_ctable) - 1))
  	    error ("%<CTABLE_ENTRY%> index %wd is not valid", i);
  	  else if (pru_ctable[i].valid && pru_ctable[i].base != base)
  	    error ("redefinition of %<CTABLE_ENTRY %wd%>", i);
+ 	  else if (!IN_RANGE (base, INT32_MIN, INT32_MAX))
+ 	    error ("%<CTABLE_ENTRY%> base address does not fit in 32-bits");
  	  else
  	    {
  	      if (base & 0xff)
diff -Nrcpad gcc-16-20250713/gcc/config/pru/pru-protos.h gcc-16-20250720/gcc/config/pru/pru-protos.h
*** gcc-16-20250713/gcc/config/pru/pru-protos.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/pru/pru-protos.h	Sun Jul 20 22:32:09 2025
***************
*** 23,29 ****
  
  struct pru_ctable_entry {
      bool valid;
!     unsigned HOST_WIDE_INT base;
  };
  
  extern struct pru_ctable_entry pru_ctable[32];
--- 23,29 ----
  
  struct pru_ctable_entry {
      bool valid;
!     HOST_WIDE_INT base;
  };
  
  extern struct pru_ctable_entry pru_ctable[32];
*************** pru_regno_ok_for_index_p (int regno, boo
*** 66,74 ****
    return pru_regno_ok_for_base_p (regno, strict_p);
  }
  
! extern int pru_get_ctable_exact_base_index (unsigned HOST_WIDE_INT caddr);
! extern int pru_get_ctable_base_index (unsigned HOST_WIDE_INT caddr);
! extern int pru_get_ctable_base_offset (unsigned HOST_WIDE_INT caddr);
  
  extern int pru_symref2ioregno (rtx op);
  
--- 66,74 ----
    return pru_regno_ok_for_base_p (regno, strict_p);
  }
  
! extern int pru_get_ctable_exact_base_index (HOST_WIDE_INT caddr);
! extern int pru_get_ctable_base_index (HOST_WIDE_INT caddr);
! extern int pru_get_ctable_base_offset (HOST_WIDE_INT caddr);
  
  extern int pru_symref2ioregno (rtx op);
  
diff -Nrcpad gcc-16-20250713/gcc/config/pru/pru.cc gcc-16-20250720/gcc/config/pru/pru.cc
*** gcc-16-20250713/gcc/config/pru/pru.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/pru/pru.cc	Sun Jul 20 22:32:09 2025
*************** pru_valid_const_ubyte_offset (machine_mo
*** 1428,1434 ****
  /* Recognize a CTABLE base address.  Return CTABLE entry index, or -1 if
     base was not found in the pragma-filled pru_ctable.  */
  int
! pru_get_ctable_exact_base_index (unsigned HOST_WIDE_INT caddr)
  {
    unsigned int i;
  
--- 1428,1434 ----
  /* Recognize a CTABLE base address.  Return CTABLE entry index, or -1 if
     base was not found in the pragma-filled pru_ctable.  */
  int
! pru_get_ctable_exact_base_index (HOST_WIDE_INT caddr)
  {
    unsigned int i;
  
*************** pru_get_ctable_exact_base_index (unsigne
*** 1444,1450 ****
  /* Check if the given address can be addressed via CTABLE_BASE + UBYTE_OFFS,
     and return the base CTABLE index if possible.  */
  int
! pru_get_ctable_base_index (unsigned HOST_WIDE_INT caddr)
  {
    unsigned int i;
  
--- 1444,1450 ----
  /* Check if the given address can be addressed via CTABLE_BASE + UBYTE_OFFS,
     and return the base CTABLE index if possible.  */
  int
! pru_get_ctable_base_index (HOST_WIDE_INT caddr)
  {
    unsigned int i;
  
*************** pru_get_ctable_base_index (unsigned HOST
*** 1461,1467 ****
  
  /* Return the offset from some CTABLE base for this address.  */
  int
! pru_get_ctable_base_offset (unsigned HOST_WIDE_INT caddr)
  {
    int i;
  
--- 1461,1467 ----
  
  /* Return the offset from some CTABLE base for this address.  */
  int
! pru_get_ctable_base_offset (HOST_WIDE_INT caddr)
  {
    int i;
  
*************** pru_print_operand_address (FILE *file, m
*** 2004,2010 ****
  
      case CONST_INT:
        {
! 	unsigned HOST_WIDE_INT caddr = INTVAL (op);
  	int base = pru_get_ctable_base_index (caddr);
  	int offs = pru_get_ctable_base_offset (caddr);
  	if (base < 0)
--- 2004,2010 ----
  
      case CONST_INT:
        {
! 	HOST_WIDE_INT caddr = INTVAL (op);
  	int base = pru_get_ctable_base_index (caddr);
  	int offs = pru_get_ctable_base_offset (caddr);
  	if (base < 0)
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/autovec-opt.md gcc-16-20250720/gcc/config/riscv/autovec-opt.md
*** gcc-16-20250713/gcc/config/riscv/autovec-opt.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/riscv/autovec-opt.md	Sun Jul 20 22:32:09 2025
***************
*** 1725,1730 ****
--- 1725,1732 ----
  ;; - vfmsac.vf
  ;; - vfnmacc.vf
  ;; - vfnmsac.vf
+ ;; - vfwmacc.vf
+ ;; - vfwmsac.vf
  ;; =============================================================================
  
  ;; vfmadd.vf, vfmsub.vf, vfmacc.vf, vfmsac.vf
***************
*** 1796,1798 ****
--- 1798,1897 ----
    }
    [(set_attr "type" "vfmuladd")]
  )
+ 
+ ;; vfwmacc.vf, vfwmsac.vf
+ (define_insn_and_split "*vfwmacc_vf_<mode>"
+   [(set (match_operand:VWEXTF 0 "register_operand")
+     (plus_minus:VWEXTF
+ 	    (mult:VWEXTF
+ 	      (float_extend:VWEXTF
+ 	        (match_operand:<V_DOUBLE_TRUNC> 3 "register_operand"))
+ 	      (vec_duplicate:VWEXTF
+ 	        (float_extend:<VEL>
+ 		  (match_operand:<VSUBEL> 2 "register_operand"))))
+ 	    (match_operand:VWEXTF 1 "register_operand")))]
+   "TARGET_VECTOR && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(const_int 0)]
+   {
+     rtx ops[] = {operands[0], operands[1], operands[2], operands[3]};
+     riscv_vector::emit_vlmax_insn (code_for_pred_widen_mul_scalar (<CODE>, <MODE>mode),
+ 				   riscv_vector::WIDEN_TERNARY_OP_FRM_DYN, ops);
+     DONE;
+   }
+   [(set_attr "type" "vfwmuladd")]
+ )
+ 
+ ;; Intermediate pattern for vfwmacc.vf and vfwmsac.vf used by combine
+ (define_insn_and_split "*extend_vf_<mode>"
+  [(set (match_operand:VWEXTF 0 "register_operand")
+     (vec_duplicate:VWEXTF
+       (float_extend:<VEL>
+         (match_operand:<VSUBEL> 1 "register_operand"))))]
+   "TARGET_VECTOR && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(const_int 0)]
+   {
+     rtx tmp = gen_reg_rtx (<VEL>mode);
+     emit_insn (gen_extend<vsubel><vel>2(tmp, operands[1]));
+ 
+     rtx ops[] = {operands[0], tmp};
+     riscv_vector::emit_vlmax_insn (code_for_pred_broadcast (<MODE>mode),
+                                    riscv_vector::UNARY_OP, ops);
+     DONE;
+   }
+   [(set_attr "type" "vfwmuladd")]
+ )
+ 
+ ;; vfwnmacc.vf
+ (define_insn_and_split "*vfwnmacc_vf_<mode>"
+   [(set (match_operand:VWEXTF 0 "register_operand")
+     (minus:VWEXTF
+       (mult:VWEXTF
+ 	(neg:VWEXTF
+ 	  (vec_duplicate:VWEXTF
+ 	    (float_extend:<VEL>
+ 	      (match_operand:<VSUBEL> 2 "register_operand"))))
+ 	(float_extend:VWEXTF
+ 	  (match_operand:<V_DOUBLE_TRUNC> 3 "register_operand")))
+       (match_operand:VWEXTF 1 "register_operand")))]
+   "TARGET_VECTOR && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(const_int 0)]
+   {
+     rtx ops[] = {operands[0], operands[1], operands[2], operands[3]};
+     riscv_vector::emit_vlmax_insn(
+ 	code_for_pred_widen_mul_neg_scalar(MINUS, <MODE>mode),
+ 	riscv_vector::WIDEN_TERNARY_OP_FRM_DYN, ops);
+     DONE;
+   }
+   [(set_attr "type" "vfwmuladd")]
+ )
+ 
+ ;; vfwnmsac.vf
+ (define_insn_and_split "*vfwnmsac_vf_<mode>"
+   [(set (match_operand:VWEXTF 0 "register_operand")
+     (minus:VWEXTF
+       (match_operand:VWEXTF 1 "register_operand")
+       (mult:VWEXTF
+ 	(float_extend:VWEXTF
+ 	  (match_operand:<V_DOUBLE_TRUNC> 3 "register_operand"))
+ 	(vec_duplicate:VWEXTF
+ 	  (float_extend:<VEL>
+ 	    (match_operand:<VSUBEL> 2 "register_operand"))))))]
+   "TARGET_VECTOR && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(const_int 0)]
+   {
+     rtx ops[] = {operands[0], operands[1], operands[2], operands[3]};
+     riscv_vector::emit_vlmax_insn(
+ 	code_for_pred_widen_mul_neg_scalar (PLUS, <MODE>mode),
+ 	riscv_vector::WIDEN_TERNARY_OP_FRM_DYN, ops);
+     DONE;
+   }
+   [(set_attr "type" "vfwmuladd")]
+ )
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/autovec.md gcc-16-20250720/gcc/config/riscv/autovec.md
*** gcc-16-20250713/gcc/config/riscv/autovec.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/riscv/autovec.md	Sun Jul 20 22:32:09 2025
***************
*** 2489,2495 ****
        (sign_extend:VWEXTI
         (match_operand:<V_DOUBLE_TRUNC> 1 "register_operand"))
        (sign_extend:VWEXTI
!        (match_operand:<V_DOUBLE_TRUNC> 2 "register_operand"))))))]
    "TARGET_VECTOR"
    {
      insn_code icode = code_for_pred (UNSPEC_VAADD, <V_DOUBLE_TRUNC>mode);
--- 2489,2496 ----
        (sign_extend:VWEXTI
         (match_operand:<V_DOUBLE_TRUNC> 1 "register_operand"))
        (sign_extend:VWEXTI
!        (match_operand:<V_DOUBLE_TRUNC> 2 "register_operand")))
!      (const_int 1))))]
    "TARGET_VECTOR"
    {
      insn_code icode = code_for_pred (UNSPEC_VAADD, <V_DOUBLE_TRUNC>mode);
***************
*** 2499,2504 ****
--- 2500,2518 ----
    }
  )
  
+ (define_expand "avg<mode>3_floor"
+  [(match_operand:V_VLSI_D 0 "register_operand")
+   (match_operand:V_VLSI_D 1 "register_operand")
+   (match_operand:V_VLSI_D 2 "register_operand")]
+   "TARGET_VECTOR"
+   {
+     insn_code icode = code_for_pred (UNSPEC_VAADD, <MODE>mode);
+     riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP_VXRM_RDN,
+ 				   operands);
+     DONE;
+   }
+ )
+ 
  (define_expand "avg<v_double_trunc>3_ceil"
   [(set (match_operand:<V_DOUBLE_TRUNC> 0 "register_operand")
     (truncate:<V_DOUBLE_TRUNC>
***************
*** 2509,2521 ****
  	(match_operand:<V_DOUBLE_TRUNC> 1 "register_operand"))
         (sign_extend:VWEXTI
  	(match_operand:<V_DOUBLE_TRUNC> 2 "register_operand")))
!       (const_int 1)))))]
    "TARGET_VECTOR"
    {
      insn_code icode = code_for_pred (UNSPEC_VAADD, <V_DOUBLE_TRUNC>mode);
      riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP_VXRM_RNU,
  				   operands);
      DONE;
    }
  )
  
--- 2523,2549 ----
  	(match_operand:<V_DOUBLE_TRUNC> 1 "register_operand"))
         (sign_extend:VWEXTI
  	(match_operand:<V_DOUBLE_TRUNC> 2 "register_operand")))
!       (const_int 1))
!      (const_int 1))))]
    "TARGET_VECTOR"
    {
      insn_code icode = code_for_pred (UNSPEC_VAADD, <V_DOUBLE_TRUNC>mode);
      riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP_VXRM_RNU,
  				   operands);
      DONE;
+   }
+ )
+ 
+ (define_expand "avg<mode>3_ceil"
+  [(match_operand:V_VLSI_D 0 "register_operand")
+   (match_operand:V_VLSI_D 1 "register_operand")
+   (match_operand:V_VLSI_D 2 "register_operand")]
+   "TARGET_VECTOR"
+   {
+     insn_code icode = code_for_pred (UNSPEC_VAADD, <MODE>mode);
+     riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP_VXRM_RNU,
+ 				   operands);
+     DONE;
    }
  )
  
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/mips-insn.md gcc-16-20250720/gcc/config/riscv/mips-insn.md
*** gcc-16-20250713/gcc/config/riscv/mips-insn.md	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/config/riscv/mips-insn.md	Sun Jul 20 22:32:09 2025
***************
*** 0 ****
--- 1,35 ----
+ ;; Machine description for MIPS custom instructions.
+ ;; Copyright (C) 2025 Free Software Foundation, Inc.
+ 
+ ;; This file is part of GCC.
+ 
+ ;; GCC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 3, or (at your option)
+ ;; any later version.
+ 
+ ;; GCC is distributed in the hope that it will be useful,
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ;; GNU General Public License for more details.
+ 
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with GCC; see the file COPYING3.  If not see
+ ;; <http://www.gnu.org/licenses/>.
+ 
+ (define_insn "*mov<GPR:mode><X:mode>cc_bitmanip"
+   [(set (match_operand:GPR 0 "register_operand" "=r")
+ 	(if_then_else:GPR (any_eq:X (match_operand:X 1 "register_operand" "r")
+ 				    (match_operand:X 2 "const_0_operand" "J"))
+ 			  (match_operand:GPR 3 "reg_or_0_operand" "rJ")
+ 			  (match_operand:GPR 4 "reg_or_0_operand" "rJ")))]
+   "TARGET_XMIPSCMOV"
+ {
+   enum rtx_code code = <CODE>;
+   if (code == NE)
+     return "mips.ccmov\t%0,%1,%z3,%z4";
+   else
+     return "mips.ccmov\t%0,%1,%z4,%z3";
+ }
+ [(set_attr "type" "condmove")
+  (set_attr "mode" "<GPR:MODE>")])
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/riscv-cores.def gcc-16-20250720/gcc/config/riscv/riscv-cores.def
*** gcc-16-20250713/gcc/config/riscv/riscv-cores.def	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/riscv/riscv-cores.def	Sun Jul 20 22:32:09 2025
*************** RISCV_CORE("xiangshan-kunminghu",   "rv6
*** 169,175 ****
  			      "zvfhmin_zvkt_zvl128b_zvl32b_zvl64b",
  			      "xiangshan-kunminghu")
  
! RISCV_CORE("mips-p8700",     	"rv64imafd_zicsr_zmmul_"
! 			      "zaamo_zalrsc_zba_zbb",
  			      "mips-p8700")
  #undef RISCV_CORE
--- 169,174 ----
  			      "zvfhmin_zvkt_zvl128b_zvl32b_zvl64b",
  			      "xiangshan-kunminghu")
  
! RISCV_CORE("mips-p8700",      "rv64imfd_zicsr_zifencei_zalrsc_zba_zbb",
  			      "mips-p8700")
  #undef RISCV_CORE
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/riscv-ext-mips.def gcc-16-20250720/gcc/config/riscv/riscv-ext-mips.def
*** gcc-16-20250713/gcc/config/riscv/riscv-ext-mips.def	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/config/riscv/riscv-ext-mips.def	Sun Jul 20 22:32:09 2025
***************
*** 0 ****
--- 1,35 ----
+ /* MIPS extension definition file for RISC-V.
+    Copyright (C) 2025 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.
+ 
+ Please run `make riscv-regen` in build folder to make sure updated anything.
+ 
+ Format of DEFINE_RISCV_EXT, please refer to riscv-ext.def.  */
+ 
+ DEFINE_RISCV_EXT (
+   /* NAME.  */ xmipscmov,
+   /* UPPERCASE_NAME.  */ XMIPSCMOV,
+   /* FULL_NAME.  */ "Mips conditional move extension",
+   /* DESC.  */ "",
+   /* URL.  */ ,
+   /* DEP_EXTS.  */ ({}),
+   /* SUPPORTED_VERSIONS.  */ ({{1, 0}}),
+   /* FLAG_GROUP.  */ xmips,
+   /* BITMASK_GROUP_ID.  */ BITMASK_NOT_YET_ALLOCATED,
+   /* BITMASK_BIT_POSITION.  */ BITMASK_NOT_YET_ALLOCATED,
+   /* EXTRA_EXTENSION_FLAGS.  */ 0)
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/riscv-ext.def gcc-16-20250720/gcc/config/riscv/riscv-ext.def
*** gcc-16-20250713/gcc/config/riscv/riscv-ext.def	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/riscv/riscv-ext.def	Sun Jul 20 22:32:09 2025
*************** DEFINE_RISCV_EXT(
*** 2082,2084 ****
--- 2082,2085 ----
  #include "riscv-ext-sifive.def"
  #include "riscv-ext-thead.def"
  #include "riscv-ext-ventana.def"
+ #include "riscv-ext-mips.def"
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/riscv-ext.opt gcc-16-20250720/gcc/config/riscv/riscv-ext.opt
*** gcc-16-20250713/gcc/config/riscv/riscv-ext.opt	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/riscv/riscv-ext.opt	Sun Jul 20 22:32:09 2025
*************** TargetVariable
*** 47,52 ****
--- 47,55 ----
  int riscv_xcv_subext
  
  TargetVariable
+ int riscv_xmips_subext
+ 
+ TargetVariable
  int riscv_xsf_subext
  
  TargetVariable
*************** Mask(XTHEADVECTOR) Var(riscv_xthead_sube
*** 445,447 ****
--- 448,451 ----
  
  Mask(XVENTANACONDOPS) Var(riscv_xventana_subext)
  
+ Mask(XMIPSCMOV) Var(riscv_xmips_subext)
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/riscv-vsetvl.def gcc-16-20250720/gcc/config/riscv/riscv-vsetvl.def
*** gcc-16-20250713/gcc/config/riscv/riscv-vsetvl.def	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/riscv/riscv-vsetvl.def	Sun Jul 20 22:32:09 2025
*************** DEF_SEW_LMUL_RULE (sew_only, sew_only, s
*** 79,85 ****
  DEF_SEW_LMUL_RULE (sew_only, ge_sew, sew_only,
  		   sew_ge_and_prev_sew_le_next_max_sew_p, sew_ge_p, nop)
  DEF_SEW_LMUL_RULE (
!   sew_only, ratio_and_ge_sew, sew_lmul,
    sew_ge_and_prev_sew_le_next_max_sew_and_next_ratio_valid_for_prev_sew_p,
    always_false, modify_lmul_with_next_ratio)
  
--- 79,85 ----
  DEF_SEW_LMUL_RULE (sew_only, ge_sew, sew_only,
  		   sew_ge_and_prev_sew_le_next_max_sew_p, sew_ge_p, nop)
  DEF_SEW_LMUL_RULE (
!   sew_only, ratio_and_ge_sew, ratio_and_ge_sew,
    sew_ge_and_prev_sew_le_next_max_sew_and_next_ratio_valid_for_prev_sew_p,
    always_false, modify_lmul_with_next_ratio)
  
*************** DEF_SEW_LMUL_RULE (ratio_and_ge_sew, sew
*** 104,112 ****
  DEF_SEW_LMUL_RULE (ratio_and_ge_sew, ratio_only, ratio_and_ge_sew, ratio_eq_p,
  		   ratio_eq_p, use_max_sew_and_lmul_with_prev_ratio)
  DEF_SEW_LMUL_RULE (
!   ratio_and_ge_sew, sew_only, sew_only,
    sew_le_and_next_sew_le_prev_max_sew_and_prev_ratio_valid_for_next_sew_p,
!   always_false, use_next_sew_with_prev_ratio)
  DEF_SEW_LMUL_RULE (ratio_and_ge_sew, ge_sew, ratio_and_ge_sew,
  		   max_sew_overlap_and_prev_ratio_valid_for_next_sew_p,
  		   sew_ge_p, use_max_sew_and_lmul_with_prev_ratio)
--- 104,112 ----
  DEF_SEW_LMUL_RULE (ratio_and_ge_sew, ratio_only, ratio_and_ge_sew, ratio_eq_p,
  		   ratio_eq_p, use_max_sew_and_lmul_with_prev_ratio)
  DEF_SEW_LMUL_RULE (
!   ratio_and_ge_sew, sew_only, ratio_and_ge_sew,
    sew_le_and_next_sew_le_prev_max_sew_and_prev_ratio_valid_for_next_sew_p,
!   sew_eq_p, use_next_sew_with_prev_ratio)
  DEF_SEW_LMUL_RULE (ratio_and_ge_sew, ge_sew, ratio_and_ge_sew,
  		   max_sew_overlap_and_prev_ratio_valid_for_next_sew_p,
  		   sew_ge_p, use_max_sew_and_lmul_with_prev_ratio)
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/riscv.cc gcc-16-20250720/gcc/config/riscv/riscv.cc
*** gcc-16-20250713/gcc/config/riscv/riscv.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/riscv/riscv.cc	Sun Jul 20 22:32:09 2025
*************** along with GCC; see the file COPYING3.
*** 87,92 ****
--- 87,96 ----
  #include "riscv-vector-costs.h"
  #include "riscv-subset.h"
  
+ /* Target variants that support full conditional move.  */
+ #define	TARGET_COND_MOV						\
+    (TARGET_SFB_ALU || TARGET_XTHEADCONDMOV || TARGET_XMIPSCMOV)
+ 
  /* True if X is an UNSPEC wrapper around a SYMBOL_REF or LABEL_REF.  */
  #define UNSPEC_ADDRESS_P(X)					\
    (GET_CODE (X) == UNSPEC					\
*************** get_vector_binary_rtx_cost (rtx x, int s
*** 3965,3975 ****
  
    rtx op_0 = XEXP (x, 0);
    rtx op_1 = XEXP (x, 1);
  
    if (GET_CODE (op_0) == VEC_DUPLICATE
        || GET_CODE (op_1) == VEC_DUPLICATE)
      return (scalar2vr_cost + 1) * COSTS_N_INSNS (1);
!   else if (GET_CODE (op_0) == NEG && GET_CODE (op_1) == VEC_DUPLICATE)
      return (scalar2vr_cost + 1) * COSTS_N_INSNS (1);
    else
      return COSTS_N_INSNS (1);
--- 3969,3982 ----
  
    rtx op_0 = XEXP (x, 0);
    rtx op_1 = XEXP (x, 1);
+   rtx neg;
  
    if (GET_CODE (op_0) == VEC_DUPLICATE
        || GET_CODE (op_1) == VEC_DUPLICATE)
      return (scalar2vr_cost + 1) * COSTS_N_INSNS (1);
!   else if (GET_CODE (neg = op_0) == NEG
! 	   && (GET_CODE (op_1) == VEC_DUPLICATE
! 	       || GET_CODE (XEXP (neg, 0)) == VEC_DUPLICATE))
      return (scalar2vr_cost + 1) * COSTS_N_INSNS (1);
    else
      return COSTS_N_INSNS (1);
*************** riscv_rtx_costs (rtx x, machine_mode mod
*** 4169,4175 ****
        return false;
  
      case IF_THEN_ELSE:
!       if ((TARGET_SFB_ALU || TARGET_XTHEADCONDMOV)
  	  && reg_or_0_operand (XEXP (x, 1), mode)
  	  && sfb_alu_operand (XEXP (x, 2), mode)
  	  && comparison_operator (XEXP (x, 0), VOIDmode))
--- 4176,4182 ----
        return false;
  
      case IF_THEN_ELSE:
!       if (TARGET_COND_MOV
  	  && reg_or_0_operand (XEXP (x, 1), mode)
  	  && sfb_alu_operand (XEXP (x, 2), mode)
  	  && comparison_operator (XEXP (x, 0), VOIDmode))
*************** riscv_expand_conditional_branch (rtx lab
*** 5487,5492 ****
--- 5494,5561 ----
    emit_jump_insn (gen_condjump (condition, label));
  }
  
+ /* canonicalization of the comparands.  */
+ void
+ canonicalize_comparands (rtx_code code, rtx *op0, rtx *op1)
+ {
+   /* An integer comparison must be comparing WORD_MODE objects.
+      Extend the comparison arguments as necessary.  */
+   if ((INTEGRAL_MODE_P (GET_MODE (*op0)) && GET_MODE (*op0) != word_mode)
+       || (INTEGRAL_MODE_P (GET_MODE (*op1)) && GET_MODE (*op1) != word_mode))
+     riscv_extend_comparands (code, op0, op1);
+ 
+   /* We might have been handed back a SUBREG.  Just to make things
+      easy, force it into a REG.  */
+   if (!REG_P (*op0) && !CONST_INT_P (*op0))
+     *op0 = force_reg (word_mode, *op0);
+   if (!REG_P (*op1) && !CONST_INT_P (*op1))
+     *op1 = force_reg (word_mode, *op1);
+ }
+ 
+ /* Emit target specific conditional move like TARGET_XMIPSCMOV etc.  */
+ bool
+ riscv_target_conditional_move (rtx dest, rtx op0, rtx op1, rtx_code code,
+ 				rtx cons, rtx alt)
+ {
+   machine_mode dst_mode = GET_MODE (dest);
+   rtx target;
+ 
+   /* force the operands to the register.  */
+   cons = force_reg (dst_mode, cons);
+   alt = force_reg (dst_mode, alt);
+ 
+   if (TARGET_XMIPSCMOV)
+     {
+       if (code == EQ || code == NE)
+ 	{
+ 	  op0 = riscv_zero_if_equal (op0, op1);
+ 	  op1 = const0_rtx;
+ 	}
+       else
+ 	{
+ 	  target = gen_reg_rtx (GET_MODE (op0));
+ 	  riscv_emit_int_order_test (code, 0, target, op0, op1);
+ 	  op0 = target;
+ 	  op1 = const0_rtx;
+ 	  code = NE;
+ 	}
+       riscv_emit_int_compare (&code, &op0, &op1);
+       rtx cond = gen_rtx_fmt_ee (code, GET_MODE (op0), op0, op1);
+       emit_insn (gen_rtx_SET (dest, gen_rtx_IF_THEN_ELSE (dst_mode,
+ 							   cond, cons, alt)));
+       return true;
+     }
+   /* TARGET_SFB_ALU || TARGET_XTHEADCONDMOV.  */
+   else
+    {
+      riscv_emit_int_compare (&code, &op0, &op1, !TARGET_SFB_ALU);
+      rtx cond = gen_rtx_fmt_ee (code, GET_MODE (op0), op0, op1);
+      emit_insn (gen_rtx_SET (dest, gen_rtx_IF_THEN_ELSE (dst_mode, cond,
+ 							 cons, alt)));
+      return true;
+    }
+ }
+ 
  /* Emit a cond move: If OP holds, move CONS to DEST; else move ALT to DEST.
     Return 0 if expansion failed.  */
  
*************** riscv_expand_conditional_move (rtx dest,
*** 5539,5572 ****
        /* If we need more special cases, add them here.  */
      }
  
    if (((TARGET_ZICOND_LIKE
  	|| (arith_operand (cons, dst_mode) && arith_operand (alt, dst_mode)))
         && GET_MODE_CLASS (dst_mode) == MODE_INT
         && GET_MODE_CLASS (cond_mode) == MODE_INT)
!       || TARGET_SFB_ALU || TARGET_XTHEADCONDMOV)
      {
        machine_mode mode0 = GET_MODE (op0);
-       machine_mode mode1 = GET_MODE (op1);
- 
-       /* An integer comparison must be comparing WORD_MODE objects.
- 	 Extend the comparison arguments as necessary.  */
-       if ((INTEGRAL_MODE_P (mode0) && mode0 != word_mode)
- 	  || (INTEGRAL_MODE_P (mode1) && mode1 != word_mode))
- 	riscv_extend_comparands (code, &op0, &op1);
  
!       /* We might have been handed back a SUBREG.  Just to make things
! 	 easy, force it into a REG.  */
!       if (!REG_P (op0) && !CONST_INT_P (op0))
! 	op0 = force_reg (word_mode, op0);
!       if (!REG_P (op1) && !CONST_INT_P (op1))
! 	op1 = force_reg (word_mode, op1);
  
        /* In the fallback generic case use DST_MODE rather than WORD_MODE
  	 for the output of the SCC instruction, to match the mode of the NEG
  	 operation below.  The output of SCC is 0 or 1 boolean, so it is
  	 valid for input in any scalar integer mode.  */
!       rtx tmp = gen_reg_rtx ((TARGET_ZICOND_LIKE
! 			      || TARGET_SFB_ALU || TARGET_XTHEADCONDMOV)
  			     ? word_mode : dst_mode);
        bool invert = false;
  
--- 5608,5629 ----
        /* If we need more special cases, add them here.  */
      }
  
+ 
    if (((TARGET_ZICOND_LIKE
  	|| (arith_operand (cons, dst_mode) && arith_operand (alt, dst_mode)))
         && GET_MODE_CLASS (dst_mode) == MODE_INT
         && GET_MODE_CLASS (cond_mode) == MODE_INT)
!        || TARGET_COND_MOV)
      {
        machine_mode mode0 = GET_MODE (op0);
  
!       canonicalize_comparands (code,&op0,&op1);
  
        /* In the fallback generic case use DST_MODE rather than WORD_MODE
  	 for the output of the SCC instruction, to match the mode of the NEG
  	 operation below.  The output of SCC is 0 or 1 boolean, so it is
  	 valid for input in any scalar integer mode.  */
!       rtx tmp = gen_reg_rtx ((TARGET_ZICOND_LIKE || TARGET_COND_MOV)
  			     ? word_mode : dst_mode);
        bool invert = false;
  
*************** riscv_expand_conditional_move (rtx dest,
*** 5603,5627 ****
  	  op0 = XEXP (op, 0);
  	  op1 = XEXP (op, 1);
  	}
!       else if (!TARGET_ZICOND_LIKE && !TARGET_SFB_ALU && !TARGET_XTHEADCONDMOV)
  	riscv_expand_int_scc (tmp, code, op0, op1, &invert);
  
!       if (TARGET_SFB_ALU || TARGET_XTHEADCONDMOV)
! 	{
! 	  riscv_emit_int_compare (&code, &op0, &op1, !TARGET_SFB_ALU);
! 	  rtx cond = gen_rtx_fmt_ee (code, GET_MODE (op0), op0, op1);
  
- 	  /* The expander is a bit loose in its specification of the true
- 	     arm of the conditional move.  That allows us to support more
- 	     cases for extensions which are more general than SFB.  But
- 	     does mean we need to force CONS into a register at this point.  */
- 	  cons = force_reg (dst_mode, cons);
- 	  /* With XTheadCondMov we need to force ALT into a register too.  */
- 	  alt = force_reg (dst_mode, alt);
- 	  emit_insn (gen_rtx_SET (dest, gen_rtx_IF_THEN_ELSE (dst_mode, cond,
- 							      cons, alt)));
- 	  return true;
- 	}
        else if (!TARGET_ZICOND_LIKE)
  	{
  	  if (invert)
--- 5660,5671 ----
  	  op0 = XEXP (op, 0);
  	  op1 = XEXP (op, 1);
  	}
!       else if (!TARGET_ZICOND_LIKE && !TARGET_COND_MOV)
  	riscv_expand_int_scc (tmp, code, op0, op1, &invert);
  
!       if (TARGET_COND_MOV)
! 	return riscv_target_conditional_move (dest, op0, op1, code, cons, alt);
  
        else if (!TARGET_ZICOND_LIKE)
  	{
  	  if (invert)
*************** riscv_macro_fusion_pair_p (rtx_insn *pre
*** 10318,10327 ****
    bool simple_sets_p = prev_set && curr_set && !any_condjump_p (curr);
    bool sched1 = can_create_pseudo_p ();
  
!   unsigned int prev_dest_regno = (REG_P (SET_DEST (prev_set))
  				  ? REGNO (SET_DEST (prev_set))
  				  : FIRST_PSEUDO_REGISTER);
!   unsigned int curr_dest_regno = (REG_P (SET_DEST (curr_set))
  				  ? REGNO (SET_DEST (curr_set))
  				  : FIRST_PSEUDO_REGISTER);
  
--- 10362,10371 ----
    bool simple_sets_p = prev_set && curr_set && !any_condjump_p (curr);
    bool sched1 = can_create_pseudo_p ();
  
!   unsigned int prev_dest_regno = (prev_set && REG_P (SET_DEST (prev_set))
  				  ? REGNO (SET_DEST (prev_set))
  				  : FIRST_PSEUDO_REGISTER);
!   unsigned int curr_dest_regno = (curr_set && REG_P (SET_DEST (curr_set))
  				  ? REGNO (SET_DEST (curr_set))
  				  : FIRST_PSEUDO_REGISTER);
  
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/riscv.md gcc-16-20250720/gcc/config/riscv/riscv.md
*** gcc-16-20250713/gcc/config/riscv/riscv.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/riscv/riscv.md	Sun Jul 20 22:32:09 2025
***************
*** 3298,3304 ****
  			  (match_operand:GPR 2 "movcc_operand")
  			  (match_operand:GPR 3 "movcc_operand")))]
    "TARGET_SFB_ALU || TARGET_XTHEADCONDMOV || TARGET_ZICOND_LIKE
!    || TARGET_MOVCC"
  {
    if (riscv_expand_conditional_move (operands[0], operands[1],
  				     operands[2], operands[3]))
--- 3298,3304 ----
  			  (match_operand:GPR 2 "movcc_operand")
  			  (match_operand:GPR 3 "movcc_operand")))]
    "TARGET_SFB_ALU || TARGET_XTHEADCONDMOV || TARGET_ZICOND_LIKE
!    || TARGET_MOVCC || TARGET_XMIPSCMOV"
  {
    if (riscv_expand_conditional_move (operands[0], operands[1],
  				     operands[2], operands[3]))
***************
*** 4883,4888 ****
--- 4883,4889 ----
  (include "vector-crypto.md")
  (include "vector-bfloat16.md")
  (include "zicond.md")
+ (include "mips-insn.md")
  (include "sfb.md")
  (include "zc.md")
  ;; Vendor extensions
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/t-riscv gcc-16-20250720/gcc/config/riscv/t-riscv
*** gcc-16-20250713/gcc/config/riscv/t-riscv	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/riscv/t-riscv	Sun Jul 20 22:32:09 2025
*************** RISCV_EXT_DEFS = \
*** 194,200 ****
    $(srcdir)/config/riscv/riscv-ext.def \
    $(srcdir)/config/riscv/riscv-ext-sifive.def \
    $(srcdir)/config/riscv/riscv-ext-thead.def \
!   $(srcdir)/config/riscv/riscv-ext-ventana.def
  
  $(srcdir)/config/riscv/riscv-ext.opt: $(RISCV_EXT_DEFS)
  
--- 194,201 ----
    $(srcdir)/config/riscv/riscv-ext.def \
    $(srcdir)/config/riscv/riscv-ext-sifive.def \
    $(srcdir)/config/riscv/riscv-ext-thead.def \
!   $(srcdir)/config/riscv/riscv-ext-ventana.def \
!   $(srcdir)/config/riscv/riscv-ext-mips.def
  
  $(srcdir)/config/riscv/riscv-ext.opt: $(RISCV_EXT_DEFS)
  
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/vector-iterators.md gcc-16-20250720/gcc/config/riscv/vector-iterators.md
*** gcc-16-20250713/gcc/config/riscv/vector-iterators.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/riscv/vector-iterators.md	Sun Jul 20 22:32:09 2025
***************
*** 2418,2423 ****
--- 2418,2464 ----
    (RVVM1x2DF "rvvm1df")
  ])
  
+ (define_mode_attr vsubel [
+   (RVVM8HI "qi") (RVVM4HI "qi") (RVVM2HI "qi") (RVVM1HI "qi") (RVVMF2HI "qi") (RVVMF4HI "qi")
+ 
+   (RVVM8SI "hi") (RVVM4SI "hi") (RVVM2SI "hi") (RVVM1SI "hi") (RVVMF2SI "hi")
+ 
+   (RVVM8SF "hf") (RVVM4SF "hf") (RVVM2SF "hf") (RVVM1SF "hf") (RVVMF2SF "hf")
+ 
+   (RVVM8DI "si") (RVVM4DI "si") (RVVM2DI "si") (RVVM1DI "si")
+ 
+   (RVVM8DF "sf") (RVVM4DF "sf") (RVVM2DF "sf") (RVVM1DF "sf")
+ 
+   ;; VLS modes.
+   (V1HI "qi") (V2HI "qi") (V4HI "qi") (V8HI "qi") (V16HI "qi") (V32HI "qi") (V64HI "qi") (V128HI "qi") (V256HI "qi")
+   (V512HI "qi") (V1024HI "qi") (V2048HI "qi")
+   (V1SI "hi") (V2SI "hi") (V4SI "hi") (V8SI "hi") (V16SI "hi") (V32SI "hi") (V64SI "hi") (V128SI "hi") (V256SI "hi")
+   (V512SI "hi") (V1024SI "hi")
+   (V1DI "si") (V2DI "si") (V4DI "si") (V8DI "si") (V16DI "si") (V32DI "si") (V64DI "si") (V128DI "si") (V256DI "si") (V512DI "si")
+ 
+   (V1SF "hf")
+   (V2SF "hf")
+   (V4SF "hf")
+   (V8SF "hf")
+   (V16SF "hf")
+   (V32SF "hf")
+   (V64SF "hf")
+   (V128SF "hf")
+   (V256SF "hf")
+   (V512SF "hf")
+   (V1024SF "hf")
+   (V1DF "sf")
+   (V2DF "sf")
+   (V4DF "sf")
+   (V8DF "sf")
+   (V16DF "sf")
+   (V32DF "sf")
+   (V64DF "sf")
+   (V128DF "sf")
+   (V256DF "sf")
+   (V512DF "sf")
+ ])
+ 
  (define_mode_attr VSUBEL [
    (RVVM8HI "QI") (RVVM4HI "QI") (RVVM2HI "QI") (RVVM1HI "QI") (RVVMF2HI "QI") (RVVMF4HI "QI")
  
diff -Nrcpad gcc-16-20250713/gcc/config/riscv/vector.md gcc-16-20250720/gcc/config/riscv/vector.md
*** gcc-16-20250713/gcc/config/riscv/vector.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/riscv/vector.md	Sun Jul 20 22:32:09 2025
***************
*** 7299,7308 ****
  	  (plus_minus:VWEXTF
  	    (mult:VWEXTF
  	      (float_extend:VWEXTF
! 	        (vec_duplicate:<V_DOUBLE_TRUNC>
! 	          (match_operand:<VSUBEL> 3 "register_operand"       "    f")))
! 	      (float_extend:VWEXTF
! 	        (match_operand:<V_DOUBLE_TRUNC> 4 "register_operand" "   vr")))
  	    (match_operand:VWEXTF 2 "register_operand"               "    0"))
  	  (match_dup 2)))]
    "TARGET_VECTOR"
--- 7299,7308 ----
  	  (plus_minus:VWEXTF
  	    (mult:VWEXTF
  	      (float_extend:VWEXTF
! 	        (match_operand:<V_DOUBLE_TRUNC> 4 "register_operand" "   vr"))
! 	      (vec_duplicate:VWEXTF
! 	        (float_extend:<VEL>
! 	          (match_operand:<VSUBEL> 3 "register_operand"       "    f"))))
  	    (match_operand:VWEXTF 2 "register_operand"               "    0"))
  	  (match_dup 2)))]
    "TARGET_VECTOR"
diff -Nrcpad gcc-16-20250713/gcc/config/s390/s390.cc gcc-16-20250720/gcc/config/s390/s390.cc
*** gcc-16-20250713/gcc/config/s390/s390.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/s390/s390.cc	Sun Jul 20 22:32:09 2025
*************** s390_register_move_cost (machine_mode mo
*** 3862,3868 ****
  {
    /* 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. */
--- 3862,3882 ----
  {
    /* On s390, copy between fprs and gprs is expensive.  */
  
!   /* With vector extensions any GPR<->VR load up to 8 bytes is supported.  */
!   if (TARGET_VX && GET_MODE_SIZE (mode) <= 8)
!     {
!       /* ldgr/vlvgg take one cycle and vlvg[bhf] take two cycles. */
!       if (reg_classes_intersect_p (from, GENERAL_REGS)
! 	  && reg_classes_intersect_p (to, VEC_REGS))
! 	return GET_MODE_SIZE (mode) == 8 ? 1 : 2;
!       /* lgdr/vlgv[fg] take three cycles and vlgv[bh] take five cycles. */
!       if (reg_classes_intersect_p (to, GENERAL_REGS)
! 	  && reg_classes_intersect_p (from, VEC_REGS))
! 	return GET_MODE_SIZE (mode) >= 4 ? 3 : 4;
!     }
! 
!   /* Without vector extensions it still becomes somewhat faster having
!      ldgr/lgdr.  */
    if (TARGET_Z10 && GET_MODE_SIZE (mode) == 8)
      {
        /* ldgr is single cycle. */
*************** s390_option_override_internal (struct gc
*** 16566,16574 ****
    else
      SET_OPTION_IF_UNSET (opts, opts_set, param_vect_partial_vector_usage, 0);
  
-   /* Do not vectorize loops with a low trip count for now.  */
-   SET_OPTION_IF_UNSET (opts, opts_set, param_min_vect_loop_bound, 2);
- 
    /* Set the default alignment.  */
    s390_default_align (opts);
  
--- 16580,16585 ----
diff -Nrcpad gcc-16-20250713/gcc/config/s390/s390.md gcc-16-20250720/gcc/config/s390/s390.md
*** gcc-16-20250713/gcc/config/s390/s390.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/s390/s390.md	Sun Jul 20 22:32:09 2025
***************
*** 121,126 ****
--- 121,127 ----
  
     ; Test Data Class (TDC)
     UNSPEC_TDC_INSN
+    UNSPEC_SIGNBIT
  
     ; Byte-wise Population Count
     UNSPEC_POPCNT
***************
*** 513,519 ****
  				    S390_TDC_INFINITY
  				    S390_TDC_NORMAL_BFP])
  
! (define_int_attr tdc_insn [(S390_TDC_SIGNBIT_SET "signbit")
  			   (S390_TDC_FINITE "isfinite")
  			   (S390_TDC_INFINITY "isinf")
  			   (S390_TDC_NORMAL_BFP "isnormal")
--- 514,520 ----
  				    S390_TDC_INFINITY
  				    S390_TDC_NORMAL_BFP])
  
! (define_int_attr tdc_insn [(S390_TDC_SIGNBIT_SET "signbit_tdc")
  			   (S390_TDC_FINITE "isfinite")
  			   (S390_TDC_INFINITY "isinf")
  			   (S390_TDC_NORMAL_BFP "isnormal")
***************
*** 3782,3787 ****
--- 3783,3868 ----
  	(unspec:SI [(reg:CCZ CC_REGNUM)] UNSPEC_CC_TO_INT))]
    "TARGET_HARD_DFP")
  
+ (define_mode_iterator SIGNBIT_SINGLE [(SF "TARGET_HARD_FLOAT")
+ 				      (SD "TARGET_HARD_DFP")])
+ (define_expand "signbit<mode>2"
+   [(match_operand:SI 0 "register_operand")
+    (match_operand:SIGNBIT_SINGLE 1 "nonimmediate_operand")]
+   ""
+ {
+   if (TARGET_VX && TARGET_64BIT)
+     {
+       emit_insn (gen_rtx_SET (operands[0], simplify_gen_subreg (SImode, operands[1], <MODE>mode, 0)));
+       emit_insn (gen_rtx_SET (operands[0], gen_rtx_LSHIFTRT (SImode, operands[0], GEN_INT (31))));
+     }
+   else if (TARGET_Z10 && TARGET_64BIT)
+     emit_insn (gen_signbit<mode>2_z10 (operands[0], operands[1]));
+   else
+     emit_insn (gen_signbit_tdc<mode>2 (operands[0], force_reg (<MODE>mode, operands[1])));
+   DONE;
+ })
+ 
+ (define_insn "signbit<mode>2_z10"
+   [(set (match_operand:SI 0 "register_operand" "=d")
+ 	(unspec:SI [(match_operand:SIGNBIT_SINGLE 1 "nonimmediate_operand" "fRT")]
+ 		   UNSPEC_SIGNBIT))]
+   "TARGET_Z10 && TARGET_64BIT"
+   "#")
+ 
+ (define_split
+   [(set (match_operand:SI 0 "register_operand")
+ 	(unspec:SI [(match_operand:SIGNBIT_SINGLE 1 "register_operand")]
+ 		   UNSPEC_SIGNBIT))]
+   "TARGET_Z10 && TARGET_64BIT && reload_completed"
+   [(set (match_dup 0) (match_dup 1))
+    (set (match_dup 0) (lshiftrt:DI (match_dup 0) (const_int 63)))]
+ {
+   operands[0] = gen_rtx_REG (DImode, REGNO (operands[0]));
+   operands[1] = gen_rtx_REG (DImode, REGNO (operands[1]));
+ })
+ 
+ (define_split
+   [(set (match_operand:SI 0 "register_operand")
+ 	(unspec:SI [(match_operand:SIGNBIT_SINGLE 1 "memory_operand")]
+ 		   UNSPEC_SIGNBIT))]
+   "TARGET_Z10 && TARGET_64BIT && reload_completed"
+   [(set (match_dup 0) (match_dup 1))
+    (set (match_dup 0) (lshiftrt:SI (match_dup 0) (const_int 31)))]
+ {
+   operands[1] = change_address (operands[1], SImode, 0);
+ })
+ 
+ (define_mode_iterator SIGNBIT_DBL_TETRA [(DF "TARGET_HARD_FLOAT")
+ 					 (TF "TARGET_HARD_FLOAT")
+ 					 (DD "TARGET_HARD_DFP")
+ 					 (TD "TARGET_HARD_DFP")])
+ (define_expand "signbit<mode>2"
+   [(match_operand:SI 0 "register_operand")
+    (match_operand:SIGNBIT_DBL_TETRA 1 "nonimmediate_operand")]
+   ""
+ {
+   if (TARGET_Z10 && TARGET_64BIT)
+     {
+       rtx reg_di = gen_reg_rtx (DImode);
+       if (<MODE>mode == TFmode || <MODE>mode == TDmode)
+ 	{
+ 	  rtx reg_ti = gen_reg_rtx (TImode);
+ 	  emit_insn (gen_rtx_SET (reg_ti, simplify_gen_subreg (TImode, operands[1], <MODE>mode, 0)));
+ 	  emit_insn (gen_rtx_SET (reg_di, simplify_gen_subreg (DImode, reg_ti, TImode, 0)));
+ 	}
+       else
+ 	emit_insn (gen_rtx_SET (reg_di, simplify_gen_subreg (DImode, operands[1], <MODE>mode, 0)));
+       emit_insn (gen_rtx_SET (reg_di, gen_rtx_LSHIFTRT (DImode, reg_di, GEN_INT (63))));
+       rtx subreg = gen_rtx_SUBREG (SImode, reg_di, 4);
+       SUBREG_PROMOTED_VAR_P (subreg) = 1;
+       SUBREG_PROMOTED_SET (subreg, SRP_SIGNED_AND_UNSIGNED);
+       emit_insn (gen_rtx_SET (operands[0], subreg));
+     }
+   else
+     emit_insn (gen_signbit_tdc<mode>2 (operands[0], force_reg (<MODE>mode, operands[1])));
+   DONE;
+ })
+ 
  ; This extracts CC into a GPR properly shifted.  The actual IPM
  ; instruction will be issued by reload.  The constraint of operand 1
  ; forces reload to use a GPR.  So reload will issue a movcc insn for
diff -Nrcpad gcc-16-20250713/gcc/config/s390/vector.md gcc-16-20250720/gcc/config/s390/vector.md
*** gcc-16-20250713/gcc/config/s390/vector.md	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/config/s390/vector.md	Sun Jul 20 22:32:09 2025
***************
*** 149,161 ****
  
  ; The instruction suffix for integer instructions and instructions
  ; which do not care about whether it is floating point or integer.
! (define_mode_attr bhfgq[(V1QI "b") (V2QI "b") (V4QI "b") (V8QI "b") (V16QI "b")
! 			(V1HI "h") (V2HI "h") (V4HI "h") (V8HI "h")
! 			(V1SI "f") (V2SI "f") (V4SI "f")
! 			(V1DI "g") (V2DI "g")
  			(V1TI "q") (TI "q")
! 			(V1SF "f") (V2SF "f") (V4SF "f")
! 			(V1DF "g") (V2DF "g")
  			(V1TF "q") (TF "q")])
  
  ; This is for vmalhw. It gets an 'w' attached to avoid confusion with
--- 149,161 ----
  
  ; The instruction suffix for integer instructions and instructions
  ; which do not care about whether it is floating point or integer.
! (define_mode_attr bhfgq[(V1QI "b") (V2QI "b") (V4QI "b") (V8QI "b") (V16QI "b") (QI "b")
! 			(V1HI "h") (V2HI "h") (V4HI "h") (V8HI "h") (HI "h")
! 			(V1SI "f") (V2SI "f") (V4SI "f") (SI "f")
! 			(V1DI "g") (V2DI "g") (DI "g")
  			(V1TI "q") (TI "q")
! 			(V1SF "f") (V2SF "f") (V4SF "f") (SF "f")
! 			(V1DF "g") (V2DF "g") (DF "g")
  			(V1TF "q") (TF "q")])
  
  ; This is for vmalhw. It gets an 'w' attached to avoid confusion with
***************
*** 501,506 ****
--- 501,554 ----
                          SIL,SIL,RI,RI,RRE,RRE,RIL,RR,RXY,RXY,RIL")])
  
  
+ ; Instructions vlgvb, vlgvh, vlgvf zero all remaining bits of a GPR, i.e.,
+ ; an implicit zero extend is done.
+ 
+ (define_insn "*movdi<mode>_zero_extend_A"
+   [(set (match_operand:DI 0 "register_operand" "=d")
+ 	(zero_extend:DI (match_operand:SINT 1 "register_operand" "v")))]
+   "TARGET_VX"
+   "vlgv<bhfgq>\t%0,%v1,0"
+   [(set_attr "op_type" "VRS")])
+ 
+ (define_insn "*movsi<mode>_zero_extend_A"
+   [(set (match_operand:SI 0 "register_operand" "=d")
+ 	(zero_extend:SI (match_operand:HQI 1 "register_operand" "v")))]
+   "TARGET_VX"
+   "vlgv<bhfgq>\t%0,%v1,0"
+   [(set_attr "op_type" "VRS")])
+ 
+ (define_mode_iterator VLGV_DI [V1QI V2QI V4QI V8QI V16QI
+ 			       V1HI V2HI V4HI V8HI
+ 			       V1SI V2SI V4SI])
+ (define_insn "*movdi<mode>_zero_extend_B"
+   [(set (match_operand:DI 0 "register_operand" "=d")
+ 	(zero_extend:DI (vec_select:<non_vec>
+ 			  (match_operand:VLGV_DI 1 "register_operand" "v")
+ 			  (parallel [(match_operand:SI 2 "const_int_operand" "n")]))))]
+   "TARGET_VX"
+ {
+   operands[2] = GEN_INT (UINTVAL (operands[2]) & (GET_MODE_NUNITS (<MODE>mode) - 1));
+   return "vlgv<bhfgq>\t%0,%v1,%Y2";
+ }
+   [(set_attr "op_type" "VRS")
+    (set_attr "mnemonic" "vlgv<bhfgq>")])
+ 
+ (define_mode_iterator VLGV_SI [V1QI V2QI V4QI V8QI V16QI
+ 			       V1HI V2HI V4HI V8HI])
+ (define_insn "*movsi<mode>_zero_extend_B"
+   [(set (match_operand:SI 0 "register_operand" "=d")
+ 	(zero_extend:SI (vec_select:<non_vec>
+ 			  (match_operand:VLGV_SI 1 "register_operand" "v")
+ 			  (parallel [(match_operand:SI 2 "const_int_operand" "n")]))))]
+   "TARGET_VX"
+ {
+   operands[2] = GEN_INT (UINTVAL (operands[2]) & (GET_MODE_NUNITS (<MODE>mode) - 1));
+   return "vlgv<bhfgq>\t%0,%v1,%Y2";
+ }
+   [(set_attr "op_type" "VRS")
+    (set_attr "mnemonic" "vlgv<bhfgq>")])
+ 
  ; vec_load_lanes?
  
  ; vec_store_lanes?
***************
*** 3572,3582 ****
    "veval\t%v0,%v1,%v2,%v3,%b4"
    [(set_attr "op_type" "VRI")])
  
- ; reduc_smin
- ; reduc_smax
- ; reduc_umin
- ; reduc_umax
- 
  ; vec_pack_sfix_trunc: convert + pack ?
  ; vec_pack_ufix_trunc
  ; vec_unpacks_float_hi
--- 3620,3625 ----
***************
*** 3627,3629 ****
--- 3670,3960 ----
  	       (const_int 4)]
  	      UNSPEC_FMIN))]
    "TARGET_VXE")
+ 
+ ; reduc_plus
+ (define_expand "reduc_plus_scal_<mode>"
+   [(set (match_dup 4)
+ 	(unspec:V4SI [(match_operand:VI_HW_QH 1 "register_operand")
+ 		      (match_dup 2)]
+ 		      UNSPEC_VEC_VSUM))
+    (set (match_dup 5)
+ 	(unspec:V2DI [(match_dup 4) (match_dup 3)] UNSPEC_VEC_VSUMQ))
+    (set (match_operand:<non_vec> 0 "register_operand")
+ 	(vec_select:<non_vec> (match_dup 6)
+ 			      (parallel [(match_dup 7)])))]
+   "TARGET_VX"
+ {
+   operands[2] = force_reg (<MODE>mode, CONST0_RTX (<MODE>mode));
+   operands[3] = simplify_gen_subreg (V4SImode, operands[2], <MODE>mode, 0);
+   operands[4] = gen_reg_rtx (V4SImode);
+   operands[5] = gen_reg_rtx (V2DImode);
+   operands[6] = simplify_gen_subreg (<MODE>mode, operands[5], V2DImode, 0);
+   operands[7] = GEN_INT (16 / GET_MODE_SIZE (<non_vec>mode) - 1);
+ })
+ 
+ (define_expand "reduc_plus_scal_<mode>"
+   [(set (match_dup 3)
+ 	(unspec:V2DI [(match_operand:VI_HW_SD 1 "register_operand")
+ 		      (match_dup 2)]
+ 		      UNSPEC_VEC_VSUMQ))
+    (set (match_operand:<non_vec> 0 "register_operand")
+ 	(vec_select:<non_vec> (match_dup 4)
+ 			      (parallel [(match_dup 5)])))]
+   "TARGET_VX"
+ {
+   operands[2] = force_reg (<MODE>mode, CONST0_RTX (<MODE>mode));
+   operands[3] = gen_reg_rtx (V2DImode);
+   operands[4] = simplify_gen_subreg (<MODE>mode, operands[3], V2DImode, 0);
+   operands[5] = GEN_INT (16 / GET_MODE_SIZE (<non_vec>mode) - 1);
+ })
+ 
+ (define_expand "reduc_plus_scal_v2df"
+   [(set (match_dup 2)
+ 	(unspec:V2DF [(match_operand:V2DF 1 "register_operand")
+ 		      (match_dup 1)
+ 		      (const_int 8)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 3) (plus:V2DF (match_dup 1) (match_dup 2)))
+    (set (match_operand:DF 0 "register_operand")
+ 	(vec_select:DF (match_dup 3) (parallel [(const_int 0)])))]
+   "TARGET_VX"
+ {
+   operands[2] = gen_reg_rtx (V2DFmode);
+   operands[3] = gen_reg_rtx (V2DFmode);
+ })
+ 
+ (define_expand "reduc_plus_scal_v4sf"
+   [(set (match_dup 2)
+ 	(unspec:V4SF [(match_operand:V4SF 1 "register_operand")
+ 		      (match_dup 1)
+ 		      (const_int 4)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 3) (plus:V4SF (match_dup 1) (match_dup 2)))
+    (set (match_dup 4)
+ 	(unspec:V4SF [(match_dup 3) (match_dup 3) (const_int 8)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 5) (plus:V4SF (match_dup 3) (match_dup 4)))
+    (set (match_operand:SF 0 "register_operand")
+ 	(vec_select:SF (match_dup 5) (parallel [(const_int 0)])))]
+   "TARGET_VXE"
+ {
+   operands[2] = gen_reg_rtx (V4SFmode);
+   operands[3] = gen_reg_rtx (V4SFmode);
+   operands[4] = gen_reg_rtx (V4SFmode);
+   operands[5] = gen_reg_rtx (V4SFmode);
+ })
+ 
+ ; reduc_fmin, reduc_fmax, reduc_smin, reduc_smax
+ 
+ (define_int_iterator REDUC_FMINMAX [UNSPEC_FMAX UNSPEC_FMIN])
+ (define_int_attr reduc_fminmax_name [(UNSPEC_FMAX "fmax") (UNSPEC_FMIN "fmin")])
+ (define_code_iterator REDUC_MINMAX [smin smax])
+ (define_code_attr reduc_minmax_name [(smin "smin") (smax "smax")])
+ 
+ (define_expand "reduc_<reduc_fminmax_name>_scal_v2df"
+   [(set (match_dup 2)
+ 	(unspec:V2DF [(match_operand:V2DF 1 "register_operand")
+ 		      (match_dup 1)
+ 		      (const_int 8)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 3)
+ 	(unspec:V2DF [(match_dup 1) (match_dup 2) (const_int 4)] REDUC_FMINMAX))
+    (set (match_operand:DF 0 "register_operand" "")
+ 	(vec_select:DF (match_dup 3) (parallel [(const_int 0)])))]
+   "TARGET_VX"
+ {
+   operands[2] = gen_reg_rtx (V2DFmode);
+   operands[3] = gen_reg_rtx (V2DFmode);
+ })
+ 
+ (define_expand "reduc_<reduc_fminmax_name>_scal_v4sf"
+   [(set (match_dup 2)
+ 	(unspec:V4SF [(match_operand:V4SF 1 "register_operand")
+ 		      (match_dup 1)
+ 		      (const_int 4)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 3)
+ 	(unspec:V4SF [(match_dup 1) (match_dup 2) (const_int 4)] REDUC_FMINMAX))
+    (set (match_dup 4)
+ 	(unspec:V4SF [(match_dup 3)
+ 		      (match_dup 3)
+ 		      (const_int 8)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 5)
+ 	(unspec:V4SF [(match_dup 3) (match_dup 4) (const_int 4)] REDUC_FMINMAX))
+    (set (match_operand:SF 0 "register_operand")
+ 	(vec_select:SF (match_dup 5) (parallel [(const_int 0)])))]
+    "TARGET_VXE"
+ {
+   operands[2] = gen_reg_rtx (V4SFmode);
+   operands[3] = gen_reg_rtx (V4SFmode);
+   operands[4] = gen_reg_rtx (V4SFmode);
+   operands[5] = gen_reg_rtx (V4SFmode);
+ })
+ 
+ (define_expand "reduc_<reduc_minmax_name>_scal_v2df"
+   [(set (match_dup 2)
+ 	(unspec:V2DF [(match_operand:V2DF 1 "register_operand")
+ 		      (match_dup 1)
+ 		      (const_int 8)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 3)
+ 	(REDUC_MINMAX:V2DF (match_dup 1) (match_dup 2)))
+    (set (match_operand:DF 0 "register_operand" "")
+ 	(vec_select:DF (match_dup 3) (parallel [(const_int 0)])))]
+   "TARGET_VX"
+ {
+   operands[2] = gen_reg_rtx (V2DFmode);
+   operands[3] = gen_reg_rtx (V2DFmode);
+ })
+ 
+ (define_expand "reduc_<reduc_minmax_name>_scal_v4sf"
+   [(set (match_dup 2)
+ 	(unspec:V4SF [(match_operand:V4SF 1 "register_operand")
+ 		      (match_dup 1)
+ 		      (const_int 4)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 3)
+ 	(REDUC_MINMAX:V4SF (match_dup 1) (match_dup 2)))
+    (set (match_dup 4)
+ 	(unspec:V4SF [(match_dup 3)
+ 		      (match_dup 3)
+ 		      (const_int 8)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 5)
+ 	(REDUC_MINMAX:V4SF (match_dup 3) (match_dup 4)))
+    (set (match_operand:SF 0 "register_operand" "")
+ 	(vec_select:SF (match_dup 5) (parallel [(const_int 0)])))]
+    "TARGET_VXE"
+ {
+   operands[2] = gen_reg_rtx (V4SFmode);
+   operands[3] = gen_reg_rtx (V4SFmode);
+   operands[4] = gen_reg_rtx (V4SFmode);
+   operands[5] = gen_reg_rtx (V4SFmode);
+ })
+ 
+ ; reduce_and, reduc_ior, reduc_xor
+ ; reduc_smin, reduc_smax, reduc_umin, reduc_umax
+ 
+ (define_code_iterator REDUCBIN [and xor ior smin smax umin umax])
+ (define_code_attr reduc_bin_insn [(and "and") (xor "xor") (ior "ior")
+ 				  (smin "smin") (smax "smax")
+ 				  (umin "umin") (umax "umax")])
+ 
+ (define_expand "reduc_<reduc_bin_insn>_scal_v2di"
+   [(set (match_dup 2)
+ 	(unspec:V2DI [(match_operand:V2DI 1 "register_operand")
+ 		      (match_dup 1)
+ 		      (const_int 8)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 3)
+ 	(REDUCBIN:V2DI (match_dup 1) (match_dup 2)))
+    (set (match_operand:DI 0 "register_operand" "")
+ 	(vec_select:DI (match_dup 3) (parallel [(const_int 0)])))]
+   "TARGET_VX"
+ {
+   operands[2] = gen_reg_rtx (V2DImode);
+   operands[3] = gen_reg_rtx (V2DImode);
+ })
+ 
+ (define_expand "reduc_<reduc_bin_insn>_scal_v4si"
+   [(set (match_dup 2)
+ 	(unspec:V4SI [(match_operand:V4SI 1 "register_operand")
+ 		      (match_dup 1)
+ 		      (const_int 4)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 3)
+ 	(REDUCBIN:V4SI (match_dup 1) (match_dup 2)))
+    (set (match_dup 4)
+ 	(unspec:V4SI [(match_dup 3)
+ 		      (match_dup 3)
+ 		      (const_int 8)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 5)
+ 	(REDUCBIN:V4SI (match_dup 3) (match_dup 4)))
+    (set (match_operand:SI 0 "register_operand" "")
+ 	(vec_select:SI (match_dup 5) (parallel [(const_int 0)])))]
+   "TARGET_VX"
+ {
+   operands[2] = gen_reg_rtx (V4SImode);
+   operands[3] = gen_reg_rtx (V4SImode);
+   operands[4] = gen_reg_rtx (V4SImode);
+   operands[5] = gen_reg_rtx (V4SImode);
+ })
+ 
+ (define_expand "reduc_<reduc_bin_insn>_scal_v8hi"
+   [(set (match_dup 2)
+ 	(unspec:V8HI [(match_operand:V8HI 1 "register_operand")
+ 		      (match_dup 1)
+ 		      (const_int 2)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 3)
+ 	(REDUCBIN:V8HI (match_dup 1) (match_dup 2)))
+    (set (match_dup 4)
+ 	(unspec:V8HI [(match_dup 3)
+ 		      (match_dup 3)
+ 		      (const_int 4)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 5)
+ 	(REDUCBIN:V8HI (match_dup 3) (match_dup 4)))
+    (set (match_dup 6)
+ 	(unspec:V8HI [(match_dup 5)
+ 		      (match_dup 5)
+ 		      (const_int 8)]
+ 		     UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 7)
+ 	(REDUCBIN:V8HI (match_dup 5) (match_dup 6)))
+    (set (match_operand:HI 0 "register_operand" "")
+ 	(vec_select:HI (match_dup 7) (parallel [(const_int 0)])))]
+   "TARGET_VX"
+ {
+   operands[2] = gen_reg_rtx (V8HImode);
+   operands[3] = gen_reg_rtx (V8HImode);
+   operands[4] = gen_reg_rtx (V8HImode);
+   operands[5] = gen_reg_rtx (V8HImode);
+   operands[6] = gen_reg_rtx (V8HImode);
+   operands[7] = gen_reg_rtx (V8HImode);
+ })
+ 
+ (define_expand "reduc_<reduc_bin_insn>_scal_v16qi"
+   [(set (match_dup 2)
+ 	(unspec:V16QI [(match_operand:V16QI 1 "register_operand")
+ 		       (match_dup 1)
+ 		       (const_int 1)]
+ 		      UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 3)
+ 	(REDUCBIN:V16QI (match_dup 1) (match_dup 2)))
+    (set (match_dup 4)
+ 	(unspec:V16QI [(match_dup 3)
+ 		       (match_dup 3)
+ 		       (const_int 2)]
+ 		      UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 5)
+ 	(REDUCBIN:V16QI (match_dup 3) (match_dup 4)))
+    (set (match_dup 6)
+ 	(unspec:V16QI [(match_dup 5)
+ 		       (match_dup 5)
+ 		       (const_int 4)]
+ 		      UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 7)
+ 	(REDUCBIN:V16QI (match_dup 5) (match_dup 6)))
+    (set (match_dup 8)
+ 	(unspec:V16QI [(match_dup 7)
+ 		       (match_dup 7)
+ 		       (const_int 8)]
+ 		      UNSPEC_VEC_SLDBYTE))
+    (set (match_dup 9)
+ 	(REDUCBIN:V16QI (match_dup 7) (match_dup 8)))
+    (set (match_operand:QI 0 "register_operand" "")
+ 	(vec_select:QI (match_dup 9) (parallel [(const_int 0)])))]
+   "TARGET_VX"
+ {
+   operands[2] = gen_reg_rtx (V16QImode);
+   operands[3] = gen_reg_rtx (V16QImode);
+   operands[4] = gen_reg_rtx (V16QImode);
+   operands[5] = gen_reg_rtx (V16QImode);
+   operands[6] = gen_reg_rtx (V16QImode);
+   operands[7] = gen_reg_rtx (V16QImode);
+   operands[8] = gen_reg_rtx (V16QImode);
+   operands[9] = gen_reg_rtx (V16QImode);
+ })
diff -Nrcpad gcc-16-20250713/gcc/config.in gcc-16-20250720/gcc/config.in
*** gcc-16-20250713/gcc/config.in	Sun Jul 13 22:33:12 2025
--- gcc-16-20250720/gcc/config.in	Sun Jul 20 22:32:56 2025
***************
*** 318,323 ****
--- 318,329 ----
  #endif
  
  
+ /* Define to enable -mfentry by default on x86-64. */
+ #ifndef USED_FOR_TARGET
+ #undef ENABLE_X86_64_MFENTRY
+ #endif
+ 
+ 
  /* Define to the name of a file containing a list of extra machine modes for
     this architecture. */
  #ifndef USED_FOR_TARGET
diff -Nrcpad gcc-16-20250713/gcc/configure gcc-16-20250720/gcc/configure
*** gcc-16-20250713/gcc/configure	Sun Jul 13 22:33:12 2025
--- gcc-16-20250720/gcc/configure	Sun Jul 20 22:32:56 2025
*************** enable_versioned_jit
*** 1064,1069 ****
--- 1064,1070 ----
  enable_default_pie
  enable_cet
  enable_s390_excess_float_precision
+ enable_x86_64_mfentry
  '
        ac_precious_vars='build_alias
  host_alias
*************** Optional Features:
*** 1842,1847 ****
--- 1843,1849 ----
    --enable-s390-excess-float-precision
                            on s390 targets, evaluate float with double
                            precision when in standards-conforming mode
+   --enable-x86-64-mfentry enable -mfentry by default on x86-64 targets
  
  Optional Packages:
    --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
*************** else
*** 21520,21526 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21523 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 21522,21528 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21525 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 21626,21632 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21629 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 21628,21634 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21631 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** $as_echo "#define ENABLE_S390_EXCESS_FLO
*** 35022,35027 ****
--- 35024,35069 ----
    ;;
  esac
  
+ # On x86-64, when profiling is enabled with shrink wrapping, the mcount
+ # call may not be placed at the function entry after
+ #	pushq %rbp
+ #	movq %rsp,%rbp
+ # As the result, the profile data may be skewed which makes PGO less
+ # effective:
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120881
+ # Enable -mfentry by default on x86-64 to put the profiling counter call
+ # before the prologue.
+ # Check whether --enable-x86-64-mfentry was given.
+ if test "${enable_x86_64_mfentry+set}" = set; then :
+   enableval=$enable_x86_64_mfentry; case "${enableval}" in
+    yes | no | auto)
+      enable_x86_64_mfentry=$enableval
+      ;;
+    *)
+      as_fn_error $? "'$enable_x86_64_mfentry' is an invalid value for --enable-x86-64-mfentry.  Valid choices are 'yes', 'no' and 'auto'." "$LINENO" 5
+      ;;
+    esac
+ else
+   enable_x86_64_mfentry=auto
+ fi
+ 
+ 
+ if test x"$enable_x86_64_mfentry" = xauto; then
+   case "${target}" in
+   i?86-*-*gnu* | x86_64-*-*gnu*)
+     # Enable -mfentry by default with glibc on x86.
+     enable_x86_64_mfentry=yes
+     ;;
+   esac
+ fi
+ 
+ gif=`if test x$enable_x86_64_mfentry = xyes; then echo 1; else echo 0; fi`
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define ENABLE_X86_64_MFENTRY $gif
+ _ACEOF
+ 
+ 
  # Check if the linker supports '-z now'
  ld_now_support=no
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker -z now option" >&5
diff -Nrcpad gcc-16-20250713/gcc/configure.ac gcc-16-20250720/gcc/configure.ac
*** gcc-16-20250713/gcc/configure.ac	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/configure.ac	Sun Jul 20 22:32:09 2025
*************** standards-compatible mode on s390 target
*** 7972,7977 ****
--- 7972,8012 ----
    ;;
  esac
  
+ # On x86-64, when profiling is enabled with shrink wrapping, the mcount
+ # call may not be placed at the function entry after
+ #	pushq %rbp
+ #	movq %rsp,%rbp
+ # As the result, the profile data may be skewed which makes PGO less
+ # effective:
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120881
+ # Enable -mfentry by default on x86-64 to put the profiling counter call
+ # before the prologue.
+ AC_ARG_ENABLE(x86-64-mfentry,
+   [AS_HELP_STRING([--enable-x86-64-mfentry],
+ 		  [enable -mfentry by default on x86-64 targets])],
+   [case "${enableval}" in
+    yes | no | auto)
+      enable_x86_64_mfentry=$enableval
+      ;;
+    *)
+      AC_MSG_ERROR(['$enable_x86_64_mfentry' is an invalid value for --enable-x86-64-mfentry.  Valid choices are 'yes', 'no' and 'auto'.])
+      ;;
+    esac],
+   [enable_x86_64_mfentry=auto])
+ 
+ if test x"$enable_x86_64_mfentry" = xauto; then
+   case "${target}" in
+   i?86-*-*gnu* | x86_64-*-*gnu*)
+     # Enable -mfentry by default with glibc on x86.
+     enable_x86_64_mfentry=yes
+     ;;
+   esac
+ fi
+ 
+ gif=`if test x$enable_x86_64_mfentry = xyes; then echo 1; else echo 0; fi`
+ AC_DEFINE_UNQUOTED(ENABLE_X86_64_MFENTRY, $gif,
+ [Define to enable -mfentry by default on x86-64.])
+ 
  # Check if the linker supports '-z now'
  ld_now_support=no
  AC_MSG_CHECKING(linker -z now option)
diff -Nrcpad gcc-16-20250713/gcc/cp/ChangeLog gcc-16-20250720/gcc/cp/ChangeLog
*** gcc-16-20250713/gcc/cp/ChangeLog	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/ChangeLog	Sun Jul 20 22:32:09 2025
***************
*** 1,3 ****
--- 1,64 ----
+ 2025-07-16  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 
+ 	* pt.cc (tsubst_omp_clause_decl): Use OMP_ITERATOR_DECL_P.
+ 	* semantics.cc (handle_omp_array_sections): Likewise.
+ 	(finish_omp_clauses): Likewise.
+ 
+ 2025-07-16  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* class.cc (add_method): Remove argument.
+ 	* cp-tree.h (maybe_version_functions): Ditto.
+ 	* decl.cc (decls_match): Ditto.
+ 	(maybe_version_functions): Ditto.
+ 
+ 2025-07-16  Jeremy Rifkin  <jeremy@rifkin.dev>
+ 
+ 	PR c/82134
+ 	* call.cc (build_call_a): Add suppress_warning
+ 	* cp-gimplify.cc (cp_gimplify_expr): Add suppress_warning
+ 
+ 2025-07-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/44677
+ 	* cp-gimplify.cc (cp_fold) [CLEANUP_POINT_EXPR]: Don't force rvalue.
+ 	[COMPOUND_EXPR]: Likewise.
+ 	* cvt.cc (convert_to_void): Call mark_exp_read later.
+ 	* expr.cc (mark_use): Turn off read_p for any void argument.
+ 	(mark_exp_read): Return early for void argument.
+ 
+ 2025-07-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120577
+ 	* constexpr.cc (cxx_eval_call_expression): Set
+ 	CONSTRUCTOR_NO_CLEARING on initial value for ctor.
+ 	(cxx_eval_component_reference): Make value-initialization
+ 	of an aggregate member explicit.
+ 
+ 2025-07-15  Jakub Jelinek  <jakub@redhat.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c/44677
+ 	* cp-gimplify.cc (cp_fold): Clear DECL_READ_P on lhs of MODIFY_EXPR
+ 	after cp_fold_rvalue if it wasn't set before.
+ 	* decl.cc (poplevel): Use OPT_Wunused_but_set_variable_
+ 	instead of OPT_Wunused_but_set_variable.
+ 	(finish_function): Use OPT_Wunused_but_set_parameter_
+ 	instead of OPT_Wunused_but_set_parameter.
+ 	* expr.cc (mark_use): Clear read_p for {PRE,POST}{IN,DE}CREMENT_EXPR
+ 	cast to void on {VAR,PARM}_DECL for
+ 	-Wunused-but-set-{parameter,variable}={2,3}.
+ 	(mark_exp_read): Handle {PRE,POST}{IN,DE}CREMENT_EXPR and don't handle
+ 	it when cast to void.
+ 	* module.cc (trees_in::fn_parms_fini): Remove unused but set variable
+ 	ix.
+ 	* semantics.cc (finish_unary_op_expr): Return early for
+ 	PRE{IN,DE}CREMENT_EXPR.
+ 	* typeck.cc (cp_build_unary_op): Clear DECL_READ_P
+ 	after mark_lvalue_use for -Wunused-but-set-{parameter,variable}={2,3}
+ 	on PRE{IN,DE}CREMENT_EXPR argument.
+ 	(cp_build_modify_expr): Clear DECL_READ_P after cp_build_binary_op
+ 	for -Wunused-but-set-{parameter,variable}=3.
+ 
  2025-07-11  Jakub Jelinek  <jakub@redhat.com>
  
  	PR c++/119064
diff -Nrcpad gcc-16-20250713/gcc/cp/call.cc gcc-16-20250720/gcc/cp/call.cc
*** gcc-16-20250713/gcc/cp/call.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/call.cc	Sun Jul 20 22:32:09 2025
*************** build_call_a (tree function, int n, tree
*** 412,417 ****
--- 412,418 ----
  	      /* We're disconnecting the initializer from its target,
  		 don't create a temporary.  */
  	      arg = TARGET_EXPR_INITIAL (arg);
+ 	    suppress_warning (arg, OPT_Wunused_result);
  	    tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (arg));
  	    arg = build2 (COMPOUND_EXPR, TREE_TYPE (t), arg, t);
  	    CALL_EXPR_ARG (function, i) = arg;
diff -Nrcpad gcc-16-20250713/gcc/cp/class.cc gcc-16-20250720/gcc/cp/class.cc
*** gcc-16-20250713/gcc/cp/class.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/class.cc	Sun Jul 20 22:32:09 2025
*************** add_method (tree type, tree method, bool
*** 1407,1413 ****
        /* If these are versions of the same function, process and
  	 move on.  */
        if (TREE_CODE (fn) == FUNCTION_DECL
! 	  && maybe_version_functions (method, fn, true))
  	continue;
  
        if (DECL_INHERITED_CTOR (method))
--- 1407,1413 ----
        /* If these are versions of the same function, process and
  	 move on.  */
        if (TREE_CODE (fn) == FUNCTION_DECL
! 	  && maybe_version_functions (method, fn))
  	continue;
  
        if (DECL_INHERITED_CTOR (method))
diff -Nrcpad gcc-16-20250713/gcc/cp/constexpr.cc gcc-16-20250720/gcc/cp/constexpr.cc
*** gcc-16-20250713/gcc/cp/constexpr.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/constexpr.cc	Sun Jul 20 22:32:09 2025
*************** cxx_eval_call_expression (const constexp
*** 4201,4210 ****
  	      && TREE_CODE (new_obj) == COMPONENT_REF
  	      && TREE_CODE (TREE_TYPE (TREE_OPERAND (new_obj, 0))) == UNION_TYPE)
  	    {
  	      tree activate = build2 (INIT_EXPR, TREE_TYPE (new_obj),
! 				      new_obj,
! 				      build_constructor (TREE_TYPE (new_obj),
! 							 NULL));
  	      cxx_eval_constant_expression (ctx, activate,
  					    lval, non_constant_p, overflow_p,
  					    jump_target);
--- 4201,4210 ----
  	      && TREE_CODE (new_obj) == COMPONENT_REF
  	      && TREE_CODE (TREE_TYPE (TREE_OPERAND (new_obj, 0))) == UNION_TYPE)
  	    {
+ 	      tree ctor = build_constructor (TREE_TYPE (new_obj), NULL);
+ 	      CONSTRUCTOR_NO_CLEARING (ctor) = true;
  	      tree activate = build2 (INIT_EXPR, TREE_TYPE (new_obj),
! 				      new_obj, ctor);
  	      cxx_eval_constant_expression (ctx, activate,
  					    lval, non_constant_p, overflow_p,
  					    jump_target);
*************** cxx_eval_component_reference (const cons
*** 5793,5798 ****
--- 5793,5810 ----
      }
  
    /* If there's no explicit init for this field, it's value-initialized.  */
+ 
+   if (AGGREGATE_TYPE_P (TREE_TYPE (t)))
+     {
+       /* As in cxx_eval_store_expression, insert an empty CONSTRUCTOR
+ 	 and copy the flags.  */
+       constructor_elt *e = get_or_insert_ctor_field (whole, part);
+       e->value = value = build_constructor (TREE_TYPE (part), NULL);
+       CONSTRUCTOR_ZERO_PADDING_BITS (value)
+ 	= CONSTRUCTOR_ZERO_PADDING_BITS (whole);
+       return value;
+     }
+ 
    value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
    return cxx_eval_constant_expression (ctx, value,
  				       lval,
diff -Nrcpad gcc-16-20250713/gcc/cp/cp-gimplify.cc gcc-16-20250720/gcc/cp/cp-gimplify.cc
*** gcc-16-20250713/gcc/cp/cp-gimplify.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/cp-gimplify.cc	Sun Jul 20 22:32:09 2025
*************** cp_gimplify_expr (tree *expr_p, gimple_s
*** 690,695 ****
--- 690,696 ----
  		    && (REFERENCE_CLASS_P (op1) || DECL_P (op1)))
  		  op1 = build_fold_addr_expr (op1);
  
+ 		suppress_warning (op1, OPT_Wunused_result);
  		gimplify_and_add (op1, pre_p);
  	      }
  	    gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p,
*************** cp_fold (tree x, fold_flags_t flags)
*** 3028,3034 ****
      case CLEANUP_POINT_EXPR:
        /* Strip CLEANUP_POINT_EXPR if the expression doesn't have side
  	 effects.  */
!       r = cp_fold_rvalue (TREE_OPERAND (x, 0), flags);
        if (!TREE_SIDE_EFFECTS (r))
  	x = r;
        break;
--- 3029,3035 ----
      case CLEANUP_POINT_EXPR:
        /* Strip CLEANUP_POINT_EXPR if the expression doesn't have side
  	 effects.  */
!       r = cp_fold (TREE_OPERAND (x, 0), flags);
        if (!TREE_SIDE_EFFECTS (r))
  	x = r;
        break;
*************** cp_fold (tree x, fold_flags_t flags)
*** 3217,3223 ****
  
        loc = EXPR_LOCATION (x);
        op0 = cp_fold_maybe_rvalue (TREE_OPERAND (x, 0), rval_ops, flags);
!       op1 = cp_fold_rvalue (TREE_OPERAND (x, 1), flags);
  
        /* decltype(nullptr) has only one value, so optimize away all comparisons
  	 with that type right away, keeping them in the IL causes troubles for
--- 3218,3233 ----
  
        loc = EXPR_LOCATION (x);
        op0 = cp_fold_maybe_rvalue (TREE_OPERAND (x, 0), rval_ops, flags);
!       bool clear_decl_read;
!       clear_decl_read = false;
!       if (code == MODIFY_EXPR
! 	  && (VAR_P (op0) || TREE_CODE (op0) == PARM_DECL)
! 	  && !DECL_READ_P (op0))
! 	clear_decl_read = true;
!       op1 = cp_fold_maybe_rvalue (TREE_OPERAND (x, 1),
! 				  code != COMPOUND_EXPR, flags);
!       if (clear_decl_read)
! 	DECL_READ_P (op0) = 0;
  
        /* decltype(nullptr) has only one value, so optimize away all comparisons
  	 with that type right away, keeping them in the IL causes troubles for
diff -Nrcpad gcc-16-20250713/gcc/cp/cp-tree.h gcc-16-20250720/gcc/cp/cp-tree.h
*** gcc-16-20250713/gcc/cp/cp-tree.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/cp-tree.h	Sun Jul 20 22:32:09 2025
*************** extern void determine_local_discriminato
*** 7232,7238 ****
  extern bool member_like_constrained_friend_p	(tree);
  extern bool fns_correspond			(tree, tree);
  extern int decls_match				(tree, tree, bool = true);
! extern bool maybe_version_functions		(tree, tree, bool);
  extern bool validate_constexpr_redeclaration	(tree, tree);
  extern bool merge_default_template_args		(tree, tree, bool);
  extern tree duplicate_decls			(tree, tree,
--- 7232,7238 ----
  extern bool member_like_constrained_friend_p	(tree);
  extern bool fns_correspond			(tree, tree);
  extern int decls_match				(tree, tree, bool = true);
! extern bool maybe_version_functions		(tree, tree);
  extern bool validate_constexpr_redeclaration	(tree, tree);
  extern bool merge_default_template_args		(tree, tree, bool);
  extern tree duplicate_decls			(tree, tree,
diff -Nrcpad gcc-16-20250713/gcc/cp/cvt.cc gcc-16-20250720/gcc/cp/cvt.cc
*** gcc-16-20250713/gcc/cp/cvt.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/cvt.cc	Sun Jul 20 22:32:09 2025
*************** convert_to_void (tree expr, impl_conv_vo
*** 1186,1198 ****
  
    expr = maybe_undo_parenthesized_ref (expr);
  
-   expr = mark_discarded_use (expr);
-   if (implicit == ICV_CAST)
-     /* An explicit cast to void avoids all -Wunused-but-set* warnings.  */
-     mark_exp_read (expr);
- 
-   if (!TREE_TYPE (expr))
-     return expr;
    if (invalid_nonstatic_memfn_p (loc, expr, complain))
      return error_mark_node;
    if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
--- 1186,1191 ----
*************** convert_to_void (tree expr, impl_conv_vo
*** 1209,1214 ****
--- 1202,1213 ----
  
    if (VOID_TYPE_P (TREE_TYPE (expr)))
      return expr;
+ 
+   expr = mark_discarded_use (expr);
+   if (implicit == ICV_CAST)
+     /* An explicit cast to void avoids all -Wunused-but-set* warnings.  */
+     mark_exp_read (expr);
+ 
    switch (TREE_CODE (expr))
      {
      case COND_EXPR:
diff -Nrcpad gcc-16-20250713/gcc/cp/decl.cc gcc-16-20250720/gcc/cp/decl.cc
*** gcc-16-20250713/gcc/cp/decl.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/decl.cc	Sun Jul 20 22:32:09 2025
*************** poplevel (int keep, int reverse, int fun
*** 747,757 ****
  	      {
  		if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
  		  warning_at (DECL_SOURCE_LOCATION (decl),
! 			      OPT_Wunused_but_set_variable, "structured "
  			      "binding declaration set but not used");
  		else
  		  warning_at (DECL_SOURCE_LOCATION (decl),
! 			      OPT_Wunused_but_set_variable,
  			      "variable %qD set but not used", decl);
  		unused_but_set_errorcount = errorcount;
  	      }
--- 747,757 ----
  	      {
  		if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
  		  warning_at (DECL_SOURCE_LOCATION (decl),
! 			      OPT_Wunused_but_set_variable_, "structured "
  			      "binding declaration set but not used");
  		else
  		  warning_at (DECL_SOURCE_LOCATION (decl),
! 			      OPT_Wunused_but_set_variable_,
  			      "variable %qD set but not used", decl);
  		unused_but_set_errorcount = errorcount;
  	      }
*************** decls_match (tree newdecl, tree olddecl,
*** 1214,1222 ****
  	  && targetm.target_option.function_versions (newdecl, olddecl))
  	{
  	  if (record_versions)
! 	    maybe_version_functions (newdecl, olddecl,
! 				     (!DECL_FUNCTION_VERSIONED (newdecl)
! 				      || !DECL_FUNCTION_VERSIONED (olddecl)));
  	  return 0;
  	}
      }
--- 1214,1220 ----
  	  && targetm.target_option.function_versions (newdecl, olddecl))
  	{
  	  if (record_versions)
! 	    maybe_version_functions (newdecl, olddecl);
  	  return 0;
  	}
      }
*************** maybe_mark_function_versioned (tree decl
*** 1283,1293 ****
  }
  
  /* NEWDECL and OLDDECL have identical signatures.  If they are
!    different versions adjust them and return true.
!    If RECORD is set to true, record function versions.  */
  
  bool
! maybe_version_functions (tree newdecl, tree olddecl, bool record)
  {
    if (!targetm.target_option.function_versions (newdecl, olddecl))
      return false;
--- 1281,1291 ----
  }
  
  /* NEWDECL and OLDDECL have identical signatures.  If they are
!    different versions adjust them, record function versions, and return
!    true.  */
  
  bool
! maybe_version_functions (tree newdecl, tree olddecl)
  {
    if (!targetm.target_option.function_versions (newdecl, olddecl))
      return false;
*************** maybe_version_functions (tree newdecl, t
*** 1310,1325 ****
        maybe_mark_function_versioned (newdecl);
      }
  
!   if (record)
!     {
!       /* Add the new version to the function version structure.  */
!       cgraph_node *fn_node = cgraph_node::get_create (olddecl);
!       cgraph_function_version_info *fn_v = fn_node->function_version ();
!       if (!fn_v)
! 	fn_v = fn_node->insert_new_function_version ();
  
!       cgraph_node::add_function_version (fn_v, newdecl);
!     }
  
    return true;
  }
--- 1308,1320 ----
        maybe_mark_function_versioned (newdecl);
      }
  
!   /* Add the new version to the function version structure.  */
!   cgraph_node *fn_node = cgraph_node::get_create (olddecl);
!   cgraph_function_version_info *fn_v = fn_node->function_version ();
!   if (!fn_v)
!     fn_v = fn_node->insert_new_function_version ();
  
!   cgraph_node::add_function_version (fn_v, newdecl);
  
    return true;
  }
*************** finish_function (bool inline_p)
*** 19496,19509 ****
  	    && !DECL_READ_P (decl)
  	    && DECL_NAME (decl)
  	    && !DECL_ARTIFICIAL (decl)
! 	    && !warning_suppressed_p (decl,OPT_Wunused_but_set_parameter)
  	    && !DECL_IN_SYSTEM_HEADER (decl)
  	    && TREE_TYPE (decl) != error_mark_node
  	    && !TYPE_REF_P (TREE_TYPE (decl))
  	    && (!CLASS_TYPE_P (TREE_TYPE (decl))
  	        || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
  	  warning_at (DECL_SOURCE_LOCATION (decl),
! 		      OPT_Wunused_but_set_parameter,
  		      "parameter %qD set but not used", decl);
        unused_but_set_errorcount = errorcount;
      }
--- 19491,19504 ----
  	    && !DECL_READ_P (decl)
  	    && DECL_NAME (decl)
  	    && !DECL_ARTIFICIAL (decl)
! 	    && !warning_suppressed_p (decl, OPT_Wunused_but_set_parameter_)
  	    && !DECL_IN_SYSTEM_HEADER (decl)
  	    && TREE_TYPE (decl) != error_mark_node
  	    && !TYPE_REF_P (TREE_TYPE (decl))
  	    && (!CLASS_TYPE_P (TREE_TYPE (decl))
  	        || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
  	  warning_at (DECL_SOURCE_LOCATION (decl),
! 		      OPT_Wunused_but_set_parameter_,
  		      "parameter %qD set but not used", decl);
        unused_but_set_errorcount = errorcount;
      }
diff -Nrcpad gcc-16-20250713/gcc/cp/expr.cc gcc-16-20250720/gcc/cp/expr.cc
*** gcc-16-20250713/gcc/cp/expr.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/expr.cc	Sun Jul 20 22:32:09 2025
*************** mark_use (tree expr, bool rvalue_p, bool
*** 102,107 ****
--- 102,110 ----
    if (reject_builtin && reject_gcc_builtin (expr, loc))
      return error_mark_node;
  
+   if (TREE_TYPE (expr) && VOID_TYPE_P (TREE_TYPE (expr)))
+     read_p = false;
+ 
    if (read_p)
      mark_exp_read (expr);
  
*************** mark_use (tree expr, bool rvalue_p, bool
*** 211,217 ****
  	    }
  	  return expr;
  	}
!       gcc_fallthrough();
      CASE_CONVERT:
        recurse_op[0] = true;
        break;
--- 214,220 ----
  	    }
  	  return expr;
  	}
!       gcc_fallthrough ();
      CASE_CONVERT:
        recurse_op[0] = true;
        break;
*************** mark_exp_read (tree exp)
*** 352,357 ****
--- 355,363 ----
    if (exp == NULL)
      return;
  
+   if (TREE_TYPE (exp) && VOID_TYPE_P (TREE_TYPE (exp)))
+     return;
+ 
    switch (TREE_CODE (exp))
      {
      case VAR_DECL:
*************** mark_exp_read (tree exp)
*** 361,376 ****
      case PARM_DECL:
        DECL_READ_P (exp) = 1;
        break;
      case ARRAY_REF:
      case COMPONENT_REF:
      case MODIFY_EXPR:
      case REALPART_EXPR:
      case IMAGPART_EXPR:
-     CASE_CONVERT:
      case ADDR_EXPR:
      case INDIRECT_REF:
      case FLOAT_EXPR:
      case VIEW_CONVERT_EXPR:
        mark_exp_read (TREE_OPERAND (exp, 0));
        break;
      case COMPOUND_EXPR:
--- 367,386 ----
      case PARM_DECL:
        DECL_READ_P (exp) = 1;
        break;
+     CASE_CONVERT:
      case ARRAY_REF:
      case COMPONENT_REF:
      case MODIFY_EXPR:
      case REALPART_EXPR:
      case IMAGPART_EXPR:
      case ADDR_EXPR:
      case INDIRECT_REF:
      case FLOAT_EXPR:
      case VIEW_CONVERT_EXPR:
+     case PREINCREMENT_EXPR:
+     case PREDECREMENT_EXPR:
+     case POSTINCREMENT_EXPR:
+     case POSTDECREMENT_EXPR:
        mark_exp_read (TREE_OPERAND (exp, 0));
        break;
      case COMPOUND_EXPR:
diff -Nrcpad gcc-16-20250713/gcc/cp/module.cc gcc-16-20250720/gcc/cp/module.cc
*** gcc-16-20250713/gcc/cp/module.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/module.cc	Sun Jul 20 22:32:09 2025
*************** trees_in::fn_parms_fini (int tag, tree f
*** 11124,11131 ****
  {
    tree existing_parm = existing ? DECL_ARGUMENTS (existing) : NULL_TREE;
    tree parms = DECL_ARGUMENTS (fn);
!   unsigned ix = 0;
!   for (tree parm = parms; parm; parm = DECL_CHAIN (parm), ix++)
      {
        if (existing_parm)
  	{
--- 11124,11130 ----
  {
    tree existing_parm = existing ? DECL_ARGUMENTS (existing) : NULL_TREE;
    tree parms = DECL_ARGUMENTS (fn);
!   for (tree parm = parms; parm; parm = DECL_CHAIN (parm))
      {
        if (existing_parm)
  	{
diff -Nrcpad gcc-16-20250713/gcc/cp/pt.cc gcc-16-20250720/gcc/cp/pt.cc
*** gcc-16-20250713/gcc/cp/pt.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/pt.cc	Sun Jul 20 22:32:09 2025
*************** tsubst_omp_clause_decl (tree decl, tree
*** 17986,17994 ****
      return decl;
  
    /* Handle OpenMP iterators.  */
!   if (TREE_CODE (decl) == TREE_LIST
!       && TREE_PURPOSE (decl)
!       && TREE_CODE (TREE_PURPOSE (decl)) == TREE_VEC)
      {
        tree ret;
        if (iterator_cache[0] == TREE_PURPOSE (decl))
--- 17986,17992 ----
      return decl;
  
    /* Handle OpenMP iterators.  */
!   if (OMP_ITERATOR_DECL_P (decl))
      {
        tree ret;
        if (iterator_cache[0] == TREE_PURPOSE (decl))
diff -Nrcpad gcc-16-20250713/gcc/cp/semantics.cc gcc-16-20250720/gcc/cp/semantics.cc
*** gcc-16-20250713/gcc/cp/semantics.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/semantics.cc	Sun Jul 20 22:32:09 2025
*************** finish_unary_op_expr (location_t op_loc,
*** 3741,3746 ****
--- 3741,3751 ----
    if (!(complain & tf_warning))
      return result;
  
+   /* These will never fold into a constant, so no need to check for
+      overflow for them.  */
+   if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
+     return result;
+ 
    tree result_ovl = result;
    tree expr_ovl = expr;
  
*************** handle_omp_array_sections (tree &c, enum
*** 6297,6305 ****
    tree *tp = &OMP_CLAUSE_DECL (c);
    if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
         || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_AFFINITY)
!       && TREE_CODE (*tp) == TREE_LIST
!       && TREE_PURPOSE (*tp)
!       && TREE_CODE (TREE_PURPOSE (*tp)) == TREE_VEC)
      tp = &TREE_VALUE (*tp);
    tree first = handle_omp_array_sections_1 (c, *tp, types,
  					    maybe_zero_len, first_non_one,
--- 6302,6308 ----
    tree *tp = &OMP_CLAUSE_DECL (c);
    if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
         || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_AFFINITY)
!       && OMP_ITERATOR_DECL_P (*tp))
      tp = &TREE_VALUE (*tp);
    tree first = handle_omp_array_sections_1 (c, *tp, types,
  					    maybe_zero_len, first_non_one,
*************** finish_omp_clauses (tree clauses, enum c
*** 8819,8827 ****
  	  /* FALLTHRU */
  	case OMP_CLAUSE_AFFINITY:
  	  t = OMP_CLAUSE_DECL (c);
! 	  if (TREE_CODE (t) == TREE_LIST
! 	      && TREE_PURPOSE (t)
! 	      && TREE_CODE (TREE_PURPOSE (t)) == TREE_VEC)
  	    {
  	      if (TREE_PURPOSE (t) != last_iterators)
  		last_iterators_remove
--- 8822,8828 ----
  	  /* FALLTHRU */
  	case OMP_CLAUSE_AFFINITY:
  	  t = OMP_CLAUSE_DECL (c);
! 	  if (OMP_ITERATOR_DECL_P (t))
  	    {
  	      if (TREE_PURPOSE (t) != last_iterators)
  		last_iterators_remove
diff -Nrcpad gcc-16-20250713/gcc/cp/typeck.cc gcc-16-20250720/gcc/cp/typeck.cc
*** gcc-16-20250713/gcc/cp/typeck.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/cp/typeck.cc	Sun Jul 20 22:32:09 2025
*************** cp_build_unary_op (enum tree_code code,
*** 7680,7686 ****
        if (val != 0)
  	goto return_build_unary_op;
  
!       arg = mark_lvalue_use (arg);
  
        /* Increment or decrement the real part of the value,
  	 and don't change the imaginary part.  */
--- 7680,7697 ----
        if (val != 0)
  	goto return_build_unary_op;
  
!       tree stripped_arg;
!       stripped_arg = tree_strip_any_location_wrapper (arg);
!       if ((VAR_P (stripped_arg) || TREE_CODE (stripped_arg) == PARM_DECL)
! 	  && !DECL_READ_P (stripped_arg)
! 	  && (VAR_P (stripped_arg) ? warn_unused_but_set_variable
! 				   : warn_unused_but_set_parameter) > 1)
! 	{
! 	  arg = mark_lvalue_use (arg);
! 	  DECL_READ_P (stripped_arg) = 0;
! 	}
!       else
! 	arg = mark_lvalue_use (arg);
  
        /* Increment or decrement the real part of the value,
  	 and don't change the imaginary part.  */
*************** cp_build_modify_expr (location_t loc, tr
*** 9796,9802 ****
--- 9807,9828 ----
  	  {
  	    auto_diagnostic_group d;
  	    rhs = stabilize_expr (rhs, &init);
+ 	    bool clear_decl_read = false;
+ 	    tree stripped_lhs = tree_strip_any_location_wrapper (lhs);
+ 	    if ((VAR_P (stripped_lhs) || TREE_CODE (stripped_lhs) == PARM_DECL)
+ 		&& !DECL_READ_P (stripped_lhs)
+ 		&& (VAR_P (stripped_lhs) ? warn_unused_but_set_variable
+ 					 : warn_unused_but_set_parameter) > 2
+ 		&& !CLASS_TYPE_P (TREE_TYPE (lhs))
+ 		&& !CLASS_TYPE_P (TREE_TYPE (rhs)))
+ 	      {
+ 		mark_exp_read (rhs);
+ 		if (!DECL_READ_P (stripped_lhs))
+ 		  clear_decl_read = true;
+ 	      }
  	    newrhs = cp_build_binary_op (loc, modifycode, lhs, rhs, complain);
+ 	    if (clear_decl_read)
+ 	      DECL_READ_P (stripped_lhs) = 0;
  	    if (newrhs == error_mark_node)
  	      {
  		if (complain & tf_error)
diff -Nrcpad gcc-16-20250713/gcc/diagnostic-digraphs.h gcc-16-20250720/gcc/diagnostic-digraphs.h
*** gcc-16-20250713/gcc/diagnostic-digraphs.h	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/diagnostic-digraphs.h	Sun Jul 20 22:32:09 2025
*************** class digraph : public object
*** 109,114 ****
--- 109,119 ----
      else
        m_description = nullptr;
    }
+   void
+   set_description (std::string desc)
+   {
+     m_description = std::make_unique<std::string> (std::move (desc));
+   }
  
    node *
    get_node_by_id (const char *id) const
*************** class node : public object
*** 240,245 ****
--- 245,255 ----
      else
        m_label = nullptr;
    }
+   void
+   set_label (std::string label)
+   {
+     m_label = std::make_unique<std::string> (std::move (label));
+   }
  
    size_t
    get_num_children () const { return m_children.size (); }
diff -Nrcpad gcc-16-20250713/gcc/diagnostic-spec.cc gcc-16-20250720/gcc/diagnostic-spec.cc
*** gcc-16-20250713/gcc/diagnostic-spec.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/diagnostic-spec.cc	Sun Jul 20 22:32:09 2025
*************** nowarn_spec_t::nowarn_spec_t (opt_code o
*** 72,80 ****
      case OPT_Wstrict_aliasing:
      case OPT_Wunused:
      case OPT_Wunused_function:
!     case OPT_Wunused_but_set_variable:
      case OPT_Wunused_variable:
!     case OPT_Wunused_but_set_parameter:
        m_bits = NW_LEXICAL;
        break;
  
--- 72,80 ----
      case OPT_Wstrict_aliasing:
      case OPT_Wunused:
      case OPT_Wunused_function:
!     case OPT_Wunused_but_set_variable_:
      case OPT_Wunused_variable:
!     case OPT_Wunused_but_set_parameter_:
        m_bits = NW_LEXICAL;
        break;
  
diff -Nrcpad gcc-16-20250713/gcc/diagnostic-state-to-dot.cc gcc-16-20250720/gcc/diagnostic-state-to-dot.cc
*** gcc-16-20250713/gcc/diagnostic-state-to-dot.cc	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/diagnostic-state-to-dot.cc	Sun Jul 20 22:32:09 2025
*************** class state_diagram : public dot::graph
*** 78,86 ****
  public:
    state_diagram (const diagnostics::digraphs::digraph &input_state_graph,
  		 const logical_location_manager &logical_loc_mgr)
!   : m_logical_loc_mgr (logical_loc_mgr),
!     // m_next_id (0),
!     m_show_tags (false)
    {
      // "node [shape=plaintext]\n"
      {
--- 78,84 ----
  public:
    state_diagram (const diagnostics::digraphs::digraph &input_state_graph,
  		 const logical_location_manager &logical_loc_mgr)
!   : m_logical_loc_mgr (logical_loc_mgr)
    {
      // "node [shape=plaintext]\n"
      {
*************** private:
*** 541,548 ****
  
    std::map<diagnostics::digraphs::node *, dot::node_id> m_src_node_to_port_id;
    std::map<diagnostics::digraphs::node *, dot::node_id> m_dst_node_to_port_id;
- 
-   bool m_show_tags;
  };
  
  std::unique_ptr<dot::graph>
--- 539,544 ----
diff -Nrcpad gcc-16-20250713/gcc/doc/install.texi gcc-16-20250720/gcc/doc/install.texi
*** gcc-16-20250713/gcc/doc/install.texi	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/install.texi	Sun Jul 20 22:32:09 2025
*************** target binutils supports @code{Intel CET
*** 2667,2672 ****
--- 2667,2683 ----
  otherwise.  In this case, the target libraries are configured to get
  additional @option{-fcf-protection} option.
  
+ @item --enable-x86-64-mfentry
+ @itemx --disable-x86-64-mfentry
+ Enable @option {-mfentry} by default on x86-64 to put the profiling
+ counter call, @code{__fentry__}, before the prologue so that @option{-pg}
+ can be used with @option{-fshrink-wrap} which is enabled at @option{-O1}.
+ This configure option is 64-bit only because @code{__fentry__} doesn't
+ support PIC in 32-bit mode.
+ 
+ @option{--enable-x86-64-mfentry=auto} is default.  @option{-mfentry} is
+ enabled on Linux/x86-64 by default.
+ 
  @item --with-riscv-attribute=@samp{yes}, @samp{no} or @samp{default}
  Generate RISC-V attribute by default, in order to record extra build
  information in object.
diff -Nrcpad gcc-16-20250713/gcc/doc/invoke.texi gcc-16-20250720/gcc/doc/invoke.texi
*** gcc-16-20250713/gcc/doc/invoke.texi	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/invoke.texi	Sun Jul 20 22:32:09 2025
*************** Objective-C and Objective-C++ Dialects}.
*** 433,439 ****
  -Wunsuffixed-float-constants
  -Wunterminated-string-initialization
  -Wunused
! -Wunused-but-set-parameter  -Wunused-but-set-variable
  -Wunused-const-variable  -Wunused-const-variable=@var{n}
  -Wunused-function  -Wunused-label  -Wunused-local-typedefs
  -Wunused-macros
--- 433,440 ----
  -Wunsuffixed-float-constants
  -Wunterminated-string-initialization
  -Wunused
! -Wunused-but-set-parameter  -Wunused-but-set-parameter=@var{n}
! -Wunused-but-set-variable  -Wunused-but-set-variable=@var{n}
  -Wunused-const-variable  -Wunused-const-variable=@var{n}
  -Wunused-function  -Wunused-label  -Wunused-local-typedefs
  -Wunused-macros
*************** statement.
*** 7921,7947 ****
  @opindex Wunused-but-set-parameter
  @opindex Wno-unused-but-set-parameter
  @item -Wunused-but-set-parameter
  Warn whenever a function parameter is assigned to, but otherwise unused
  (aside from its declaration).
  
  To suppress this warning use the @code{unused} attribute
  (@pxref{Variable Attributes}).
  
! This warning is also enabled by @option{-Wunused} together with
! @option{-Wextra}.
  
  @opindex Wunused-but-set-variable
  @opindex Wno-unused-but-set-variable
  @item -Wunused-but-set-variable
  Warn whenever a local variable is assigned to, but otherwise unused
  (aside from its declaration).
! This warning is enabled by @option{-Wall}.
  
  To suppress this warning use the @code{unused} attribute
  (@pxref{Variable Attributes}).
  
! This warning is also enabled by @option{-Wunused}, which is enabled
! by @option{-Wall}.
  
  @opindex Wunused-function
  @opindex Wno-unused-function
--- 7922,8010 ----
  @opindex Wunused-but-set-parameter
  @opindex Wno-unused-but-set-parameter
  @item -Wunused-but-set-parameter
+ @option{-Wunused-but-set-parameter} is the same as
+ @option{-Wunused-but-set-parameter=3} and
+ @option{-Wno-unused-but-set-parameter} is the same as
+ @option{-Wunused-but-set-parameter=0}.
+ 
+ @opindex Wunused-but-set-parameter=
+ @item -Wunused-but-set-parameter=@var{n}
  Warn whenever a function parameter is assigned to, but otherwise unused
  (aside from its declaration).
  
  To suppress this warning use the @code{unused} attribute
  (@pxref{Variable Attributes}).
  
! @option{-Wunused-but-set-parameter=0} disables the warning.
! With @option{-Wunused-but-set-parameter=1} all uses except initialization
! and left hand side of assignment which is not further used disable the
! warning.
! With @option{-Wunused-but-set-parameter=2} additionally uses of parameter
! in @code{++} and @code{--} operators don't count as uses.
! And finally with @option{-Wunused-but-set-parameter=3} additionally
! uses in @var{parm} @code{@var{@@}=} @var{rhs} outside of @var{rhs} don't
! count as uses.  See @option{-Wunused-but-set-variable=@var{n}} option for
! examples.
! 
! This @option{-Wunused-but-set-parameter=3} warning is also enabled by
! @option{-Wunused} together with @option{-Wextra}.
  
  @opindex Wunused-but-set-variable
  @opindex Wno-unused-but-set-variable
  @item -Wunused-but-set-variable
+ @option{-Wunused-but-set-variable} is the same as
+ @option{-Wunused-but-set-variable=3} and
+ @option{-Wno-unused-but-set-variable} is the same as
+ @option{-Wunused-but-set-variable=0}.
+ 
+ @opindex Wunused-but-set-variable=
+ @item -Wunused-but-set-variable=@var{n}
  Warn whenever a local variable is assigned to, but otherwise unused
  (aside from its declaration).
! This @option{-Wunused-but-set-variable=3} warning is enabled by @option{-Wall}.
  
  To suppress this warning use the @code{unused} attribute
  (@pxref{Variable Attributes}).
  
! @option{-Wunused-but-set-variable=0} disables the warning.
! With @option{-Wunused-but-set-variable=1} all uses except initialization
! and left hand side of assignment which is not further used disable the
! warning.
! With @option{-Wunused-but-set-variable=2} additionally uses of variable
! in @code{++} and @code{--} operators don't count as uses.
! And finally with @option{-Wunused-but-set-variable=3} additionally
! uses in @var{parm} @code{@var{@@}=} @var{rhs} outside of @var{rhs} don't
! count as uses.
! 
! This @option{-Wunused-but-set-variable=3} warning is also enabled by
! @option{-Wunused}, which is enabled by @option{-Wall}.
! 
! @smallexample
! void foo (void)
! @{
!   int a = 1; // @option{-Wunused-variable} warning
!   int b = 0; // Warning for @var{n} >= 1
!   b = 1; b = 2;
!   int c = 0; // Warning for @var{n} >= 2
!   ++c; c--; --c; c++;
!   int d = 0; // Warning for @var{n} >= 3
!   d += 4;
!   int e = 0; // No warning, cast to void
!   (void) e;
!   int f = 0; // No warning, f used
!   int g = f = 5;
!   (void) g;
!   int h = 0; // No warning, preincrement used
!   int i = ++h;
!   (void) i;
!   int j = 0; // No warning, postdecrement used
!   int k = j--;
!   (void) k;
!   int l = 0; // No warning, l used
!   int m = l |= 2;
!   (void) m;
! @}
! @end smallexample
  
  @opindex Wunused-function
  @opindex Wno-unused-function
*************** Intel Panther Lake CPU with 64-bit exten
*** 34892,34900 ****
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
  XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
  MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
! VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI, UINTR, AVXIFMA,
! AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4 and
! PREFETCHI instruction set support.
  
  @item sapphirerapids
  @itemx emeraldrapids
--- 34955,34963 ----
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
  XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
  MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
! VAES, VPCLMULQDQ, SERIALIZE, HRESET, AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8,
! AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4 and PREFETCHI
! instruction set support.
  
  @item sapphirerapids
  @itemx emeraldrapids
*************** Intel Clearwater Forest CPU with 64-bit
*** 34997,35005 ****
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE,
  XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB,
  MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
! LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI,
! ENQCMD, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16,
! SHA512, SM3, SM4, USER_MSR and PREFETCHI instruction set support.
  
  @item k6
  AMD K6 CPU with MMX instruction set support.
--- 35060,35068 ----
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE,
  XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB,
  MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
! LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, AVX-VNNI, ENQCMD,
! UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
! SM3, SM4, USER_MSR and PREFETCHI instruction set support.
  
  @item k6
  AMD K6 CPU with MMX instruction set support.
diff -Nrcpad gcc-16-20250713/gcc/doc/libgdiagnostics/topics/compatibility.rst gcc-16-20250720/gcc/doc/libgdiagnostics/topics/compatibility.rst
*** gcc-16-20250713/gcc/doc/libgdiagnostics/topics/compatibility.rst	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/libgdiagnostics/topics/compatibility.rst	Sun Jul 20 22:32:09 2025
*************** supporting command-line options and SARI
*** 193,198 ****
--- 193,199 ----
  
  ``LIBGDIAGNOSTICS_ABI_3``
  -------------------------
+ 
  ``LIBGDIAGNOSTICS_ABI_3`` covers the addition of these functions for
  working with directed graphs:
  
*************** working with directed graphs:
*** 219,221 ****
--- 220,264 ----
    * :func:`diagnostic_node_set_location`
  
    * :func:`diagnostic_node_set_logical_location`
+ 
+ .. _LIBGDIAGNOSTICS_ABI_4:
+ 
+ ``LIBGDIAGNOSTICS_ABI_4``
+ -------------------------
+ 
+ ``LIBGDIAGNOSTICS_ABI_4`` covers the addition of these functions for
+ working with :type:`diagnostic_message_buffer`.
+ 
+   * :func:`diagnostic_message_buffer_new`
+ 
+   * :func:`diagnostic_message_buffer_release`
+ 
+   * :func:`diagnostic_message_buffer_append_str`
+ 
+   * :func:`diagnostic_message_buffer_append_text`
+ 
+   * :func:`diagnostic_message_buffer_append_byte`
+ 
+   * :func:`diagnostic_message_buffer_append_printf`
+ 
+   * :func:`diagnostic_message_buffer_append_event_id`
+ 
+   * :func:`diagnostic_message_buffer_begin_url`
+ 
+   * :func:`diagnostic_message_buffer_end_url`
+ 
+   * :func:`diagnostic_message_buffer_begin_quote`
+ 
+   * :func:`diagnostic_message_buffer_end_quote`
+ 
+   * :func:`diagnostic_message_buffer_begin_color`
+ 
+   * :func:`diagnostic_message_buffer_end_color`
+ 
+   * :func:`diagnostic_message_buffer_dump`
+ 
+   * :func:`diagnostic_finish_via_msg_buf`
+ 
+   * :func:`diagnostic_add_location_with_label_via_msg_buf`
+ 
+   * :func:`diagnostic_execution_path_add_event_via_msg_buf`
diff -Nrcpad gcc-16-20250713/gcc/doc/libgdiagnostics/topics/diagnostics.rst gcc-16-20250720/gcc/doc/libgdiagnostics/topics/diagnostics.rst
*** gcc-16-20250713/gcc/doc/libgdiagnostics/topics/diagnostics.rst	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/libgdiagnostics/topics/diagnostics.rst	Sun Jul 20 22:32:09 2025
*************** Diagnostics are
*** 105,110 ****
--- 105,128 ----
  
     All three parameters must be non-NULL.
  
+ .. function:: void diagnostic_finish_via_msg_buf (diagnostic *diag, \
+ 			       diagnostic_message_buffer *msg_buf)
+ 
+    This is equivalent to :func:`diagnostic_finish`, but using a message
+    buffer rather than a format string and variadic arguments.
+ 
+    ``diag`` and ``msg_buf`` must both be non-NULL.
+ 
+    Calling this function transfers ownership of ``msg_buf`` to the
+    diagnostic - do not call :func:`diagnostic_message_buffer_release` on
+    it.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_3`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
  
  Diagnostic groups
  *****************
diff -Nrcpad gcc-16-20250713/gcc/doc/libgdiagnostics/topics/execution-paths.rst gcc-16-20250720/gcc/doc/libgdiagnostics/topics/execution-paths.rst
*** gcc-16-20250713/gcc/doc/libgdiagnostics/topics/execution-paths.rst	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/libgdiagnostics/topics/execution-paths.rst	Sun Jul 20 22:32:09 2025
*************** cross-references between events.  In par
*** 88,93 ****
--- 88,115 ----
     Equivalent to :func:`diagnostic_execution_path_add_event`, but using a
     :type:`va_list` rather than directly taking variadic arguments.
  
+ .. function:: diagnostic_event_id diagnostic_execution_path_add_event_via_msg_buf (diagnostic_execution_path *path, \
+ 						 const diagnostic_physical_location *physical_loc, \
+ 						 const diagnostic_logical_location *logical_loc, \
+ 						 unsigned stack_depth,
+ 						 diagnostic_message_buffer *msg_buf)
+ 
+    This is equivalent to :func:`diagnostic_execution_path_add_event` but
+    using a message buffer rather than a format string and variadic
+    arguments.
+ 
+    ``path`` and ``msg_buf`` must both be non-NULL.
+ 
+    Calling this function transfers ownership of ``msg_buf`` to the
+    path - do not call :func:`diagnostic_message_buffer_release` on it.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_3`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
  Paths are printed to text sinks, and for SARIF sinks each path is added as
  a ``codeFlow`` object (see SARIF 2.1.0
  `§3.36 codeFlow object <https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/sarif-v2.1.0-errata01-os-complete.html#_Toc141790990>`_).
diff -Nrcpad gcc-16-20250713/gcc/doc/libgdiagnostics/topics/index.rst gcc-16-20250720/gcc/doc/libgdiagnostics/topics/index.rst
*** gcc-16-20250713/gcc/doc/libgdiagnostics/topics/index.rst	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/libgdiagnostics/topics/index.rst	Sun Jul 20 22:32:09 2025
*************** Topic reference
*** 28,33 ****
--- 28,34 ----
     diagnostic-manager.rst
     diagnostics.rst
     message-formatting.rst
+    message-buffers.rst
     physical-locations.rst
     logical-locations.rst
     metadata.rst
diff -Nrcpad gcc-16-20250713/gcc/doc/libgdiagnostics/topics/message-buffers.rst gcc-16-20250720/gcc/doc/libgdiagnostics/topics/message-buffers.rst
*** gcc-16-20250713/gcc/doc/libgdiagnostics/topics/message-buffers.rst	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/doc/libgdiagnostics/topics/message-buffers.rst	Sun Jul 20 22:32:09 2025
***************
*** 0 ****
--- 1,310 ----
+ .. Copyright (C) 2025 Free Software Foundation, Inc.
+    Originally contributed by David Malcolm <dmalcolm@redhat.com>
+ 
+    This 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 this program.  If not, see
+    <https://www.gnu.org/licenses/>.
+ 
+ .. default-domain:: c
+ 
+ Message buffers
+ ===============
+ 
+ .. type:: diagnostic_message_buffer
+ 
+ A :type:`diagnostic_message_buffer` is a buffer into which text can be
+ accumulated, before being used:
+ 
+ * as the message of a diagnostic, using :func:`diagnostic_finish_via_msg_buf`
+ 
+ * as the text of a label for a :type:`diagnostic_physical_location` using
+   :func:`diagnostic_add_location_with_label_via_msg_buf`
+ 
+ * as the text of an event within a :type:`diagnostic_execution_path` using
+   :func:`diagnostic_execution_path_add_event_via_msg_buf`
+ 
+ This is to allow more flexible creation of messages than a "format string
+ plus variadic arguments" API.
+ 
+ .. function:: diagnostic_message_buffer * diagnostic_message_buffer_new (void)
+ 
+    This function creates a new :type:`diagnostic_message_buffer`.
+ 
+    The caller is responsible for cleaning it up, either by handing it off
+    to one of the API entrypoints that takes ownership of it (such as
+    :func:`diagnostic_finish_via_msg_buf`), or by calling
+    :func:`diagnostic_message_buffer_release` on it.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ .. function:: void diagnostic_message_buffer_release (diagnostic_message_buffer *msg_buf)
+ 
+    This function releases ``msg_buf``.
+ 
+    Typically you don't need to call this, but instead will pass the
+    buffer to one of the API entrypoints that takes over ownership of
+    it (such as :func:`diagnostic_finish_via_msg_buf`); calling it
+    after this would lead to a double-free bug, as you no longer "own"
+    the buffer.
+ 
+    ``msg_buf`` must be non-NULL.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ .. function:: void diagnostic_message_buffer_append_str (diagnostic_message_buffer *msg_buf, \
+ 				      const char *p)
+ 
+    This function appends the null-terminated string ``p`` to the buffer.
+    The string is assumed to be UTF-8 encoded.
+ 
+    ``msg_buf`` and ``p`` must both be non-NULL.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ .. function:: void diagnostic_message_buffer_append_text (diagnostic_message_buffer *msg_buf, \
+ 	       const char *p, \
+ 	       size_t len)
+ 
+    This function appends ``len`` bytes from ``p`` to the buffer.
+    The bytes are assumed to be UTF-8 encoded.
+ 
+    ``msg_buf`` and ``p`` must both be non-NULL.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ .. function:: void diagnostic_message_buffer_append_byte (diagnostic_message_buffer *msg_buf,\
+ 				       char ch)
+ 
+    This function appends ``ch`` to the buffer.  This should be either
+    ASCII, or part of UTF-8 encoded text.
+ 
+    ``msg_buf`` must be non-NULL.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ .. function:: void diagnostic_message_buffer_append_printf (diagnostic_message_buffer *msg_buf, \
+ 					 const char *fmt, ...)
+ 
+    This function appends a formatted string to the buffer, using the
+    formatting rules for ``printf``.
+ 
+    The string is assumed to be UTF-8 encoded.
+ 
+    ``msg_buf`` and ``fmt`` must both be non-NULL.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ .. function:: void diagnostic_message_buffer_append_event_id (diagnostic_message_buffer *msg_buf, \
+ 					   diagnostic_event_id event_id)
+ 
+    This function appends a :type:`diagnostic_event_id` to the buffer.
+ 
+    ``msg_buf`` must be non-NULL.
+ 
+    For text output, the event will be printed in the form ``(1)``.
+ 
+    This is analogous to the
+    :doc:`%@ message formatting code <message-formatting>`.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ Hyperlink support
+ *****************
+ 
+ .. function:: void diagnostic_message_buffer_begin_url (diagnostic_message_buffer *msg_buf, \
+ 				     const char *url)
+ 
+    This function indicates the beginning of a run of text that should be
+    associated with the given URL.  The run of text should be closed with
+    a matching call to :func:`diagnostic_message_buffer_end_url`.
+ 
+    ``msg_buf`` and ``url`` must both be non-NULL.
+ 
+    For text output in a suitably modern terminal, the run of text will
+    be emitted as a clickable hyperlink to the URL.
+ 
+    For SARIF sinks, the run of text will be emitted using SARIF's
+    embedded link syntax.
+ 
+    This is analogous to the
+    :doc:`%{ message formatting code <message-formatting>`.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ .. function:: void diagnostic_message_buffer_end_url (diagnostic_message_buffer *msg_buf)
+ 
+    This function ends a run of text within the buffer started with
+    :func:`diagnostic_message_buffer_begin_url`.
+ 
+    ``msg_buf`` must be non-NULL.
+ 
+    This is analogous to the
+    :doc:`%} message formatting code <message-formatting>`.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ Quoted text
+ ***********
+ 
+ .. function:: void diagnostic_message_buffer_begin_quote (diagnostic_message_buffer *msg_buf)
+ 
+    This function indicates the beginning of a run of text that should be
+    printed in quotes.  The run of text should be closed with
+    a matching call to :func:`diagnostic_message_buffer_end_quote`.
+ 
+    ``msg_buf`` must be non-NULL.
+ 
+    For text output in a suitably modern terminal, the run of text will
+    appear in bold.
+    be emitted as a clickable hyperlink to the URL.
+ 
+    For SARIF sinks, the run of text will be emitted using SARIF's
+    embedded link syntax.
+ 
+    This is analogous to the
+    ``%<``:doc:`message formatting code <message-formatting>`.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ .. function:: void diagnostic_message_buffer_end_url (diagnostic_message_buffer *msg_buf)
+ 
+    This function ends a run of text within the buffer started with
+    :func:`diagnostic_message_buffer_begin_url`.
+ 
+    ``msg_buf`` must be non-NULL.
+ 
+    This is analogous to the
+    :doc:`%> message formatting code <message-formatting>`.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ Color
+ *****
+ 
+ .. function:: void diagnostic_message_buffer_begin_color (diagnostic_message_buffer *msg_buf, \
+ 				     const char *color)
+ 
+    This function indicates the beginning of a run of text that should be
+    colorized as the given color.  The run of text should be closed with
+    a matching call to :func:`diagnostic_message_buffer_end_color`.
+ 
+    The precise set of available color names is currently undocumented.
+ 
+    ``msg_buf`` and ``color`` must both be non-NULL.
+ 
+    For text output in a suitable terminal, the run of text will
+    be colorized.
+ 
+    For SARIF sinks, the run of text will be emitted using SARIF's
+    embedded link syntax.
+ 
+    This is analogous to the
+    :doc:`%r message formatting code <message-formatting>`.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ .. function:: void diagnostic_message_buffer_end_color (diagnostic_message_buffer *msg_buf)
+ 
+    This function ends a run of text within the buffer started with
+    :func:`diagnostic_message_buffer_begin_color`.
+ 
+    ``msg_buf`` must be non-NULL.
+ 
+    This is analogous to the
+    :doc:`%R message formatting code <message-formatting>`.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ Debugging a message buffer
+ **************************
+ 
+ .. function:: void diagnostic_message_buffer_dump (const diagnostic_message_buffer *msg_buf, \
+ 				FILE *outf)
+ 
+    This function writes a representation of the contents of ``msg_buf``
+    to ``outf``, for debugging.
+ 
+    ``msg_buf`` can be NULL or non-NULL.
+    ``outf`` must be non-NULL.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_4`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
diff -Nrcpad gcc-16-20250713/gcc/doc/libgdiagnostics/topics/message-formatting.rst gcc-16-20250720/gcc/doc/libgdiagnostics/topics/message-formatting.rst
*** gcc-16-20250713/gcc/doc/libgdiagnostics/topics/message-formatting.rst	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/libgdiagnostics/topics/message-formatting.rst	Sun Jul 20 22:32:09 2025
*************** Message formatting
*** 23,28 ****
--- 23,33 ----
  Various libgdiagnostics entrypoints take a format string and
  variadic arguments.
  
+ .. note::
+ 
+    See also :type:`diagnostic_message_buffer`, which offers an
+    alternative way to build up messages.
+ 
  The format strings take codes prefixed by ``%``, or ``%q`` to put
  the result in quotes.  For example::
  
diff -Nrcpad gcc-16-20250713/gcc/doc/libgdiagnostics/topics/physical-locations.rst gcc-16-20250720/gcc/doc/libgdiagnostics/topics/physical-locations.rst
*** gcc-16-20250713/gcc/doc/libgdiagnostics/topics/physical-locations.rst	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/libgdiagnostics/topics/physical-locations.rst	Sun Jul 20 22:32:09 2025
*************** This diagnostic has three locations
*** 284,286 ****
--- 284,306 ----
              |   ~~ ^ ~~~~~
              |   |    |
              |   int  const char *
+ 
+ .. function:: void diagnostic_add_location_with_label_via_msg_buf (diagnostic *diag, \
+ 						const diagnostic_physical_location *loc, \
+ 						diagnostic_message_buffer *msg_buf)
+ 
+    This is equivalent to :func:`diagnostic_add_location_with_label` but
+    using a message buffer rather than a text string.
+ 
+    ``diag`` and ``msg_buf`` must both be non-NULL.
+ 
+    Calling this function transfers ownership of ``msg_buf`` to the
+    diagnostic - do not call :func:`diagnostic_message_buffer_release` on
+    it.
+ 
+    This function was added in :ref:`LIBGDIAGNOSTICS_ABI_3`; you can
+    test for its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
diff -Nrcpad gcc-16-20250713/gcc/doc/libgdiagnostics/tutorial/07-execution-paths.rst gcc-16-20250720/gcc/doc/libgdiagnostics/tutorial/07-execution-paths.rst
*** gcc-16-20250713/gcc/doc/libgdiagnostics/tutorial/07-execution-paths.rst	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/libgdiagnostics/tutorial/07-execution-paths.rst	Sun Jul 20 22:32:09 2025
*************** Here's the above example in full:
*** 134,141 ****
     :end-before:  end full example
  
  
! Moving on
! *********
! 
! That's the end of the tutorial.  For more information on libgdiagnostics, see
! the :doc:`topic guide <../topics/index>`.
--- 134,139 ----
     :end-before:  end full example
  
  
! See the :doc:`guide to execution paths <../topics/execution-paths>`
! for more information, or go on to
! :doc:`the next section of the tutorial <08-message-buffers>`.
diff -Nrcpad gcc-16-20250713/gcc/doc/libgdiagnostics/tutorial/08-message-buffers.rst gcc-16-20250720/gcc/doc/libgdiagnostics/tutorial/08-message-buffers.rst
*** gcc-16-20250713/gcc/doc/libgdiagnostics/tutorial/08-message-buffers.rst	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/doc/libgdiagnostics/tutorial/08-message-buffers.rst	Sun Jul 20 22:32:09 2025
***************
*** 0 ****
--- 1,75 ----
+ .. Copyright (C) 2025 Free Software Foundation, Inc.
+    Originally contributed by David Malcolm <dmalcolm@redhat.com>
+ 
+    This 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 this program.  If not, see
+    <https://www.gnu.org/licenses/>.
+ 
+ .. default-domain:: c
+ 
+ Tutorial part 8: message buffers
+ ================================
+ 
+ In previous examples, we finished a diagnostic with a call to
+ :func:`diagnostic_finish`, which takes a format string and arguments
+ to determine the text message of the diagnostic.
+ 
+ Sometimes this approach is inconvenient, such as where you might want to
+ build up a message programatically from a series of components.
+ Additionally, you might have existing code that uses ``fprintf``, whereas
+ :func:`diagnostic_finish` has its
+ :doc:`own formatting conventions <../topics/message-formatting>` which are
+ :strong:`not` the same as printf.
+ 
+ For this reason libgdiagnostics (from ``LIBGDIAGNOSTICS_ABI_3`` onwards)
+ supports :type:`diagnostic_message_buffer`, which can be used to accumulate a
+ message before using it.
+ 
+ You create a :type:`diagnostic_message_buffer` using
+ :func:`diagnostic_message_buffer_new`.
+ 
+ There are various API entrypoints for accumulating text into the buffer.
+ 
+ For example:
+ 
+ .. literalinclude:: ../../../testsuite/libgdiagnostics.dg/test-message-buffer.c
+    :language: c
+    :start-after: /* begin quoted source */
+    :end-before:  /* end quoted source */
+ 
+ Running this will produce this text output::
+ 
+ .. code-block:: console
+ 
+   $ ./test-message-buffer.c.exe
+   ./test-message-buffer.c.exe: error: this is a string; foo; int: 42 str: mostly harmless; this is a link  'this is quoted' highlight A highlight B (1).
+ 
+ where in a suitably-capable terminal if a text sink is directly
+ connected to a tty:
+ 
+ * the ``this is a link`` will be a clickable hyperlink
+   (and the URL will be captured in SARIF output).
+ 
+ * the quoted text will be in bold
+ 
+ * the ``highlight A`` and ``highlight B`` text will be colorized
+ 
+ * the event ID will be colorized (and will be a URL in SARIF output
+   if used within a :type:`diagnostic_execution_path`).
+ 
+ 
+ Moving on
+ *********
+ 
+ That's the end of the tutorial.  For more information on libgdiagnostics, see
+ the :doc:`topic guide <../topics/index>`.
diff -Nrcpad gcc-16-20250713/gcc/doc/libgdiagnostics/tutorial/index.rst gcc-16-20250720/gcc/doc/libgdiagnostics/tutorial/index.rst
*** gcc-16-20250713/gcc/doc/libgdiagnostics/tutorial/index.rst	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/libgdiagnostics/tutorial/index.rst	Sun Jul 20 22:32:09 2025
*************** The following tutorial gives an overview
*** 30,32 ****
--- 30,33 ----
     05-warnings.rst
     06-fix-it-hints.rst
     07-execution-paths.rst
+    08-message-buffers.rst
diff -Nrcpad gcc-16-20250713/gcc/doc/riscv-ext.texi gcc-16-20250720/gcc/doc/riscv-ext.texi
*** gcc-16-20250713/gcc/doc/riscv-ext.texi	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/riscv-ext.texi	Sun Jul 20 22:32:09 2025
***************
*** 714,717 ****
--- 714,721 ----
  @tab 1.0
  @tab Ventana integer conditional operations extension
  
+ @item xmipscmov
+ @tab 1.0
+ @tab Mips conditional move extension
+ 
  @end multitable
diff -Nrcpad gcc-16-20250713/gcc/doc/sourcebuild.texi gcc-16-20250720/gcc/doc/sourcebuild.texi
*** gcc-16-20250713/gcc/doc/sourcebuild.texi	Sun Jul 13 22:32:25 2025
--- gcc-16-20250720/gcc/doc/sourcebuild.texi	Sun Jul 20 22:32:09 2025
*************** whether it does so by default).
*** 2379,2384 ****
--- 2379,2387 ----
  @item aarch64_sve2p1_hw
  AArch64 target that is able to generate and execute SVE2.1 code (regardless of
  whether it does so by default).
+ @item aarch64_sme_hw
+ AArch64 target that is able to generate and execute SME code (regardless of
+ whether it does so by default).
  
  @item aarch64_fjcvtzs_hw
  AArch64 target that is able to generate and execute armv8.3-a FJCVTZS
diff -Nrcpad gcc-16-20250713/gcc/fortran/ChangeLog gcc-16-20250720/gcc/fortran/ChangeLog
*** gcc-16-20250713/gcc/fortran/ChangeLog	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/fortran/ChangeLog	Sun Jul 20 22:32:09 2025
***************
*** 1,3 ****
--- 1,69 ----
+ 2025-07-18  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121145
+ 	* trans-expr.cc (gfc_conv_procedure_call): Do not create pointer
+ 	check for proc-pointer actual passed to optional dummy.
+ 
+ 2025-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/121060
+ 	* interface.cc (matching_typebound_op): Defer determination of
+ 	specific procedure until resolution by returning NULL.
+ 
+ 2025-07-16  Steve Kargl  <sgk@troutmask.apl.washington.edu>
+ 
+ 	* decl.cc (gfc_match_import): Correct minor whitespace snafu
+ 	and fix NULL pointer dereferences in two places.
+ 
+ 2025-07-15  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 
+ 	PR fortran/104428
+ 	* trans-openmp.cc (gfc_trans_omp_declare_variant): Check that proc_st
+ 	is non-NULL before dereferencing.  Add line number to error message.
+ 
+ 2025-07-15  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	* gfortran.h (gfc_symbol): Remove field allocated_in_scope.
+ 	* trans-array.cc (gfc_array_allocate): Don't set it.
+ 	(gfc_alloc_allocatable_for_assignment): Likewise.
+ 	Generate the unallocated descriptor bounds initialisation
+ 	before the opening of the reallocation code block.  Create a
+ 	variable and use it as additional condition to the unallocated
+ 	descriptor bounds initialisation.
+ 
+ 2025-07-15  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	* trans-array.cc (gfc_conv_ss_descriptor): Don't evaluate
+ 	offset and data to a variable if is_alloc_lhs is set.  Move the
+ 	existing evaluation decision condition for data...
+ 	(save_descriptor_data): ... here as a new predicate.
+ 	(evaluate_bound): Add argument save_value.  Omit the evaluation
+ 	of the value to a variable if that argument isn't set.
+ 	(gfc_conv_expr_descriptor): Update caller.
+ 	(gfc_conv_section_startstride): Update caller.  Set save_value
+ 	if is_alloc_lhs is not set.  Omit the evaluation of stride to a
+ 	variable if save_value isn't set.
+ 	(gfc_set_delta): Omit the evaluation of delta to a variable
+ 	if is_alloc_lhs is set.
+ 	(gfc_is_reallocatable_lhs): Return false if flag_realloc_lhs
+ 	isn't set.
+ 	(gfc_alloc_allocatable_for_assignment): Don't update
+ 	the variables that may be stored in saved_offset, delta, and
+ 	data.  Call instead...
+ 	(update_reallocated_descriptor): ... this new procedure.
+ 	* trans-expr.cc (gfc_trans_assignment_1): Don't omit setting the
+ 	is_alloc_lhs flag if the right hand side is an intrinsic
+ 	function.  Clear the flag if the right hand side is scalar.
+ 
+ 2025-07-15  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	* trans-expr.cc (gfc_trans_assignment_1): Generate array
+ 	reallocation code before entering the scalarisation loops.
+ 
+ 2025-07-15  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* resolve.cc (resolve_select_type): Fix indentation.
+ 
  2025-07-12  Tobias Burnus  <tburnus@baylibre.com>
  
  	* invoke.texi (-Wsurprising): Note about OpenACC warning
diff -Nrcpad gcc-16-20250713/gcc/fortran/decl.cc gcc-16-20250720/gcc/fortran/decl.cc
*** gcc-16-20250713/gcc/fortran/decl.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/fortran/decl.cc	Sun Jul 20 22:32:09 2025
*************** gfc_match_import (void)
*** 5272,5284 ****
        switch (m)
  	{
  	case MATCH_YES:
! 	  if (gfc_current_ns->parent !=  NULL
  	      && gfc_find_symbol (name, gfc_current_ns->parent, 1, &sym))
  	    {
  	       gfc_error ("Type name %qs at %C is ambiguous", name);
  	       return MATCH_ERROR;
  	    }
! 	  else if (!sym && gfc_current_ns->proc_name->ns->parent !=  NULL
  		   && gfc_find_symbol (name,
  				       gfc_current_ns->proc_name->ns->parent,
  				       1, &sym))
--- 5272,5286 ----
        switch (m)
  	{
  	case MATCH_YES:
! 	  if (gfc_current_ns->parent != NULL
  	      && gfc_find_symbol (name, gfc_current_ns->parent, 1, &sym))
  	    {
  	       gfc_error ("Type name %qs at %C is ambiguous", name);
  	       return MATCH_ERROR;
  	    }
! 	  else if (!sym
! 		   && gfc_current_ns->proc_name
! 		   && gfc_current_ns->proc_name->ns->parent
  		   && gfc_find_symbol (name,
  				       gfc_current_ns->proc_name->ns->parent,
  				       1, &sym))
*************** gfc_match_import (void)
*** 5289,5295 ****
  
  	  if (sym == NULL)
  	    {
! 	      if (gfc_current_ns->proc_name->attr.if_source == IFSRC_IFBODY)
  		{
  		  gfc_error ("Cannot IMPORT %qs from host scoping unit "
  			     "at %C - does not exist.", name);
--- 5291,5298 ----
  
  	  if (sym == NULL)
  	    {
! 	      if (gfc_current_ns->proc_name
! 		  && gfc_current_ns->proc_name->attr.if_source == IFSRC_IFBODY)
  		{
  		  gfc_error ("Cannot IMPORT %qs from host scoping unit "
  			     "at %C - does not exist.", name);
diff -Nrcpad gcc-16-20250713/gcc/fortran/gfortran.h gcc-16-20250720/gcc/fortran/gfortran.h
*** gcc-16-20250713/gcc/fortran/gfortran.h	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/fortran/gfortran.h	Sun Jul 20 22:32:09 2025
*************** typedef struct gfc_symbol
*** 2028,2037 ****
    /* Set if this should be passed by value, but is not a VALUE argument
       according to the Fortran standard.  */
    unsigned pass_as_value:1;
-   /* Set if an allocatable array variable has been allocated in the current
-      scope. Used in the suppression of uninitialized warnings in reallocation
-      on assignment.  */
-   unsigned allocated_in_scope:1;
    /* Set if an external dummy argument is called with different argument lists.
       This is legal in Fortran, but can cause problems with autogenerated
       C prototypes for C23.  */
--- 2028,2033 ----
diff -Nrcpad gcc-16-20250713/gcc/fortran/interface.cc gcc-16-20250720/gcc/fortran/interface.cc
*** gcc-16-20250713/gcc/fortran/interface.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/fortran/interface.cc	Sun Jul 20 22:32:09 2025
*************** matching_typebound_op (gfc_expr** tb_bas
*** 4781,4786 ****
--- 4781,4793 ----
  		gfc_actual_arglist* argcopy;
  		bool matches;
  
+ 		/* If expression matching comes here during parsing, eg. when
+ 		   parsing ASSOCIATE, generic TBPs have not yet been resolved
+ 		   and g->specific will not have been set. Wait for expression
+ 		   resolution by returning NULL.  */
+ 		if (!g->specific && !gfc_current_ns->resolved)
+ 		  return NULL;
+ 
  		gcc_assert (g->specific);
  		if (g->specific->error)
  		  continue;
diff -Nrcpad gcc-16-20250713/gcc/fortran/resolve.cc gcc-16-20250720/gcc/fortran/resolve.cc
*** gcc-16-20250713/gcc/fortran/resolve.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/fortran/resolve.cc	Sun Jul 20 22:32:09 2025
*************** resolve_select_type (gfc_code *code, gfc
*** 11014,11029 ****
  	 that does precisely this here (instead of using the
  	 'global' one).  */
  
! 	/* First check the derived type import status.  */
! 	if (gfc_current_ns->import_state != IMPORT_NOT_SET
! 	    && (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS))
! 	  {
! 	    st = gfc_find_symtree (gfc_current_ns->sym_root,
! 				   c->ts.u.derived->name);
! 	    if (!check_sym_import_status (c->ts.u.derived, st, NULL, old_code,
! 					  gfc_current_ns))
! 	      error++;
! 	  }
  
        const char * var_name = gfc_var_name_for_select_type_temp (orig_expr1);
        if (c->ts.type == BT_CLASS)
--- 11014,11029 ----
  	 that does precisely this here (instead of using the
  	 'global' one).  */
  
!       /* First check the derived type import status.  */
!       if (gfc_current_ns->import_state != IMPORT_NOT_SET
! 	  && (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS))
! 	{
! 	  st = gfc_find_symtree (gfc_current_ns->sym_root,
! 				 c->ts.u.derived->name);
! 	  if (!check_sym_import_status (c->ts.u.derived, st, NULL, old_code,
! 					gfc_current_ns))
! 	    error++;
! 	}
  
        const char * var_name = gfc_var_name_for_select_type_temp (orig_expr1);
        if (c->ts.type == BT_CLASS)
diff -Nrcpad gcc-16-20250713/gcc/fortran/trans-array.cc gcc-16-20250720/gcc/fortran/trans-array.cc
*** gcc-16-20250713/gcc/fortran/trans-array.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/fortran/trans-array.cc	Sun Jul 20 22:32:09 2025
*************** gfc_add_loop_ss_code (gfc_loopinfo * loo
*** 3420,3425 ****
--- 3420,3442 ----
  }
  
  
+ /* Given an array descriptor expression DESCR and its data pointer DATA, decide
+    whether to either save the data pointer to a variable and use the variable or
+    use the data pointer expression directly without any intermediary variable.
+    */
+ 
+ static bool
+ save_descriptor_data (tree descr, tree data)
+ {
+   return !(DECL_P (data)
+ 	   || (TREE_CODE (data) == ADDR_EXPR
+ 	       && DECL_P (TREE_OPERAND (data, 0)))
+ 	   || (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (descr))
+ 	       && TREE_CODE (descr) == COMPONENT_REF
+ 	       && GFC_CLASS_TYPE_P (TREE_TYPE (TREE_OPERAND (descr, 0)))));
+ }
+ 
+ 
  /* Translate expressions for the descriptor and data pointer of a SS.  */
  /*GCC ARRAYS*/
  
*************** gfc_conv_ss_descriptor (stmtblock_t * bl
*** 3466,3482 ****
           Otherwise we must evaluate it now to avoid breaking dependency
  	 analysis by pulling the expressions for elemental array indices
  	 inside the loop.  */
!       if (!(DECL_P (tmp)
! 	    || (TREE_CODE (tmp) == ADDR_EXPR
! 		&& DECL_P (TREE_OPERAND (tmp, 0)))
! 	    || (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (se.expr))
! 		&& TREE_CODE (se.expr) == COMPONENT_REF
! 		&& GFC_CLASS_TYPE_P (TREE_TYPE (TREE_OPERAND (se.expr, 0))))))
  	tmp = gfc_evaluate_now (tmp, block);
        info->data = tmp;
  
        tmp = gfc_conv_array_offset (se.expr);
!       info->offset = gfc_evaluate_now (tmp, block);
  
        /* Make absolutely sure that the saved_offset is indeed saved
  	 so that the variable is still accessible after the loops
--- 3483,3496 ----
           Otherwise we must evaluate it now to avoid breaking dependency
  	 analysis by pulling the expressions for elemental array indices
  	 inside the loop.  */
!       if (save_descriptor_data (se.expr, tmp) && !ss->is_alloc_lhs)
  	tmp = gfc_evaluate_now (tmp, block);
        info->data = tmp;
  
        tmp = gfc_conv_array_offset (se.expr);
!       if (!ss->is_alloc_lhs)
! 	tmp = gfc_evaluate_now (tmp, block);
!       info->offset = tmp;
  
        /* Make absolutely sure that the saved_offset is indeed saved
  	 so that the variable is still accessible after the loops
*************** gfc_trans_scalarized_loop_boundary (gfc_
*** 4769,4781 ****
  
  static void
  evaluate_bound (stmtblock_t *block, tree *bounds, gfc_expr ** values,
! 		tree desc, int dim, bool lbound, bool deferred)
  {
    gfc_se se;
    gfc_expr * input_val = values[dim];
    tree *output = &bounds[dim];
  
- 
    if (input_val)
      {
        /* Specified section bound.  */
--- 4783,4794 ----
  
  static void
  evaluate_bound (stmtblock_t *block, tree *bounds, gfc_expr ** values,
! 		tree desc, int dim, bool lbound, bool deferred, bool save_value)
  {
    gfc_se se;
    gfc_expr * input_val = values[dim];
    tree *output = &bounds[dim];
  
    if (input_val)
      {
        /* Specified section bound.  */
*************** evaluate_bound (stmtblock_t *block, tree
*** 4801,4807 ****
        *output = lbound ? gfc_conv_array_lbound (desc, dim) :
  			 gfc_conv_array_ubound (desc, dim);
      }
!   *output = gfc_evaluate_now (*output, block);
  }
  
  
--- 4814,4821 ----
        *output = lbound ? gfc_conv_array_lbound (desc, dim) :
  			 gfc_conv_array_ubound (desc, dim);
      }
!   if (save_value)
!     *output = gfc_evaluate_now (*output, block);
  }
  
  
*************** gfc_conv_section_startstride (stmtblock_
*** 4834,4851 ****
  	      || ar->dimen_type[dim] == DIMEN_THIS_IMAGE);
    desc = info->descriptor;
    stride = ar->stride[dim];
! 
  
    /* Calculate the start of the range.  For vector subscripts this will
       be the range of the vector.  */
    evaluate_bound (block, info->start, ar->start, desc, dim, true,
! 		  ar->as->type == AS_DEFERRED);
  
    /* Similarly calculate the end.  Although this is not used in the
       scalarizer, it is needed when checking bounds and where the end
       is an expression with side-effects.  */
    evaluate_bound (block, info->end, ar->end, desc, dim, false,
! 		  ar->as->type == AS_DEFERRED);
  
  
    /* Calculate the stride.  */
--- 4848,4865 ----
  	      || ar->dimen_type[dim] == DIMEN_THIS_IMAGE);
    desc = info->descriptor;
    stride = ar->stride[dim];
!   bool save_value = !ss->is_alloc_lhs;
  
    /* Calculate the start of the range.  For vector subscripts this will
       be the range of the vector.  */
    evaluate_bound (block, info->start, ar->start, desc, dim, true,
! 		  ar->as->type == AS_DEFERRED, save_value);
  
    /* Similarly calculate the end.  Although this is not used in the
       scalarizer, it is needed when checking bounds and where the end
       is an expression with side-effects.  */
    evaluate_bound (block, info->end, ar->end, desc, dim, false,
! 		  ar->as->type == AS_DEFERRED, save_value);
  
  
    /* Calculate the stride.  */
*************** gfc_conv_section_startstride (stmtblock_
*** 4856,4862 ****
        gfc_init_se (&se, NULL);
        gfc_conv_expr_type (&se, stride, gfc_array_index_type);
        gfc_add_block_to_block (block, &se.pre);
!       info->stride[dim] = gfc_evaluate_now (se.expr, block);
      }
  }
  
--- 4870,4880 ----
        gfc_init_se (&se, NULL);
        gfc_conv_expr_type (&se, stride, gfc_array_index_type);
        gfc_add_block_to_block (block, &se.pre);
!       tree value = se.expr;
!       if (save_value)
! 	info->stride[dim] = gfc_evaluate_now (value, block);
!       else
! 	info->stride[dim] = value;
      }
  }
  
*************** gfc_set_delta (gfc_loopinfo *loop)
*** 5991,5997 ****
  				     gfc_array_index_type,
  				     info->start[dim], tmp);
  
! 	      info->delta[dim] = gfc_evaluate_now (tmp, &outer_loop->pre);
  	    }
  	}
      }
--- 6009,6018 ----
  				     gfc_array_index_type,
  				     info->start[dim], tmp);
  
! 	      if (ss->is_alloc_lhs)
! 		info->delta[dim] = tmp;
! 	      else
! 		info->delta[dim] = gfc_evaluate_now (tmp, &outer_loop->pre);
  	    }
  	}
      }
*************** gfc_array_allocate (gfc_se * se, gfc_exp
*** 6779,6786 ****
    else
        gfc_add_expr_to_block (&se->pre, set_descriptor);
  
-   expr->symtree->n.sym->allocated_in_scope = 1;
- 
    return true;
  }
  
--- 6800,6805 ----
*************** gfc_conv_expr_descriptor (gfc_se *se, gf
*** 8470,8476 ****
  	  gcc_assert (n == codim - 1);
  	  evaluate_bound (&loop.pre, info->start, ar->start,
  			  info->descriptor, n + ndim, true,
! 			  ar->as->type == AS_DEFERRED);
  	  loop.from[n + loop.dimen] = info->start[n + ndim];
  	}
        else
--- 8489,8495 ----
  	  gcc_assert (n == codim - 1);
  	  evaluate_bound (&loop.pre, info->start, ar->start,
  			  info->descriptor, n + ndim, true,
! 			  ar->as->type == AS_DEFERRED, true);
  	  loop.from[n + loop.dimen] = info->start[n + ndim];
  	}
        else
*************** gfc_is_reallocatable_lhs (gfc_expr *expr
*** 11206,11211 ****
--- 11225,11233 ----
    gfc_ref * ref;
    gfc_symbol *sym;
  
+   if (!flag_realloc_lhs)
+     return false;
+ 
    if (!expr->ref)
      return false;
  
*************** concat_str_length (gfc_expr* expr)
*** 11330,11335 ****
--- 11352,11406 ----
  }
  
  
+ /* Among the scalarization chain of LOOP, find the element associated with an
+    allocatable array on the lhs of an assignment and evaluate its fields
+    (bounds, offset, etc) to new variables, putting the new code in BLOCK.  This
+    function is to be called after putting the reallocation code in BLOCK and
+    before the beginning of the scalarization loop body.
+ 
+    The fields to be saved are expected to hold on entry to the function
+    expressions referencing the array descriptor.  Especially the expressions
+    shouldn't be already temporary variable references as the value saved before
+    reallocation would be incorrect after reallocation.
+    At the end of the function, the expressions have been replaced with variable
+    references.  */
+ 
+ static void
+ update_reallocated_descriptor (stmtblock_t *block, gfc_loopinfo *loop)
+ {
+   for (gfc_ss *s = loop->ss; s != gfc_ss_terminator; s = s->loop_chain)
+     {
+       if (!s->is_alloc_lhs)
+ 	continue;
+ 
+       gcc_assert (s->info->type == GFC_SS_SECTION);
+       gfc_array_info *info = &s->info->data.array;
+ 
+ #define SAVE_VALUE(value) \
+ 	      do \
+ 		{ \
+ 		  value = gfc_evaluate_now (value, block); \
+ 		} \
+ 	      while (0)
+ 
+       if (save_descriptor_data (info->descriptor, info->data))
+ 	SAVE_VALUE (info->data);
+       SAVE_VALUE (info->offset);
+       info->saved_offset = info->offset;
+       for (int i = 0; i < s->dimen; i++)
+ 	{
+ 	  int dim = s->dim[i];
+ 	  SAVE_VALUE (info->start[dim]);
+ 	  SAVE_VALUE (info->end[dim]);
+ 	  SAVE_VALUE (info->stride[dim]);
+ 	  SAVE_VALUE (info->delta[dim]);
+ 	}
+ 
+ #undef SAVE_VALUE
+     }
+ }
+ 
+ 
  /* Allocate the lhs of an assignment to an allocatable array, otherwise
     reallocate it.  */
  
*************** gfc_alloc_allocatable_for_assignment (gf
*** 11368,11374 ****
    tree lbd;
    tree class_expr2 = NULL_TREE;
    int n;
-   int dim;
    gfc_array_spec * as;
    bool coarray = (flag_coarray == GFC_FCOARRAY_LIB
  		  && gfc_caf_attr (expr1, true).codimension);
--- 11439,11444 ----
*************** gfc_alloc_allocatable_for_assignment (gf
*** 11423,11436 ****
        && !expr2->value.function.isym)
      expr2->ts.u.cl->backend_decl = rss->info->string_length;
  
-   gfc_start_block (&fblock);
- 
    /* Since the lhs is allocatable, this must be a descriptor type.
       Get the data and array size.  */
    desc = linfo->descriptor;
    gcc_assert (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)));
    array1 = gfc_conv_descriptor_data_get (desc);
  
    if (expr2)
      desc2 = rss->info->data.array.descriptor;
    else
--- 11493,11553 ----
        && !expr2->value.function.isym)
      expr2->ts.u.cl->backend_decl = rss->info->string_length;
  
    /* Since the lhs is allocatable, this must be a descriptor type.
       Get the data and array size.  */
    desc = linfo->descriptor;
    gcc_assert (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)));
    array1 = gfc_conv_descriptor_data_get (desc);
  
+   /* If the data is null, set the descriptor bounds and offset.  This suppresses
+      the maybe used uninitialized warning.  Note that the always false variable
+      prevents this block from ever being executed, and makes sure that the
+      optimizers are able to remove it.  Component references are not subject to
+      the warnings, so we don't uselessly complicate the generated code for them.
+      */
+   for (ref = expr1->ref; ref; ref = ref->next)
+     if (ref->type == REF_COMPONENT)
+       break;
+ 
+   if (!ref)
+     {
+       stmtblock_t unalloc_init_block;
+       gfc_init_block (&unalloc_init_block);
+       tree guard = gfc_create_var (logical_type_node, "unallocated_init_guard");
+       gfc_add_modify (&unalloc_init_block, guard, logical_false_node);
+ 
+       gfc_start_block (&loop_pre_block);
+       for (n = 0; n < expr1->rank; n++)
+ 	{
+ 	  gfc_conv_descriptor_lbound_set (&loop_pre_block, desc,
+ 					  gfc_rank_cst[n],
+ 					  gfc_index_one_node);
+ 	  gfc_conv_descriptor_ubound_set (&loop_pre_block, desc,
+ 					  gfc_rank_cst[n],
+ 					  gfc_index_zero_node);
+ 	  gfc_conv_descriptor_stride_set (&loop_pre_block, desc,
+ 					  gfc_rank_cst[n],
+ 					  gfc_index_zero_node);
+ 	}
+ 
+       tmp = gfc_conv_descriptor_offset (desc);
+       gfc_add_modify (&loop_pre_block, tmp, gfc_index_zero_node);
+ 
+       tmp = fold_build2_loc (input_location, EQ_EXPR,
+ 			     logical_type_node, array1,
+ 			     build_int_cst (TREE_TYPE (array1), 0));
+       tmp = fold_build2_loc (input_location, TRUTH_ANDIF_EXPR,
+ 			     logical_type_node, tmp, guard);
+       tmp = build3_v (COND_EXPR, tmp,
+ 		      gfc_finish_block (&loop_pre_block),
+ 		      build_empty_stmt (input_location));
+       gfc_prepend_expr_to_block (&loop->pre, tmp);
+       gfc_prepend_expr_to_block (&loop->pre,
+ 				 gfc_finish_block (&unalloc_init_block));
+     }
+ 
+   gfc_start_block (&fblock);
+ 
    if (expr2)
      desc2 = rss->info->data.array.descriptor;
    else
*************** gfc_alloc_allocatable_for_assignment (gf
*** 11543,11587 ****
  			 array1, build_int_cst (TREE_TYPE (array1), 0));
    cond_null= gfc_evaluate_now (cond_null, &fblock);
  
-   /* If the data is null, set the descriptor bounds and offset. This suppresses
-      the maybe used uninitialized warning and forces the use of malloc because
-      the size is zero in all dimensions. Note that this block is only executed
-      if the lhs is unallocated and is only applied once in any namespace.
-      Component references are not subject to the warnings.  */
-   for (ref = expr1->ref; ref; ref = ref->next)
-     if (ref->type == REF_COMPONENT)
-       break;
- 
-   if (!expr1->symtree->n.sym->allocated_in_scope && !ref)
-     {
-       gfc_start_block (&loop_pre_block);
-       for (n = 0; n < expr1->rank; n++)
- 	{
- 	  gfc_conv_descriptor_lbound_set (&loop_pre_block, desc,
- 					  gfc_rank_cst[n],
- 					  gfc_index_one_node);
- 	  gfc_conv_descriptor_ubound_set (&loop_pre_block, desc,
- 					  gfc_rank_cst[n],
- 					  gfc_index_zero_node);
- 	  gfc_conv_descriptor_stride_set (&loop_pre_block, desc,
- 					  gfc_rank_cst[n],
- 					  gfc_index_zero_node);
- 	}
- 
-       tmp = gfc_conv_descriptor_offset (desc);
-       gfc_add_modify (&loop_pre_block, tmp, gfc_index_zero_node);
- 
-       tmp = fold_build2_loc (input_location, EQ_EXPR,
- 			     logical_type_node, array1,
- 			     build_int_cst (TREE_TYPE (array1), 0));
-       tmp = build3_v (COND_EXPR, tmp,
- 		      gfc_finish_block (&loop_pre_block),
- 		      build_empty_stmt (input_location));
-       gfc_prepend_expr_to_block (&loop->pre, tmp);
- 
-       expr1->symtree->n.sym->allocated_in_scope = 1;
-     }
- 
    tmp = build3_v (COND_EXPR, cond_null,
  		  build1_v (GOTO_EXPR, jump_label1),
  		  build_empty_stmt (input_location));
--- 11660,11665 ----
*************** gfc_alloc_allocatable_for_assignment (gf
*** 11736,11756 ****
       running offset.  Use the saved_offset instead.  */
    tmp = gfc_conv_descriptor_offset (desc);
    gfc_add_modify (&fblock, tmp, offset);
-   if (linfo->saved_offset
-       && VAR_P (linfo->saved_offset))
-     gfc_add_modify (&fblock, linfo->saved_offset, tmp);
- 
-   /* Now set the deltas for the lhs.  */
-   for (n = 0; n < expr1->rank; n++)
-     {
-       tmp = gfc_conv_descriptor_lbound_get (desc, gfc_rank_cst[n]);
-       dim = lss->dim[n];
-       tmp = fold_build2_loc (input_location, MINUS_EXPR,
- 			     gfc_array_index_type, tmp,
- 			     loop->from[dim]);
-       if (linfo->delta[dim] && VAR_P (linfo->delta[dim]))
- 	gfc_add_modify (&fblock, linfo->delta[dim], tmp);
-     }
  
    /* Take into account _len of unlimited polymorphic entities, so that span
       for array descriptors and allocation sizes are computed correctly.  */
--- 11814,11819 ----
*************** gfc_alloc_allocatable_for_assignment (gf
*** 11972,11989 ****
    tmp = build3_v (COND_EXPR, cond_null, alloc_expr, realloc_expr);
    gfc_add_expr_to_block (&fblock, tmp);
  
-   /* Make sure that the scalarizer data pointer is updated.  */
-   if (linfo->data && VAR_P (linfo->data))
-     {
-       tmp = gfc_conv_descriptor_data_get (desc);
-       gfc_add_modify (&fblock, linfo->data, tmp);
-     }
- 
    /* Add the label for same shape lhs and rhs.  */
    tmp = build1_v (LABEL_EXPR, jump_label2);
    gfc_add_expr_to_block (&fblock, tmp);
  
!   return gfc_finish_block (&fblock);
  }
  
  
--- 12035,12052 ----
    tmp = build3_v (COND_EXPR, cond_null, alloc_expr, realloc_expr);
    gfc_add_expr_to_block (&fblock, tmp);
  
    /* Add the label for same shape lhs and rhs.  */
    tmp = build1_v (LABEL_EXPR, jump_label2);
    gfc_add_expr_to_block (&fblock, tmp);
  
!   tree realloc_code = gfc_finish_block (&fblock);
! 
!   stmtblock_t result_block;
!   gfc_init_block (&result_block);
!   gfc_add_expr_to_block (&result_block, realloc_code);
!   update_reallocated_descriptor (&result_block, loop);
! 
!   return gfc_finish_block (&result_block);
  }
  
  
diff -Nrcpad gcc-16-20250713/gcc/fortran/trans-expr.cc gcc-16-20250720/gcc/fortran/trans-expr.cc
*** gcc-16-20250713/gcc/fortran/trans-expr.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/fortran/trans-expr.cc	Sun Jul 20 22:32:09 2025
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 8159,8165 ****
  		msg = xasprintf ("Pointer actual argument '%s' is not "
  				 "associated", e->symtree->n.sym->name);
  	      else if (attr.proc_pointer && !e->value.function.actual
! 		       && (fsym == NULL || !fsym_attr.proc_pointer))
  		msg = xasprintf ("Proc-pointer actual argument '%s' is not "
  				 "associated", e->symtree->n.sym->name);
  	      else
--- 8159,8166 ----
  		msg = xasprintf ("Pointer actual argument '%s' is not "
  				 "associated", e->symtree->n.sym->name);
  	      else if (attr.proc_pointer && !e->value.function.actual
! 		       && (fsym == NULL
! 			   || (!fsym_attr.proc_pointer && !fsym_attr.optional)))
  		msg = xasprintf ("Proc-pointer actual argument '%s' is not "
  				 "associated", e->symtree->n.sym->name);
  	      else
*************** gfc_trans_assignment_1 (gfc_expr * expr1
*** 12875,12885 ****
    if (gfc_is_reallocatable_lhs (expr1))
      {
        lss->no_bounds_check = 1;
!       if (!(expr2->expr_type == EXPR_FUNCTION
! 	    && expr2->value.function.isym != NULL
! 	    && !(expr2->value.function.isym->elemental
! 		 || expr2->value.function.isym->conversion)))
! 	lss->is_alloc_lhs = 1;
      }
    else
      lss->no_bounds_check = expr1->no_bounds_check;
--- 12876,12882 ----
    if (gfc_is_reallocatable_lhs (expr1))
      {
        lss->no_bounds_check = 1;
!       lss->is_alloc_lhs = 1;
      }
    else
      lss->no_bounds_check = expr1->no_bounds_check;
*************** gfc_trans_assignment_1 (gfc_expr * expr1
*** 12943,12948 ****
--- 12940,12946 ----
        rhs_caf_attr = gfc_caf_attr (expr2, false, &rhs_refs_comp);
      }
  
+   tree reallocation = NULL_TREE;
    if (lss != gfc_ss_terminator)
      {
        /* The assignment needs scalarization.  */
*************** gfc_trans_assignment_1 (gfc_expr * expr1
*** 12961,12968 ****
        /* Walk the rhs.  */
        rss = gfc_walk_expr (expr2);
        if (rss == gfc_ss_terminator)
! 	/* The rhs is scalar.  Add a ss for the expression.  */
! 	rss = gfc_get_scalar_ss (gfc_ss_terminator, expr2);
        /* When doing a class assign, then the handle to the rhs needs to be a
  	 pointer to allow for polymorphism.  */
        if (is_poly_assign && expr2->rank == 0 && !UNLIMITED_POLY (expr2))
--- 12959,12970 ----
        /* Walk the rhs.  */
        rss = gfc_walk_expr (expr2);
        if (rss == gfc_ss_terminator)
! 	{
! 	  /* The rhs is scalar.  Add a ss for the expression.  */
! 	  rss = gfc_get_scalar_ss (gfc_ss_terminator, expr2);
! 	  lss->is_alloc_lhs = 0;
! 	}
! 
        /* When doing a class assign, then the handle to the rhs needs to be a
  	 pointer to allow for polymorphism.  */
        if (is_poly_assign && expr2->rank == 0 && !UNLIMITED_POLY (expr2))
*************** gfc_trans_assignment_1 (gfc_expr * expr1
*** 13011,13016 ****
--- 13013,13027 ----
  	  ompws_flags |= OMPWS_SCALARIZER_WS | OMPWS_SCALARIZER_BODY;
  	}
  
+       /* F2003: Allocate or reallocate lhs of allocatable array.  */
+       if (realloc_flag)
+ 	{
+ 	  realloc_lhs_warning (expr1->ts.type, true, &expr1->where);
+ 	  ompws_flags &= ~OMPWS_SCALARIZER_WS;
+ 	  reallocation = gfc_alloc_allocatable_for_assignment (&loop, expr1,
+ 							       expr2);
+ 	}
+ 
        /* Start the scalarized loop body.  */
        gfc_start_scalarized_body (&loop, &body);
      }
*************** gfc_trans_assignment_1 (gfc_expr * expr1
*** 13319,13333 ****
  	  gfc_add_expr_to_block (&body, tmp);
  	}
  
!       /* F2003: Allocate or reallocate lhs of allocatable array.  */
!       if (realloc_flag)
! 	{
! 	  realloc_lhs_warning (expr1->ts.type, true, &expr1->where);
! 	  ompws_flags &= ~OMPWS_SCALARIZER_WS;
! 	  tmp = gfc_alloc_allocatable_for_assignment (&loop, expr1, expr2);
! 	  if (tmp != NULL_TREE)
! 	    gfc_add_expr_to_block (&loop.code[expr1->rank - 1], tmp);
! 	}
  
        if (maybe_workshare)
  	ompws_flags &= ~OMPWS_SCALARIZER_BODY;
--- 13330,13337 ----
  	  gfc_add_expr_to_block (&body, tmp);
  	}
  
!       if (reallocation != NULL_TREE)
! 	gfc_add_expr_to_block (&loop.code[loop.dimen - 1], reallocation);
  
        if (maybe_workshare)
  	ompws_flags &= ~OMPWS_SCALARIZER_BODY;
diff -Nrcpad gcc-16-20250713/gcc/fortran/trans-openmp.cc gcc-16-20250720/gcc/fortran/trans-openmp.cc
*** gcc-16-20250713/gcc/fortran/trans-openmp.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/fortran/trans-openmp.cc	Sun Jul 20 22:32:09 2025
*************** gfc_trans_omp_declare_variant (gfc_names
*** 9714,9724 ****
  	{
  	  gfc_symtree *proc_st;
  	  gfc_find_sym_tree (variant_proc_name, gfc_current_ns, 1, &proc_st);
! 	  variant_proc_sym = proc_st->n.sym;
  	}
        if (variant_proc_sym == NULL)
  	{
! 	  gfc_error ("Cannot find symbol %qs", variant_proc_name);
  	  continue;
  	}
        set_selectors = omp_check_context_selector
--- 9714,9725 ----
  	{
  	  gfc_symtree *proc_st;
  	  gfc_find_sym_tree (variant_proc_name, gfc_current_ns, 1, &proc_st);
! 	  variant_proc_sym = proc_st ? proc_st->n.sym : NULL;
  	}
        if (variant_proc_sym == NULL)
  	{
! 	  gfc_error ("Cannot find symbol %qs at %L", variant_proc_name,
! 						     &odv->where);
  	  continue;
  	}
        set_selectors = omp_check_context_selector
diff -Nrcpad gcc-16-20250713/gcc/gcse.cc gcc-16-20250720/gcc/gcse.cc
*** gcc-16-20250713/gcc/gcse.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/gcse.cc	Sun Jul 20 22:32:09 2025
*************** execute_hardreg_pre (void)
*** 4238,4245 ****
      {
        int changed;
        current_hardreg_regno = regnos[i];
        if (dump_file)
! 	fprintf(dump_file, "Entering hardreg PRE for regno %d\n",
  		current_hardreg_regno);
        delete_unreachable_blocks ();
        df_analyze ();
--- 4238,4252 ----
      {
        int changed;
        current_hardreg_regno = regnos[i];
+       if (!df_regs_ever_live_p (current_hardreg_regno))
+ 	{
+ 	  if (dump_file)
+ 	    fprintf (dump_file, "Skipping hardreg PRE for regno %d, which is never live\n",
+ 		     current_hardreg_regno);
+ 	  continue;
+ 	}
        if (dump_file)
! 	fprintf (dump_file, "Entering hardreg PRE for regno %d\n",
  		current_hardreg_regno);
        delete_unreachable_blocks ();
        df_analyze ();
diff -Nrcpad gcc-16-20250713/gcc/gimple-fold.cc gcc-16-20250720/gcc/gimple-fold.cc
*** gcc-16-20250713/gcc/gimple-fold.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/gimple-fold.cc	Sun Jul 20 22:32:09 2025
*************** fold_nonarray_ctor_reference (tree type,
*** 9916,9925 ****
  	    {
  	      if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN)
  		return NULL_TREE;
- 	      const unsigned int encoding_size
- 		= GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (cfield)));
  	      if (BYTES_BIG_ENDIAN)
! 		inner_offset += encoding_size - wi::to_offset (field_size);
  	    }
  
  	  return fold_ctor_reference (type, cval,
--- 9916,9932 ----
  	    {
  	      if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN)
  		return NULL_TREE;
  	      if (BYTES_BIG_ENDIAN)
! 		{
! 		  tree ctype = TREE_TYPE (cfield);
! 		  unsigned int encoding_size;
! 		  if (TYPE_MODE (ctype) != BLKmode)
! 		    encoding_size
! 		      = GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (ctype));
! 		  else
! 		    encoding_size = TREE_INT_CST_LOW (TYPE_SIZE (ctype));
! 		  inner_offset += encoding_size - wi::to_offset (field_size);
! 		}
  	    }
  
  	  return fold_ctor_reference (type, cval,
diff -Nrcpad gcc-16-20250713/gcc/gimple-ssa-store-merging.cc gcc-16-20250720/gcc/gimple-ssa-store-merging.cc
*** gcc-16-20250713/gcc/gimple-ssa-store-merging.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/gimple-ssa-store-merging.cc	Sun Jul 20 22:32:09 2025
*************** find_bswap_or_nop_1 (gimple *stmt, struc
*** 644,652 ****
  
  	  /* Mask.  */
  	  uint64_t mask = 0;
! 	  uint64_t tmp = (1 << BITS_PER_UNIT) - 1;
! 	  for (unsigned i = 0; i < bitsize / BITS_PER_UNIT;
! 	       i++, tmp <<= BITS_PER_UNIT)
  	    mask |= (uint64_t) MARKER_MASK << (i * BITS_PER_MARKER);
  	  n->n &= mask;
  
--- 644,650 ----
  
  	  /* Mask.  */
  	  uint64_t mask = 0;
! 	  for (unsigned i = 0; i < bitsize / BITS_PER_UNIT; i++)
  	    mask |= (uint64_t) MARKER_MASK << (i * BITS_PER_MARKER);
  	  n->n &= mask;
  
diff -Nrcpad gcc-16-20250713/gcc/gimplify.cc gcc-16-20250720/gcc/gimplify.cc
*** gcc-16-20250713/gcc/gimplify.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/gimplify.cc	Sun Jul 20 22:32:09 2025
*************** gimplify_modify_expr (tree *expr_p, gimp
*** 7305,7310 ****
--- 7305,7311 ----
        && !(TREE_ADDRESSABLE (TREE_TYPE (*from_p))
  	   && TREE_CODE (*from_p) == CALL_EXPR))
      {
+       suppress_warning (*from_p, OPT_Wunused_result);
        gimplify_stmt (from_p, pre_p);
        gimplify_stmt (to_p, pre_p);
        *expr_p = NULL_TREE;
*************** gimplify_omp_affinity (tree *list_p, gim
*** 9526,9534 ****
      if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_AFFINITY)
        {
  	tree t = OMP_CLAUSE_DECL (c);
! 	if (TREE_CODE (t) == TREE_LIST
! 		    && TREE_PURPOSE (t)
! 		    && TREE_CODE (TREE_PURPOSE (t)) == TREE_VEC)
  	  {
  	    if (TREE_VALUE (t) == null_pointer_node)
  	      continue;
--- 9527,9533 ----
      if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_AFFINITY)
        {
  	tree t = OMP_CLAUSE_DECL (c);
! 	if (OMP_ITERATOR_DECL_P (t))
  	  {
  	    if (TREE_VALUE (t) == null_pointer_node)
  	      continue;
*************** gimplify_omp_affinity (tree *list_p, gim
*** 9633,9638 ****
--- 9632,9786 ----
    return;
  }
  
+ /* Returns a tree expression containing the total iteration count of the
+    OpenMP iterator IT.  */
+ 
+ static tree
+ compute_omp_iterator_count (tree it, gimple_seq *pre_p)
+ {
+   tree tcnt = size_one_node;
+   for (; it; it = TREE_CHAIN (it))
+     {
+       if (gimplify_expr (&TREE_VEC_ELT (it, 1), pre_p, NULL,
+ 			 is_gimple_val, fb_rvalue) == GS_ERROR
+ 	  || gimplify_expr (&TREE_VEC_ELT (it, 2), pre_p, NULL,
+ 			    is_gimple_val, fb_rvalue) == GS_ERROR
+ 	  || gimplify_expr (&TREE_VEC_ELT (it, 3), pre_p, NULL,
+ 			    is_gimple_val, fb_rvalue) == GS_ERROR
+ 	  || (gimplify_expr (&TREE_VEC_ELT (it, 4), pre_p, NULL,
+ 			     is_gimple_val, fb_rvalue) == GS_ERROR))
+ 	return NULL_TREE;
+       tree var = TREE_VEC_ELT (it, 0);
+       tree begin = TREE_VEC_ELT (it, 1);
+       tree end = TREE_VEC_ELT (it, 2);
+       tree step = TREE_VEC_ELT (it, 3);
+       tree orig_step = TREE_VEC_ELT (it, 4);
+       tree type = TREE_TYPE (var);
+       tree stype = TREE_TYPE (step);
+       location_t loc = DECL_SOURCE_LOCATION (var);
+       tree endmbegin;
+       /* Compute count for this iterator as
+ 	 orig_step > 0
+ 	 ? (begin < end ? (end - begin + (step - 1)) / step : 0)
+ 	 : (begin > end ? (end - begin + (step + 1)) / step : 0)
+ 	 and compute product of those for the entire clause.  */
+       if (POINTER_TYPE_P (type))
+ 	endmbegin = fold_build2_loc (loc, POINTER_DIFF_EXPR, stype, end, begin);
+       else
+ 	endmbegin = fold_build2_loc (loc, MINUS_EXPR, type, end, begin);
+       tree stepm1 = fold_build2_loc (loc, MINUS_EXPR, stype, step,
+ 				     build_int_cst (stype, 1));
+       tree stepp1 = fold_build2_loc (loc, PLUS_EXPR, stype, step,
+ 				     build_int_cst (stype, 1));
+       tree pos = fold_build2_loc (loc, PLUS_EXPR, stype,
+ 				  unshare_expr (endmbegin), stepm1);
+       pos = fold_build2_loc (loc, TRUNC_DIV_EXPR, stype, pos, step);
+       tree neg = fold_build2_loc (loc, PLUS_EXPR, stype, endmbegin, stepp1);
+       if (TYPE_UNSIGNED (stype))
+ 	{
+ 	  neg = fold_build1_loc (loc, NEGATE_EXPR, stype, neg);
+ 	  step = fold_build1_loc (loc, NEGATE_EXPR, stype, step);
+ 	}
+       neg = fold_build2_loc (loc, TRUNC_DIV_EXPR, stype, neg, step);
+       step = NULL_TREE;
+       tree cond = fold_build2_loc (loc, LT_EXPR, boolean_type_node, begin, end);
+       pos = fold_build3_loc (loc, COND_EXPR, stype, cond, pos,
+ 			     build_int_cst (stype, 0));
+       cond = fold_build2_loc (loc, LT_EXPR, boolean_type_node, end, begin);
+       neg = fold_build3_loc (loc, COND_EXPR, stype, cond, neg,
+ 			     build_int_cst (stype, 0));
+       tree osteptype = TREE_TYPE (orig_step);
+       cond = fold_build2_loc (loc, GT_EXPR, boolean_type_node, orig_step,
+ 			      build_int_cst (osteptype, 0));
+       tree cnt = fold_build3_loc (loc, COND_EXPR, stype, cond, pos, neg);
+       cnt = fold_convert_loc (loc, sizetype, cnt);
+       if (gimplify_expr (&cnt, pre_p, NULL, is_gimple_val,
+ 			 fb_rvalue) == GS_ERROR)
+ 	return NULL_TREE;
+       tcnt = size_binop_loc (loc, MULT_EXPR, tcnt, cnt);
+     }
+   if (gimplify_expr (&tcnt, pre_p, NULL, is_gimple_val, fb_rvalue) == GS_ERROR)
+     return NULL_TREE;
+ 
+   return tcnt;
+ }
+ 
+ /* Build loops iterating over the space defined by the OpenMP iterator IT.
+    Returns a pointer to the BIND_EXPR_BODY in the innermost loop body.
+    LAST_BIND is set to point to the BIND_EXPR containing the whole loop.  */
+ 
+ static tree *
+ build_omp_iterator_loop (tree it, gimple_seq *pre_p, tree *last_bind)
+ {
+   if (*last_bind)
+     gimplify_and_add (*last_bind, pre_p);
+   tree block = TREE_VEC_ELT (it, 5);
+   *last_bind = build3 (BIND_EXPR, void_type_node,
+ 		       BLOCK_VARS (block), NULL, block);
+   TREE_SIDE_EFFECTS (*last_bind) = 1;
+   tree *p = &BIND_EXPR_BODY (*last_bind);
+   for (; it; it = TREE_CHAIN (it))
+     {
+       tree var = TREE_VEC_ELT (it, 0);
+       tree begin = TREE_VEC_ELT (it, 1);
+       tree end = TREE_VEC_ELT (it, 2);
+       tree step = TREE_VEC_ELT (it, 3);
+       tree orig_step = TREE_VEC_ELT (it, 4);
+       tree type = TREE_TYPE (var);
+       location_t loc = DECL_SOURCE_LOCATION (var);
+       /* Emit:
+ 	 var = begin;
+ 	 goto cond_label;
+ 	 beg_label:
+ 	 ...
+ 	 var = var + step;
+ 	 cond_label:
+ 	 if (orig_step > 0) {
+ 	   if (var < end) goto beg_label;
+ 	 } else {
+ 	   if (var > end) goto beg_label;
+ 	 }
+ 	 for each iterator, with inner iterators added to
+ 	 the ... above.  */
+       tree beg_label = create_artificial_label (loc);
+       tree cond_label = NULL_TREE;
+       tree tem = build2_loc (loc, MODIFY_EXPR, void_type_node, var, begin);
+       append_to_statement_list_force (tem, p);
+       tem = build_and_jump (&cond_label);
+       append_to_statement_list_force (tem, p);
+       tem = build1 (LABEL_EXPR, void_type_node, beg_label);
+       append_to_statement_list (tem, p);
+       tree bind = build3 (BIND_EXPR, void_type_node, NULL_TREE,
+ 			  NULL_TREE, NULL_TREE);
+       TREE_SIDE_EFFECTS (bind) = 1;
+       SET_EXPR_LOCATION (bind, loc);
+       append_to_statement_list_force (bind, p);
+       if (POINTER_TYPE_P (type))
+ 	tem = build2_loc (loc, POINTER_PLUS_EXPR, type,
+ 			  var, fold_convert_loc (loc, sizetype, step));
+       else
+ 	tem = build2_loc (loc, PLUS_EXPR, type, var, step);
+       tem = build2_loc (loc, MODIFY_EXPR, void_type_node, var, tem);
+       append_to_statement_list_force (tem, p);
+       tem = build1 (LABEL_EXPR, void_type_node, cond_label);
+       append_to_statement_list (tem, p);
+       tree cond = fold_build2_loc (loc, LT_EXPR, boolean_type_node, var, end);
+       tree pos = fold_build3_loc (loc, COND_EXPR, void_type_node, cond,
+ 				  build_and_jump (&beg_label), void_node);
+       cond = fold_build2_loc (loc, GT_EXPR, boolean_type_node, var, end);
+       tree neg = fold_build3_loc (loc, COND_EXPR, void_type_node, cond,
+ 				  build_and_jump (&beg_label), void_node);
+       tree osteptype = TREE_TYPE (orig_step);
+       cond = fold_build2_loc (loc, GT_EXPR, boolean_type_node, orig_step,
+ 			      build_int_cst (osteptype, 0));
+       tem = fold_build3_loc (loc, COND_EXPR, void_type_node, cond, pos, neg);
+       append_to_statement_list_force (tem, p);
+       p = &BIND_EXPR_BODY (bind);
+     }
+ 
+   return p;
+ }
+ 
  /* If *LIST_P contains any OpenMP depend clauses with iterators,
     lower all the depend clauses by populating corresponding depend
     array.  Returns 0 if there are no such depend clauses, or
*************** gimplify_omp_depend (tree *list_p, gimpl
*** 9677,9765 ****
  	tree t = OMP_CLAUSE_DECL (c);
  	if (first_loc == UNKNOWN_LOCATION)
  	  first_loc = OMP_CLAUSE_LOCATION (c);
! 	if (TREE_CODE (t) == TREE_LIST
! 	    && TREE_PURPOSE (t)
! 	    && TREE_CODE (TREE_PURPOSE (t)) == TREE_VEC)
  	  {
  	    if (TREE_PURPOSE (t) != last_iter)
  	      {
! 		tree tcnt = size_one_node;
! 		for (tree it = TREE_PURPOSE (t); it; it = TREE_CHAIN (it))
! 		  {
! 		    if (gimplify_expr (&TREE_VEC_ELT (it, 1), pre_p, NULL,
! 				       is_gimple_val, fb_rvalue) == GS_ERROR
! 			|| gimplify_expr (&TREE_VEC_ELT (it, 2), pre_p, NULL,
! 					  is_gimple_val, fb_rvalue) == GS_ERROR
! 			|| gimplify_expr (&TREE_VEC_ELT (it, 3), pre_p, NULL,
! 					  is_gimple_val, fb_rvalue) == GS_ERROR
! 			|| (gimplify_expr (&TREE_VEC_ELT (it, 4), pre_p, NULL,
! 					   is_gimple_val, fb_rvalue)
! 			    == GS_ERROR))
! 		      return 2;
! 		    tree var = TREE_VEC_ELT (it, 0);
! 		    tree begin = TREE_VEC_ELT (it, 1);
! 		    tree end = TREE_VEC_ELT (it, 2);
! 		    tree step = TREE_VEC_ELT (it, 3);
! 		    tree orig_step = TREE_VEC_ELT (it, 4);
! 		    tree type = TREE_TYPE (var);
! 		    tree stype = TREE_TYPE (step);
! 		    location_t loc = DECL_SOURCE_LOCATION (var);
! 		    tree endmbegin;
! 		    /* Compute count for this iterator as
! 		       orig_step > 0
! 		       ? (begin < end ? (end - begin + (step - 1)) / step : 0)
! 		       : (begin > end ? (end - begin + (step + 1)) / step : 0)
! 		       and compute product of those for the entire depend
! 		       clause.  */
! 		    if (POINTER_TYPE_P (type))
! 		      endmbegin = fold_build2_loc (loc, POINTER_DIFF_EXPR,
! 						   stype, end, begin);
! 		    else
! 		      endmbegin = fold_build2_loc (loc, MINUS_EXPR, type,
! 						   end, begin);
! 		    tree stepm1 = fold_build2_loc (loc, MINUS_EXPR, stype,
! 						   step,
! 						   build_int_cst (stype, 1));
! 		    tree stepp1 = fold_build2_loc (loc, PLUS_EXPR, stype, step,
! 						   build_int_cst (stype, 1));
! 		    tree pos = fold_build2_loc (loc, PLUS_EXPR, stype,
! 						unshare_expr (endmbegin),
! 						stepm1);
! 		    pos = fold_build2_loc (loc, TRUNC_DIV_EXPR, stype,
! 					   pos, step);
! 		    tree neg = fold_build2_loc (loc, PLUS_EXPR, stype,
! 						endmbegin, stepp1);
! 		    if (TYPE_UNSIGNED (stype))
! 		      {
! 			neg = fold_build1_loc (loc, NEGATE_EXPR, stype, neg);
! 			step = fold_build1_loc (loc, NEGATE_EXPR, stype, step);
! 		      }
! 		    neg = fold_build2_loc (loc, TRUNC_DIV_EXPR, stype,
! 					   neg, step);
! 		    step = NULL_TREE;
! 		    tree cond = fold_build2_loc (loc, LT_EXPR,
! 						 boolean_type_node,
! 						 begin, end);
! 		    pos = fold_build3_loc (loc, COND_EXPR, stype, cond, pos,
! 					   build_int_cst (stype, 0));
! 		    cond = fold_build2_loc (loc, LT_EXPR, boolean_type_node,
! 					    end, begin);
! 		    neg = fold_build3_loc (loc, COND_EXPR, stype, cond, neg,
! 					   build_int_cst (stype, 0));
! 		    tree osteptype = TREE_TYPE (orig_step);
! 		    cond = fold_build2_loc (loc, GT_EXPR, boolean_type_node,
! 					    orig_step,
! 					    build_int_cst (osteptype, 0));
! 		    tree cnt = fold_build3_loc (loc, COND_EXPR, stype,
! 						cond, pos, neg);
! 		    cnt = fold_convert_loc (loc, sizetype, cnt);
! 		    if (gimplify_expr (&cnt, pre_p, NULL, is_gimple_val,
! 				       fb_rvalue) == GS_ERROR)
! 		      return 2;
! 		    tcnt = size_binop_loc (loc, MULT_EXPR, tcnt, cnt);
! 		  }
! 		if (gimplify_expr (&tcnt, pre_p, NULL, is_gimple_val,
! 				   fb_rvalue) == GS_ERROR)
  		  return 2;
  		last_iter = TREE_PURPOSE (t);
  		last_count = tcnt;
--- 9825,9837 ----
  	tree t = OMP_CLAUSE_DECL (c);
  	if (first_loc == UNKNOWN_LOCATION)
  	  first_loc = OMP_CLAUSE_LOCATION (c);
! 	if (OMP_ITERATOR_DECL_P (t))
  	  {
  	    if (TREE_PURPOSE (t) != last_iter)
  	      {
! 		tree tcnt = compute_omp_iterator_count (TREE_PURPOSE (t),
! 							pre_p);
! 		if (!tcnt)
  		  return 2;
  		last_iter = TREE_PURPOSE (t);
  		last_count = tcnt;
*************** gimplify_omp_depend (tree *list_p, gimpl
*** 9913,10003 ****
  	    gcc_unreachable ();
  	  }
  	tree t = OMP_CLAUSE_DECL (c);
! 	if (TREE_CODE (t) == TREE_LIST
! 	    && TREE_PURPOSE (t)
! 	    && TREE_CODE (TREE_PURPOSE (t)) == TREE_VEC)
  	  {
  	    if (TREE_PURPOSE (t) != last_iter)
  	      {
! 		if (last_bind)
! 		  gimplify_and_add (last_bind, pre_p);
! 		tree block = TREE_VEC_ELT (TREE_PURPOSE (t), 5);
! 		last_bind = build3 (BIND_EXPR, void_type_node,
! 				    BLOCK_VARS (block), NULL, block);
! 		TREE_SIDE_EFFECTS (last_bind) = 1;
  		SET_EXPR_LOCATION (last_bind, OMP_CLAUSE_LOCATION (c));
- 		tree *p = &BIND_EXPR_BODY (last_bind);
- 		for (tree it = TREE_PURPOSE (t); it; it = TREE_CHAIN (it))
- 		  {
- 		    tree var = TREE_VEC_ELT (it, 0);
- 		    tree begin = TREE_VEC_ELT (it, 1);
- 		    tree end = TREE_VEC_ELT (it, 2);
- 		    tree step = TREE_VEC_ELT (it, 3);
- 		    tree orig_step = TREE_VEC_ELT (it, 4);
- 		    tree type = TREE_TYPE (var);
- 		    location_t loc = DECL_SOURCE_LOCATION (var);
- 		    /* Emit:
- 		       var = begin;
- 		       goto cond_label;
- 		       beg_label:
- 		       ...
- 		       var = var + step;
- 		       cond_label:
- 		       if (orig_step > 0) {
- 			 if (var < end) goto beg_label;
- 		       } else {
- 			 if (var > end) goto beg_label;
- 		       }
- 		       for each iterator, with inner iterators added to
- 		       the ... above.  */
- 		    tree beg_label = create_artificial_label (loc);
- 		    tree cond_label = NULL_TREE;
- 		    tem = build2_loc (loc, MODIFY_EXPR, void_type_node,
- 				      var, begin);
- 		    append_to_statement_list_force (tem, p);
- 		    tem = build_and_jump (&cond_label);
- 		    append_to_statement_list_force (tem, p);
- 		    tem = build1 (LABEL_EXPR, void_type_node, beg_label);
- 		    append_to_statement_list (tem, p);
- 		    tree bind = build3 (BIND_EXPR, void_type_node, NULL_TREE,
- 					NULL_TREE, NULL_TREE);
- 		    TREE_SIDE_EFFECTS (bind) = 1;
- 		    SET_EXPR_LOCATION (bind, loc);
- 		    append_to_statement_list_force (bind, p);
- 		    if (POINTER_TYPE_P (type))
- 		      tem = build2_loc (loc, POINTER_PLUS_EXPR, type,
- 					var, fold_convert_loc (loc, sizetype,
- 							       step));
- 		    else
- 		      tem = build2_loc (loc, PLUS_EXPR, type, var, step);
- 		    tem = build2_loc (loc, MODIFY_EXPR, void_type_node,
- 				      var, tem);
- 		    append_to_statement_list_force (tem, p);
- 		    tem = build1 (LABEL_EXPR, void_type_node, cond_label);
- 		    append_to_statement_list (tem, p);
- 		    tree cond = fold_build2_loc (loc, LT_EXPR,
- 						 boolean_type_node,
- 						 var, end);
- 		    tree pos
- 		      = fold_build3_loc (loc, COND_EXPR, void_type_node,
- 					 cond, build_and_jump (&beg_label),
- 					 void_node);
- 		    cond = fold_build2_loc (loc, GT_EXPR, boolean_type_node,
- 					    var, end);
- 		    tree neg
- 		      = fold_build3_loc (loc, COND_EXPR, void_type_node,
- 					 cond, build_and_jump (&beg_label),
- 					 void_node);
- 		    tree osteptype = TREE_TYPE (orig_step);
- 		    cond = fold_build2_loc (loc, GT_EXPR, boolean_type_node,
- 					    orig_step,
- 					    build_int_cst (osteptype, 0));
- 		    tem = fold_build3_loc (loc, COND_EXPR, void_type_node,
- 					   cond, pos, neg);
- 		    append_to_statement_list_force (tem, p);
- 		    p = &BIND_EXPR_BODY (bind);
- 		  }
- 		last_body = p;
  	      }
  	    last_iter = TREE_PURPOSE (t);
  	    if (TREE_CODE (TREE_VALUE (t)) == COMPOUND_EXPR)
--- 9985,9997 ----
  	    gcc_unreachable ();
  	  }
  	tree t = OMP_CLAUSE_DECL (c);
! 	if (OMP_ITERATOR_DECL_P (t))
  	  {
  	    if (TREE_PURPOSE (t) != last_iter)
  	      {
! 		last_body = build_omp_iterator_loop (TREE_PURPOSE (t), pre_p,
! 						     &last_bind);
  		SET_EXPR_LOCATION (last_bind, OMP_CLAUSE_LOCATION (c));
  	      }
  	    last_iter = TREE_PURPOSE (t);
  	    if (TREE_CODE (TREE_VALUE (t)) == COMPOUND_EXPR)
diff -Nrcpad gcc-16-20250713/gcc/go/ChangeLog gcc-16-20250720/gcc/go/ChangeLog
*** gcc-16-20250713/gcc/go/ChangeLog	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/go/ChangeLog	Sun Jul 20 22:32:09 2025
***************
*** 1,3 ****
--- 1,10 ----
+ 2025-07-15  Jakub Jelinek  <jakub@redhat.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c/44677
+ 	* gofrontend/gogo.cc (Function::export_func_with_type): Remove
+ 	unused but set variable i.
+ 
  2025-02-05  Ian Lance Taylor  <iant@golang.org>
  
  	PR go/118746
diff -Nrcpad gcc-16-20250713/gcc/go/gofrontend/gogo.cc gcc-16-20250720/gcc/go/gofrontend/gogo.cc
*** gcc-16-20250713/gcc/go/gofrontend/gogo.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/go/gofrontend/gogo.cc	Sun Jul 20 22:32:09 2025
*************** Function::export_func_with_type(Export*
*** 5987,5998 ****
    const Typed_identifier_list* parameters = fntype->parameters();
    if (parameters != NULL)
      {
-       size_t i = 0;
        bool is_varargs = fntype->is_varargs();
        bool first = true;
        for (Typed_identifier_list::const_iterator p = parameters->begin();
  	   p != parameters->end();
! 	   ++p, ++i)
  	{
  	  if (first)
  	    first = false;
--- 5987,5997 ----
    const Typed_identifier_list* parameters = fntype->parameters();
    if (parameters != NULL)
      {
        bool is_varargs = fntype->is_varargs();
        bool first = true;
        for (Typed_identifier_list::const_iterator p = parameters->begin();
  	   p != parameters->end();
! 	   ++p)
  	{
  	  if (first)
  	    first = false;
diff -Nrcpad gcc-16-20250713/gcc/internal-fn.cc gcc-16-20250720/gcc/internal-fn.cc
*** gcc-16-20250713/gcc/internal-fn.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/internal-fn.cc	Sun Jul 20 22:32:09 2025
*************** widening_fn_p (code_helper code)
*** 4548,4553 ****
--- 4548,4580 ----
      }
  }
  
+ /* Return true if this CODE describes an internal_fn that returns a vector with
+    elements twice as wide as the element size of the input vectors and operates
+    on even/odd parts of the input.  */
+ 
+ bool
+ widening_evenodd_fn_p (code_helper code)
+ {
+   if (!code.is_fn_code ())
+     return false;
+ 
+   if (!internal_fn_p ((combined_fn) code))
+     return false;
+ 
+   internal_fn fn = as_internal_fn ((combined_fn) code);
+   switch (fn)
+     {
+     #define DEF_INTERNAL_WIDENING_OPTAB_FN(NAME, F, S, SO, UO, T) \
+     case IFN_##NAME##_EVEN:					  \
+     case IFN_##NAME##_ODD:					  \
+       return true;
+     #include "internal-fn.def"
+ 
+     default:
+       return false;
+     }
+ }
+ 
  /* Return true if IFN_SET_EDOM is supported.  */
  
  bool
diff -Nrcpad gcc-16-20250713/gcc/internal-fn.h gcc-16-20250720/gcc/internal-fn.h
*** gcc-16-20250713/gcc/internal-fn.h	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/internal-fn.h	Sun Jul 20 22:32:09 2025
*************** extern bool commutative_ternary_fn_p (in
*** 219,224 ****
--- 219,225 ----
  extern int first_commutative_argument (internal_fn);
  extern bool associative_binary_fn_p (internal_fn);
  extern bool widening_fn_p (code_helper);
+ extern bool widening_evenodd_fn_p (code_helper);
  
  extern bool set_edom_supported_p (void);
  
diff -Nrcpad gcc-16-20250713/gcc/ipa-strub.cc gcc-16-20250720/gcc/ipa-strub.cc
*** gcc-16-20250713/gcc/ipa-strub.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/ipa-strub.cc	Sun Jul 20 22:32:09 2025
*************** pass_ipa_strub::execute (function *)
*** 3059,3064 ****
--- 3059,3066 ----
  			 TYPE_ATTRIBUTES (TREE_TYPE (nnode->decl)));
  	}
      }
+ #else
+     (void) named_args;
  #endif
  
      {
diff -Nrcpad gcc-16-20250713/gcc/libgdiagnostics++.h gcc-16-20250720/gcc/libgdiagnostics++.h
*** gcc-16-20250713/gcc/libgdiagnostics++.h	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/libgdiagnostics++.h	Sun Jul 20 22:32:09 2025
*************** class diagnostic;
*** 37,42 ****
--- 37,43 ----
  class graph;
  class node;
  class edge;
+ class message_buffer;
  
  /* Wrapper around a borrowed diagnostic_text_sink *.  */
  
*************** public:
*** 134,139 ****
--- 135,199 ----
    const diagnostic_logical_location *m_inner;
  };
  
+ /* Wrapper around a diagnostic_message_buffer *, with ownership.  */
+ 
+ class message_buffer
+ {
+ public:
+   message_buffer () : m_inner (nullptr) {}
+   message_buffer (diagnostic_message_buffer *inner) : m_inner (inner) {}
+   ~message_buffer ()
+   {
+     if (m_inner)
+       diagnostic_message_buffer_release (m_inner);
+   }
+   message_buffer (const message_buffer &) = delete;
+   message_buffer (message_buffer &&other)
+   {
+     m_inner = other.m_inner;
+     other.m_inner = nullptr;
+   }
+   message_buffer& operator= (const message_buffer &) = delete;
+   message_buffer& operator= (message_buffer &&other)
+   {
+     if (m_inner)
+       diagnostic_message_buffer_release (m_inner);
+     m_inner = other.m_inner;
+     other.m_inner = nullptr;
+     return *this;
+   }
+ 
+   message_buffer&
+   operator+= (const char *str)
+   {
+     diagnostic_message_buffer_append_str (m_inner, str);
+     return *this;
+   }
+ 
+   message_buffer&
+   operator+= (char ch)
+   {
+     diagnostic_message_buffer_append_byte (m_inner, ch);
+     return *this;
+   }
+ 
+   message_buffer &
+   begin_url (const char *url)
+   {
+     diagnostic_message_buffer_begin_url (m_inner, url);
+     return *this;
+   }
+ 
+   message_buffer &
+   end_url ()
+   {
+     diagnostic_message_buffer_end_url (m_inner);
+     return *this;
+   }
+ 
+   diagnostic_message_buffer *m_inner;
+ };
+ 
  /* RAII class around a diagnostic_execution_path *.  */
  
  class execution_path
*************** public:
*** 191,196 ****
--- 251,262 ----
  		va_list *args)
      LIBGDIAGNOSTICS_PARAM_GCC_FORMAT_STRING (5, 0);
  
+   diagnostic_event_id
+   add_event_via_msg_buf (physical_location physical_loc,
+ 			 logical_location logical_loc,
+ 			 unsigned stack_depth,
+ 			 message_buffer &&msg_buf);
+ 
    diagnostic_execution_path *m_inner;
    bool m_owned;
  };
*************** public:
*** 231,236 ****
--- 297,306 ----
  			   const char *text);
  
    void
+   add_location_with_label (physical_location loc,
+ 			   message_buffer &&text);
+ 
+   void
    set_logical_location (logical_location loc);
  
    void
*************** public:
*** 261,266 ****
--- 331,339 ----
      LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (2)
      LIBGDIAGNOSTICS_PARAM_GCC_FORMAT_STRING (2, 0);
  
+   void
+   finish_via_msg_buf (message_buffer &&msg_buf);
+ 
    ::diagnostic * const m_inner;
  };
  
*************** public:
*** 450,455 ****
--- 523,530 ----
  
    void
    set_description (const char *);
+   void
+   set_description (message_buffer &&);
  
    node
    get_node_by_id (const char *id) const;
*************** public:
*** 459,464 ****
--- 534,541 ----
  
    edge
    add_edge (const char *id, node src_node, node dst_node, const char *label);
+   edge
+   add_edge (const char *id, node src_node, node dst_node, message_buffer &&label);
  
    diagnostic_graph *m_inner;
    bool m_owned;
*************** public:
*** 474,479 ****
--- 551,558 ----
  
    void
    set_label (const char *);
+   void
+   set_label (message_buffer &&);
  
    void
    set_location (physical_location loc);
*************** execution_path::add_event_va (physical_l
*** 591,596 ****
--- 670,690 ----
  						 args);
  }
  
+ inline diagnostic_event_id
+ execution_path::add_event_via_msg_buf (physical_location physical_loc,
+ 				       logical_location logical_loc,
+ 				       unsigned stack_depth,
+ 				       message_buffer &&msg_buf)
+ {
+   diagnostic_message_buffer *inner_msg_buf = msg_buf.m_inner;
+   msg_buf.m_inner = nullptr;
+   return diagnostic_execution_path_add_event_via_msg_buf (m_inner,
+ 							  physical_loc.m_inner,
+ 							  logical_loc.m_inner,
+ 							  stack_depth,
+ 							  inner_msg_buf);
+ }
+ 
  // class group
  
  inline
*************** diagnostic::add_location_with_label (phy
*** 634,639 ****
--- 728,744 ----
  }
  
  inline void
+ diagnostic::add_location_with_label (physical_location loc,
+ 				     message_buffer &&msg_buf)
+ {
+   diagnostic_message_buffer *inner_msg_buf = msg_buf.m_inner;
+   msg_buf.m_inner = nullptr;
+   diagnostic_add_location_with_label_via_msg_buf (m_inner,
+ 						  loc.m_inner,
+ 						  inner_msg_buf);
+ }
+ 
+ inline void
  diagnostic::add_location (physical_location loc)
  {
    diagnostic_add_location (m_inner, loc.m_inner);
*************** diagnostic::finish_va (const char *fmt,
*** 710,715 ****
--- 815,828 ----
    diagnostic_finish_va (m_inner, fmt, args);
  }
  
+ inline void
+ diagnostic::finish_via_msg_buf (message_buffer &&msg_buf)
+ {
+   diagnostic_message_buffer *inner_msg_buf = msg_buf.m_inner;
+   msg_buf.m_inner = nullptr;
+   diagnostic_finish_via_msg_buf (m_inner, inner_msg_buf);
+ }
+ 
  // class manager
  
  inline file
*************** graph::set_description (const char *desc
*** 821,826 ****
--- 934,947 ----
    diagnostic_graph_set_description (m_inner, desc);
  }
  
+ inline void
+ graph::set_description (message_buffer &&msg_buf)
+ {
+   diagnostic_message_buffer *inner_msg_buf = msg_buf.m_inner;
+   msg_buf.m_inner = nullptr;
+   diagnostic_graph_set_description_via_msg_buf (m_inner, inner_msg_buf);
+ }
+ 
  inline node
  graph::get_node_by_id (const char *id) const
  {
*************** graph::add_edge (const char *id,
*** 845,850 ****
--- 966,985 ----
  					  label));
  }
  
+ inline edge
+ graph::add_edge (const char *id,
+ 		 node src_node, node dst_node,
+ 		 message_buffer &&label)
+ {
+   diagnostic_message_buffer *inner_label = label.m_inner;
+   label.m_inner = nullptr;
+   return edge (diagnostic_graph_add_edge_via_msg_buf (m_inner,
+ 						      id,
+ 						      src_node.m_inner,
+ 						      dst_node.m_inner,
+ 						      inner_label));
+ }
+ 
  // class node
  
  inline void
*************** node::set_label (const char *label)
*** 854,859 ****
--- 989,1002 ----
  }
  
  inline void
+ node::set_label (message_buffer &&label)
+ {
+   diagnostic_message_buffer *inner_label = label.m_inner;
+   label.m_inner = nullptr;
+   diagnostic_node_set_label_via_msg_buf (m_inner, inner_label);
+ }
+ 
+ inline void
  node::set_location (physical_location loc)
  {
    diagnostic_node_set_location (m_inner, loc.m_inner);
diff -Nrcpad gcc-16-20250713/gcc/libgdiagnostics-private.h gcc-16-20250720/gcc/libgdiagnostics-private.h
*** gcc-16-20250713/gcc/libgdiagnostics-private.h	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/libgdiagnostics-private.h	Sun Jul 20 22:32:09 2025
*************** extern "C" {
*** 31,50 ****
  
  /* Entrypoints added in LIBGDIAGNOSTICS_ABI_3.  */
  
- extern diagnostic_event_id
- private_diagnostic_execution_path_add_event_2 (diagnostic_execution_path *path,
- 					       const diagnostic_physical_location *physical_loc,
- 					       const diagnostic_logical_location *logical_loc,
- 					       unsigned stack_depth,
- 					       diagnostic_graph *state_graph,
- 					       const char *fmt, ...)
-   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
-   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (2)
-   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (3)
-   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (5)
-   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (6)
-   LIBGDIAGNOSTICS_PARAM_GCC_FORMAT_STRING (6, 7);
- 
  extern void
  private_diagnostic_graph_set_property_bag (diagnostic_graph &graph,
  					   std::unique_ptr<json::object> properties);
--- 31,36 ----
*************** extern void
*** 57,62 ****
--- 43,63 ----
  private_diagnostic_edge_set_property_bag (diagnostic_edge &edge,
  					  std::unique_ptr<json::object> properties);
  
+ /* Entrypoint added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern diagnostic_event_id
+ private_diagnostic_execution_path_add_event_3 (diagnostic_execution_path *path,
+ 					       const diagnostic_physical_location *physical_loc,
+ 					       const diagnostic_logical_location *logical_loc,
+ 					       unsigned stack_depth,
+ 					       diagnostic_graph *state_graph,
+ 					       diagnostic_message_buffer *msg_buf)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (2)
+   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (3)
+   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (5)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (6);
+ 
  } // extern "C"
  
  #endif  /* LIBGDIAGNOSTICS_PRIVATE_H  */
diff -Nrcpad gcc-16-20250713/gcc/libgdiagnostics.cc gcc-16-20250720/gcc/libgdiagnostics.cc
*** gcc-16-20250713/gcc/libgdiagnostics.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/libgdiagnostics.cc	Sun Jul 20 22:32:09 2025
*************** along with GCC; see the file COPYING3.
*** 39,44 ****
--- 39,47 ----
  #include "edit-context.h"
  #include "libgdiagnostics.h"
  #include "libgdiagnostics-private.h"
+ #include "pretty-print-format-impl.h"
+ #include "pretty-print-markup.h"
+ #include "auto-obstack.h"
  
  class owned_nullable_string
  {
*************** private:
*** 246,251 ****
--- 249,345 ----
    diagnostic_source_printing_options m_source_printing;
  };
  
+ /* A token_printer that makes a deep copy of the pp_token_list
+    into another obstack.  */
+ 
+ class copying_token_printer : public token_printer
+ {
+ public:
+   copying_token_printer (obstack &dst_obstack,
+ 			 pp_token_list &dst_token_list)
+   : m_dst_obstack (dst_obstack),
+     m_dst_token_list (dst_token_list)
+   {
+   }
+ 
+   void
+   print_tokens (pretty_printer *,
+ 		const pp_token_list &tokens) final override
+   {
+     for (auto iter = tokens.m_first; iter; iter = iter->m_next)
+       switch (iter->m_kind)
+ 	{
+ 	default:
+ 	  gcc_unreachable ();
+ 
+ 	case pp_token::kind::text:
+ 	  {
+ 	    const pp_token_text *sub = as_a <const pp_token_text *> (iter);
+ 	    /* Copy the text, with null terminator.  */
+ 	    obstack_grow (&m_dst_obstack, sub->m_value.get (),
+ 			  strlen (sub->m_value.get ()) + 1);
+ 	    m_dst_token_list.push_back_text
+ 	      (label_text::borrow (XOBFINISH (&m_dst_obstack,
+ 					      const char *)));
+ 	  }
+ 	  break;
+ 
+ 	case pp_token::kind::begin_color:
+ 	  {
+ 	    pp_token_begin_color *sub = as_a <pp_token_begin_color *> (iter);
+ 	    /* Copy the color, with null terminator.  */
+ 	    obstack_grow (&m_dst_obstack, sub->m_value.get (),
+ 			  strlen (sub->m_value.get ()) + 1);
+ 	    m_dst_token_list.push_back<pp_token_begin_color>
+ 	      (label_text::borrow (XOBFINISH (&m_dst_obstack,
+ 					      const char *)));
+ 	  }
+ 	  break;
+ 	case pp_token::kind::end_color:
+ 	  m_dst_token_list.push_back<pp_token_end_color> ();
+ 	  break;
+ 
+ 	case pp_token::kind::begin_quote:
+ 	  m_dst_token_list.push_back<pp_token_begin_quote> ();
+ 	  break;
+ 	case pp_token::kind::end_quote:
+ 	  m_dst_token_list.push_back<pp_token_end_quote> ();
+ 	  break;
+ 
+ 	case pp_token::kind::begin_url:
+ 	  {
+ 	    pp_token_begin_url *sub = as_a <pp_token_begin_url *> (iter);
+ 	    /* Copy the URL, with null terminator.  */
+ 	    obstack_grow (&m_dst_obstack, sub->m_value.get (),
+ 			  strlen (sub->m_value.get ()) + 1);
+ 	    m_dst_token_list.push_back<pp_token_begin_url>
+ 	      (label_text::borrow (XOBFINISH (&m_dst_obstack,
+ 					      const char *)));
+ 	  }
+ 	  break;
+ 	case pp_token::kind::end_url:
+ 	  m_dst_token_list.push_back<pp_token_end_url> ();
+ 	  break;
+ 
+ 	case pp_token::kind::event_id:
+ 	  {
+ 	    pp_token_event_id *sub = as_a <pp_token_event_id *> (iter);
+ 	    m_dst_token_list.push_back<pp_token_event_id> (sub->m_event_id);
+ 	  }
+ 	  break;
+ 
+ 	case pp_token::kind::custom_data:
+ 	  /* These should have been eliminated by replace_custom_tokens.  */
+ 	  gcc_unreachable ();
+ 	  break;
+ 	}
+   }
+ 
+ private:
+   obstack &m_dst_obstack;
+   pp_token_list &m_dst_token_list;
+ };
+ 
  class sarif_sink : public sink
  {
  public:
*************** public:
*** 255,260 ****
--- 349,455 ----
  	      const sarif_generation_options &sarif_gen_opts);
  };
  
+ struct diagnostic_message_buffer
+ {
+   diagnostic_message_buffer ()
+   : m_tokens (m_obstack)
+   {
+   }
+ 
+   diagnostic_message_buffer (const char *gmsgid,
+ 			     va_list *args)
+   : m_tokens (m_obstack)
+   {
+     text_info text (gmsgid, args, errno);
+     pretty_printer pp;
+     pp.set_output_stream (nullptr);
+     copying_token_printer tok_printer (m_obstack, m_tokens);
+     pp.set_token_printer (&tok_printer);
+     pp_format (&pp, &text);
+     pp_output_formatted_text (&pp, nullptr);
+   }
+ 
+ 
+   std::string to_string () const;
+ 
+   auto_obstack m_obstack;
+   pp_token_list m_tokens;
+ };
+ 
+ /* A pp_element subclass that replays the saved tokens in a
+    diagnostic_message_buffer.  */
+ 
+ class pp_element_message_buffer : public pp_element
+ {
+ public:
+   pp_element_message_buffer (diagnostic_message_buffer &msg_buf)
+     : m_msg_buf (msg_buf)
+   {
+   }
+ 
+   void add_to_phase_2 (pp_markup::context &ctxt) final override
+   {
+     /* Convert to text, possibly with colorization, URLs, etc.  */
+     for (auto iter = m_msg_buf.m_tokens.m_first; iter; iter = iter->m_next)
+       switch (iter->m_kind)
+ 	{
+ 	default:
+ 	  gcc_unreachable ();
+ 
+ 	case pp_token::kind::text:
+ 	  {
+ 	    pp_token_text *sub = as_a <pp_token_text *> (iter);
+ 	    pp_string (&ctxt.m_pp, sub->m_value.get ());
+ 	    ctxt.push_back_any_text ();
+ 	  }
+ 	  break;
+ 
+ 	case pp_token::kind::begin_color:
+ 	  {
+ 	    pp_token_begin_color *sub = as_a <pp_token_begin_color *> (iter);
+ 	    ctxt.begin_highlight_color (sub->m_value.get ());
+ 	  }
+ 	  break;
+ 	case pp_token::kind::end_color:
+ 	  ctxt.end_highlight_color ();
+ 	  break;
+ 
+ 	case pp_token::kind::begin_quote:
+ 	  ctxt.begin_quote ();
+ 	  break;
+ 	case pp_token::kind::end_quote:
+ 	  ctxt.end_quote ();
+ 	  break;
+ 
+ 	case pp_token::kind::begin_url:
+ 	  {
+ 	    pp_token_begin_url *sub = as_a <pp_token_begin_url *> (iter);
+ 	    ctxt.begin_url (sub->m_value.get ());
+ 	  }
+ 	  break;
+ 	case pp_token::kind::end_url:
+ 	  ctxt.end_url ();
+ 	  break;
+ 
+ 	case pp_token::kind::event_id:
+ 	  {
+ 	    pp_token_event_id *sub = as_a <pp_token_event_id *> (iter);
+ 	    gcc_assert (sub->m_event_id.known_p ());
+ 	    ctxt.add_event_id (sub->m_event_id);
+ 	  }
+ 	  break;
+ 
+ 	case pp_token::kind::custom_data:
+ 	  /* We don't have a way of handling custom_data tokens here.  */
+ 	  gcc_unreachable ();
+ 	  break;
+ 	}
+   }
+ 
+ private:
+   diagnostic_message_buffer &m_msg_buf;
+ };
+ 
  /* Helper for the linemap code.  */
  
  static size_t
*************** public:
*** 508,516 ****
      m_sinks.push_back (std::move (sink));
    }
  
!   void emit (diagnostic &diag, const char *msgid, va_list *args)
      LIBGDIAGNOSTICS_PARAM_GCC_FORMAT_STRING(3, 0);
  
    diagnostic_file *
    new_file (const char *name,
  	    const char *sarif_source_language)
--- 703,717 ----
      m_sinks.push_back (std::move (sink));
    }
  
!   void emit_va (diagnostic &diag, const char *msgid, va_list *args)
      LIBGDIAGNOSTICS_PARAM_GCC_FORMAT_STRING(3, 0);
  
+   void emit (diagnostic &diag, const char *msgid, ...)
+     LIBGDIAGNOSTICS_PARAM_GCC_FORMAT_STRING(3, 4);
+ 
+   void emit_msg_buf (diagnostic &diag,
+ 		     diagnostic_message_buffer &msg_buf);
+ 
    diagnostic_file *
    new_file (const char *name,
  	    const char *sarif_source_language)
*************** struct diagnostic_graph : public diagnos
*** 755,764 ****
    diagnostic_graph (diagnostic_manager &) {}
  
    diagnostic_node *
!   add_node_with_id (std::string id,
  		    diagnostic_node *parent_node);
    diagnostic_edge *
!   add_edge_with_label (const char *id,
  		       diagnostic_node &src_node,
  		       diagnostic_node &dst_node,
  		       const char *label);
--- 956,965 ----
    diagnostic_graph (diagnostic_manager &) {}
  
    diagnostic_node *
!   add_node_with_id (std::string node_id,
  		    diagnostic_node *parent_node);
    diagnostic_edge *
!   add_edge_with_label (const char *edge_id,
  		       diagnostic_node &src_node,
  		       diagnostic_node &dst_node,
  		       const char *label);
*************** public:
*** 791,805 ****
  			      const diagnostic_logical_location *logical_loc,
  			      unsigned stack_depth,
  			      std::unique_ptr<diagnostic_graph> state_graph,
! 			      const char *gmsgid,
! 			      va_list *args)
    : m_physical_loc (physical_loc),
      m_logical_loc (logical_loc),
      m_stack_depth (stack_depth),
!     m_state_graph (std::move (state_graph))
    {
!     m_desc_uncolored = make_desc (gmsgid, args, false);
!     m_desc_colored = make_desc (gmsgid, args, true);
    }
  
    /* diagnostic_event vfunc implementations.  */
--- 992,1005 ----
  			      const diagnostic_logical_location *logical_loc,
  			      unsigned stack_depth,
  			      std::unique_ptr<diagnostic_graph> state_graph,
! 			      std::unique_ptr<diagnostic_message_buffer> msg_buf)
    : m_physical_loc (physical_loc),
      m_logical_loc (logical_loc),
      m_stack_depth (stack_depth),
!     m_state_graph (std::move (state_graph)),
!     m_msg_buf (std::move (msg_buf))
    {
!     gcc_assert (m_msg_buf);
    }
  
    /* diagnostic_event vfunc implementations.  */
*************** public:
*** 816,825 ****
  
    void print_desc (pretty_printer &pp) const final override
    {
!     if (pp_show_color (&pp))
!       pp_string (&pp, m_desc_colored.get ());
!     else
!       pp_string (&pp, m_desc_uncolored.get ());
    }
  
    logical_location get_logical_location () const final override
--- 1016,1026 ----
  
    void print_desc (pretty_printer &pp) const final override
    {
!     if (m_msg_buf)
!       {
! 	pp_element_message_buffer e_msg_buf (*m_msg_buf);
! 	pp_printf (&pp, "%e", &e_msg_buf);
!       }
    }
  
    logical_location get_logical_location () const final override
*************** private:
*** 877,884 ****
    const diagnostic_logical_location *m_logical_loc;
    unsigned m_stack_depth;
    std::unique_ptr<diagnostic_graph> m_state_graph;
!   label_text m_desc_uncolored;
!   label_text m_desc_colored;
  };
  
  class libgdiagnostics_path_thread : public diagnostic_thread
--- 1078,1084 ----
    const diagnostic_logical_location *m_logical_loc;
    unsigned m_stack_depth;
    std::unique_ptr<diagnostic_graph> m_state_graph;
!   std::unique_ptr<diagnostic_message_buffer> m_msg_buf;
  };
  
  class libgdiagnostics_path_thread : public diagnostic_thread
*************** struct diagnostic_execution_path : publi
*** 912,924 ****
  		const char *gmsgid,
  		va_list *args)
    {
      m_events.push_back
        (std::make_unique<libgdiagnostics_path_event> (physical_loc,
  						     logical_loc,
  						     stack_depth,
  						     std::move (state_graph),
! 						     gmsgid,
! 						     args));
      return m_events.size () - 1;
    }
  
--- 1112,1141 ----
  		const char *gmsgid,
  		va_list *args)
    {
+     auto msg_buf = std::make_unique<diagnostic_message_buffer> (gmsgid, args);
+ 
      m_events.push_back
        (std::make_unique<libgdiagnostics_path_event> (physical_loc,
  						     logical_loc,
  						     stack_depth,
  						     std::move (state_graph),
! 						     std::move (msg_buf)));
!     return m_events.size () - 1;
!   }
! 
!   diagnostic_event_id_t
!   add_event_via_msg_buf (const diagnostic_physical_location *physical_loc,
! 			 const diagnostic_logical_location *logical_loc,
! 			 unsigned stack_depth,
! 			 std::unique_ptr<diagnostic_graph> state_graph,
! 			 std::unique_ptr<diagnostic_message_buffer> msg_buf)
!   {
!     m_events.push_back
!       (std::make_unique<libgdiagnostics_path_event> (physical_loc,
! 						     logical_loc,
! 						     stack_depth,
! 						     std::move (state_graph),
! 						     std::move (msg_buf)));
      return m_events.size () - 1;
    }
  
*************** public:
*** 1042,1047 ****
--- 1259,1277 ----
    }
  
    void
+   add_location_with_label (const diagnostic_physical_location *loc,
+ 			   std::unique_ptr<diagnostic_message_buffer> msg_buf)
+   {
+     std::string str = msg_buf->to_string ();
+     std::unique_ptr<range_label> label
+       = std::make_unique <impl_range_label> (str.c_str ());
+     m_rich_loc.add_range (as_location_t (loc),
+ 			  SHOW_RANGE_WITHOUT_CARET,
+ 			  label.get ());
+     m_labels.push_back (std::move (label));
+   }
+ 
+   void
    set_logical_location (const diagnostic_logical_location *logical_loc)
    {
      m_logical_loc = logical_loc;
*************** sarif_sink::sarif_sink (diagnostic_manag
*** 1290,1295 ****
--- 1520,1583 ----
    mgr.get_dc ().add_sink (std::move (inner_sink));
  }
  
+ // struct diagnostic_message_buffer
+ 
+ std::string
+ diagnostic_message_buffer::to_string () const
+ {
+   std::string result;
+ 
+   /* Convert to text, dropping colorization, URLs, etc.  */
+   for (auto iter = m_tokens.m_first; iter; iter = iter->m_next)
+     switch (iter->m_kind)
+       {
+       default:
+ 	gcc_unreachable ();
+ 
+       case pp_token::kind::text:
+ 	{
+ 	  pp_token_text *sub = as_a <pp_token_text *> (iter);
+ 	  result += sub->m_value.get ();
+ 	}
+ 	break;
+ 
+       case pp_token::kind::begin_color:
+       case pp_token::kind::end_color:
+ 	// Skip
+ 	break;
+ 
+       case pp_token::kind::begin_quote:
+ 	result += open_quote;
+ 	break;
+ 
+       case pp_token::kind::end_quote:
+ 	result += close_quote;
+ 	break;
+ 
+       case pp_token::kind::begin_url:
+       case pp_token::kind::end_url:
+ 	// Skip
+ 	break;
+ 
+       case pp_token::kind::event_id:
+ 	{
+ 	  pp_token_event_id *sub = as_a <pp_token_event_id *> (iter);
+ 	  gcc_assert (sub->m_event_id.known_p ());
+ 	  result += '(';
+ 	  result += std::to_string (sub->m_event_id.one_based ());
+ 	  result += ')';
+ 	}
+ 	break;
+ 
+       case pp_token::kind::custom_data:
+ 	/* We don't have a way of handling custom_data tokens here.  */
+ 	gcc_unreachable ();
+ 	break;
+       }
+ 
+   return result;
+ }
+ 
  /* struct diagnostic_manager.  */
  
  void
*************** diagnostic_manager::write_patch (FILE *d
*** 1302,1308 ****
  }
  
  void
! diagnostic_manager::emit (diagnostic &diag, const char *msgid, va_list *args)
  {
    set_line_table_global ();
  
--- 1590,1596 ----
  }
  
  void
! diagnostic_manager::emit_va (diagnostic &diag, const char *msgid, va_list *args)
  {
    set_line_table_global ();
  
*************** GCC_DIAGNOSTIC_POP
*** 1331,1336 ****
--- 1619,1642 ----
    m_current_diag = nullptr;
  }
  
+ void
+ diagnostic_manager::emit (diagnostic &diag, const char *msgid, ...)
+ {
+   va_list args;
+   va_start (args, msgid);
+   emit_va (diag, msgid, &args);
+   va_end (args);
+ }
+ 
+ void
+ diagnostic_manager::emit_msg_buf (diagnostic &diag,
+ 				  diagnostic_message_buffer &msg_buf)
+ {
+ 
+   pp_element_message_buffer e_msg_buf (msg_buf);
+   emit (diag, "%e", &e_msg_buf);
+ }
+ 
  diagnostic_execution_path *
  diagnostic_manager::new_execution_path ()
  {
*************** diagnostic_manager::take_global_graph (s
*** 1365,1374 ****
  /* Error-checking at the API boundary.  */
  
  #define FAIL_IF_NULL(PTR_ARG) \
!   do {						    \
!     volatile const void *p = (PTR_ARG);		    \
!     if (!p) {					    \
!       fprintf (stderr, "%s: %s must be non-NULL\n",   \
  	       __func__, #PTR_ARG);		      \
        abort ();					      \
      }						    \
--- 1671,1680 ----
  /* Error-checking at the API boundary.  */
  
  #define FAIL_IF_NULL(PTR_ARG) \
!   do {							    \
!     volatile const void *ptr_arg = (PTR_ARG);		    \
!     if (!ptr_arg) {					    \
!       fprintf (stderr, "%s: %s must be non-NULL\n",	    \
  	       __func__, #PTR_ARG);		      \
        abort ();					      \
      }						    \
*************** diagnostic_finish_va (diagnostic *diag,
*** 2044,2050 ****
    else
      progname = "progname";
    auto_diagnostic_group d;
!   diag->get_manager ().emit (*diag, gmsgid, args);
    delete diag;
  }
  
--- 2350,2356 ----
    else
      progname = "progname";
    auto_diagnostic_group d;
!   diag->get_manager ().emit_va (*diag, gmsgid, args);
    delete diag;
  }
  
*************** diagnostic_manager_set_analysis_target (
*** 2165,2177 ****
    mgr->get_dc ().set_main_input_filename (file->get_name ());
  }
  
! // struct diagnostic_graph : public diagnostics::digraphs::graph<foo_traits>
  
  diagnostic_node *
! diagnostic_graph::add_node_with_id (std::string id,
  				    diagnostic_node *parent_node)
  {
!   auto node_up = std::make_unique<diagnostic_node> (*this, std::move (id));
    diagnostic_node *new_node = node_up.get ();
    if (parent_node)
      parent_node->add_child (std::move (node_up));
--- 2471,2484 ----
    mgr->get_dc ().set_main_input_filename (file->get_name ());
  }
  
! /* Public entrypoint.  */
  
  diagnostic_node *
! diagnostic_graph::add_node_with_id (std::string node_id,
  				    diagnostic_node *parent_node)
  {
!   auto node_up
!     = std::make_unique<diagnostic_node> (*this, std::move (node_id));
    diagnostic_node *new_node = node_up.get ();
    if (parent_node)
      parent_node->add_child (std::move (node_up));
*************** diagnostic_graph::add_node_with_id (std:
*** 2180,2193 ****
    return new_node;
  }
  
  diagnostic_edge *
! diagnostic_graph::add_edge_with_label (const char *id,
  				       diagnostic_node &src_node,
  				       diagnostic_node &dst_node,
  				       const char *label)
  {
    auto edge_up
!     = std::make_unique<diagnostic_edge> (*this, id,
  					 src_node, dst_node);
    diagnostic_edge *new_edge = edge_up.get ();
    if (label)
--- 2487,2502 ----
    return new_node;
  }
  
+ /* Public entrypoint.  */
+ 
  diagnostic_edge *
! diagnostic_graph::add_edge_with_label (const char *edge_id,
  				       diagnostic_node &src_node,
  				       diagnostic_node &dst_node,
  				       const char *label)
  {
    auto edge_up
!     = std::make_unique<diagnostic_edge> (*this, edge_id,
  					 src_node, dst_node);
    diagnostic_edge *new_edge = edge_up.get ();
    if (label)
*************** diagnostic_graph_set_description (diagno
*** 2247,2268 ****
    graph->set_description (desc);
  }
  
  diagnostic_node *
  diagnostic_graph_add_node (diagnostic_graph *graph,
! 			   const char *id,
  			   diagnostic_node *parent_node)
  {
    FAIL_IF_NULL (graph);
!   FAIL_IF_NULL (id);
  
!   return graph->add_node_with_id (id, parent_node);
  }
  
  /* Public entrypoint.  */
  
  diagnostic_edge *
  diagnostic_graph_add_edge (diagnostic_graph *graph,
! 			   const char *id,
  			   diagnostic_node *src_node,
  			   diagnostic_node *dst_node,
  			   const char *label)
--- 2556,2579 ----
    graph->set_description (desc);
  }
  
+ /* Public entrypoint.  */
+ 
  diagnostic_node *
  diagnostic_graph_add_node (diagnostic_graph *graph,
! 			   const char *node_id,
  			   diagnostic_node *parent_node)
  {
    FAIL_IF_NULL (graph);
!   FAIL_IF_NULL (node_id);
  
!   return graph->add_node_with_id (node_id, parent_node);
  }
  
  /* Public entrypoint.  */
  
  diagnostic_edge *
  diagnostic_graph_add_edge (diagnostic_graph *graph,
! 			   const char *edge_id,
  			   diagnostic_node *src_node,
  			   diagnostic_node *dst_node,
  			   const char *label)
*************** diagnostic_graph_add_edge (diagnostic_gr
*** 2271,2301 ****
    FAIL_IF_NULL (src_node);
    FAIL_IF_NULL (dst_node);
  
!   return graph->add_edge_with_label (id, *src_node, *dst_node, label);
  }
  
  /* Public entrypoint.  */
  
  diagnostic_node *
  diagnostic_graph_get_node_by_id (diagnostic_graph *graph,
! 				 const char *id)
  {
    FAIL_IF_NULL (graph);
!   FAIL_IF_NULL (id);
  
!   return static_cast<diagnostic_node *> (graph->get_node_by_id (id));
  }
  
  /* Public entrypoint.  */
  
  diagnostic_edge *
  diagnostic_graph_get_edge_by_id (diagnostic_graph *graph,
! 				 const char *id)
  {
    FAIL_IF_NULL (graph);
!   FAIL_IF_NULL (id);
  
!   return static_cast<diagnostic_edge *> (graph->get_edge_by_id (id));
  }
  
  /* Public entrypoint.  */
--- 2582,2612 ----
    FAIL_IF_NULL (src_node);
    FAIL_IF_NULL (dst_node);
  
!   return graph->add_edge_with_label (edge_id, *src_node, *dst_node, label);
  }
  
  /* Public entrypoint.  */
  
  diagnostic_node *
  diagnostic_graph_get_node_by_id (diagnostic_graph *graph,
! 				 const char *node_id)
  {
    FAIL_IF_NULL (graph);
!   FAIL_IF_NULL (node_id);
  
!   return static_cast<diagnostic_node *> (graph->get_node_by_id (node_id));
  }
  
  /* Public entrypoint.  */
  
  diagnostic_edge *
  diagnostic_graph_get_edge_by_id (diagnostic_graph *graph,
! 				 const char *edge_id)
  {
    FAIL_IF_NULL (graph);
!   FAIL_IF_NULL (edge_id);
  
!   return static_cast<diagnostic_edge *> (graph->get_edge_by_id (edge_id));
  }
  
  /* Public entrypoint.  */
*************** diagnostic_node_set_label (diagnostic_no
*** 2320,2325 ****
--- 2631,2638 ----
    node->set_label (label);
  }
  
+ /* Public entrypoint.  */
+ 
  void
  diagnostic_node_set_logical_location (diagnostic_node *node,
  				      const diagnostic_logical_location *logical_loc)
*************** diagnostic_node_set_logical_location (di
*** 2332,2365 ****
  
  /* Private entrypoint.  */
  
- diagnostic_event_id
- private_diagnostic_execution_path_add_event_2 (diagnostic_execution_path *path,
- 					       const diagnostic_physical_location *physical_loc,
- 					       const diagnostic_logical_location *logical_loc,
- 					       unsigned stack_depth,
- 					       diagnostic_graph *state_graph,
- 					       const char *gmsgid, ...)
- 
- {
-   FAIL_IF_NULL (path);
-   FAIL_IF_NULL (gmsgid);
- 
-   va_list args;
-   va_start (args, gmsgid);
-   diagnostic_event_id_t result
-     = path->add_event_va (physical_loc,
- 			  logical_loc,
- 			  stack_depth,
- 			  std::unique_ptr <diagnostic_graph> (state_graph),
- 			  gmsgid, &args);
-   va_end (args);
- 
-   return as_diagnostic_event_id (result);
- 
- }
- 
- /* Private entrypoint.  */
- 
  void
  private_diagnostic_graph_set_property_bag (diagnostic_graph &graph,
  					  std::unique_ptr<json::object> properties)
--- 2645,2650 ----
*************** private_diagnostic_edge_set_property_bag
*** 2384,2386 ****
--- 2669,2953 ----
  {
    edge.set_property_bag (std::move (properties));
  }
+ 
+ /* Public entrypoint.  */
+ 
+ diagnostic_message_buffer *
+ diagnostic_message_buffer_new ()
+ {
+   return new diagnostic_message_buffer ();
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_release (diagnostic_message_buffer *msg_buf)
+ {
+   FAIL_IF_NULL (msg_buf);
+   delete msg_buf;
+ }
+ 
+ void
+ diagnostic_message_buffer_append_str (diagnostic_message_buffer *msg_buf,
+ 				      const char *p)
+ {
+   FAIL_IF_NULL (msg_buf);
+   FAIL_IF_NULL (p);
+   msg_buf->m_tokens.push_back_text (label_text::take (xstrdup (p)));
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_append_text (diagnostic_message_buffer *msg_buf,
+ 				       const char *p,
+ 				       size_t len)
+ {
+   FAIL_IF_NULL (msg_buf);
+   FAIL_IF_NULL (p);
+   msg_buf->m_tokens.push_back_text (label_text::take (xstrndup (p, len)));
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_append_byte (diagnostic_message_buffer *msg_buf,
+ 				       char ch)
+ {
+   FAIL_IF_NULL (msg_buf);
+   msg_buf->m_tokens.push_back_byte (ch);
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_append_printf (diagnostic_message_buffer *msg_buf,
+ 					 const char *fmt, ...)
+ {
+   FAIL_IF_NULL (msg_buf);
+   FAIL_IF_NULL (fmt);
+ 
+   va_list args;
+   va_start (args, fmt);
+ 
+   char *formatted_buf = xvasprintf (fmt, args);
+ 
+   va_end (args);
+ 
+   msg_buf->m_tokens.push_back_text (label_text::take (formatted_buf));
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_append_event_id (diagnostic_message_buffer *msg_buf,
+ 					   diagnostic_event_id event_id)
+ {
+   FAIL_IF_NULL (msg_buf);
+   msg_buf->m_tokens.push_back<pp_token_event_id> (event_id);
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_begin_url (diagnostic_message_buffer *msg_buf,
+ 				     const char *url)
+ {
+   FAIL_IF_NULL (msg_buf);
+   FAIL_IF_NULL (url);
+   msg_buf->m_tokens.push_back<pp_token_begin_url>
+     (label_text::take (xstrdup (url)));
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_end_url (diagnostic_message_buffer *msg_buf)
+ {
+   FAIL_IF_NULL (msg_buf);
+   msg_buf->m_tokens.push_back<pp_token_end_url> ();
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_begin_quote (diagnostic_message_buffer *msg_buf)
+ {
+   FAIL_IF_NULL (msg_buf);
+   msg_buf->m_tokens.push_back<pp_token_begin_quote> ();
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_end_quote (diagnostic_message_buffer *msg_buf)
+ {
+   FAIL_IF_NULL (msg_buf);
+   msg_buf->m_tokens.push_back<pp_token_end_quote> ();
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_begin_color (diagnostic_message_buffer *msg_buf,
+ 				       const char *color)
+ {
+   FAIL_IF_NULL (msg_buf);
+   FAIL_IF_NULL (color);
+   msg_buf->m_tokens.push_back<pp_token_begin_color>
+     (label_text::take (xstrdup (color)));
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_end_color (diagnostic_message_buffer *msg_buf)
+ {
+   FAIL_IF_NULL (msg_buf);
+   msg_buf->m_tokens.push_back<pp_token_end_color> ();
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_message_buffer_dump (const diagnostic_message_buffer *msg_buf,
+ 				FILE *outf)
+ {
+   FAIL_IF_NULL (msg_buf);
+   FAIL_IF_NULL (outf);
+ 
+   msg_buf->m_tokens.dump (outf);
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_finish_via_msg_buf (diagnostic *diag,
+ 			       diagnostic_message_buffer *msg_buf)
+ {
+   FAIL_IF_NULL (diag);
+   FAIL_IF_NULL (msg_buf);
+ 
+   if (const char *tool_name
+       = diag->get_manager ().get_client_version_info ()->m_name.get_str ())
+     progname = tool_name;
+   else
+     progname = "progname";
+   auto_diagnostic_group d;
+   diag->get_manager ().emit_msg_buf (*diag, *msg_buf);
+   delete diag;
+   delete msg_buf;
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_add_location_with_label_via_msg_buf (diagnostic *diag,
+ 						const diagnostic_physical_location *loc,
+ 						diagnostic_message_buffer *msg_buf)
+ {
+   FAIL_IF_NULL (diag);
+   diag->get_manager ().assert_valid_diagnostic_physical_location (loc);
+   FAIL_IF_NULL (msg_buf);
+ 
+   std::unique_ptr<diagnostic_message_buffer> msg_buf_up (msg_buf);
+   diag->add_location_with_label (loc, std::move (msg_buf_up));
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ diagnostic_event_id
+ diagnostic_execution_path_add_event_via_msg_buf (diagnostic_execution_path *path,
+ 						 const diagnostic_physical_location *physical_loc,
+ 						 const diagnostic_logical_location *logical_loc,
+ 						 unsigned stack_depth,
+ 						 diagnostic_message_buffer *msg_buf)
+ {
+   FAIL_IF_NULL (path);
+   FAIL_IF_NULL (msg_buf);
+ 
+   std::unique_ptr<diagnostic_message_buffer> msg_buf_up (msg_buf);
+   diagnostic_event_id_t result
+     = path->add_event_via_msg_buf (physical_loc,
+ 				   logical_loc,
+ 				   stack_depth,
+ 				   nullptr,
+ 				   std::move (msg_buf_up));
+   return as_diagnostic_event_id (result);
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_graph_set_description_via_msg_buf (diagnostic_graph *graph,
+ 					      diagnostic_message_buffer *desc)
+ {
+   FAIL_IF_NULL (graph);
+ 
+   if (desc)
+     graph->set_description (desc->to_string ());
+   else
+     graph->set_description (nullptr);
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ diagnostic_edge *
+ diagnostic_graph_add_edge_via_msg_buf (diagnostic_graph *graph,
+ 				       const char *edge_id,
+ 				       diagnostic_node *src_node,
+ 				       diagnostic_node *dst_node,
+ 				       diagnostic_message_buffer *label)
+ {
+   FAIL_IF_NULL (graph);
+   FAIL_IF_NULL (src_node);
+   FAIL_IF_NULL (dst_node);
+ 
+   if (label)
+     {
+       std::string label_str (label->to_string ());
+       return graph->add_edge_with_label (edge_id, *src_node, *dst_node,
+ 					 label_str.c_str ());
+     }
+   else
+     return graph->add_edge_with_label (edge_id, *src_node, *dst_node,
+ 				       nullptr);
+ }
+ 
+ /* Public entrypoint.  */
+ 
+ void
+ diagnostic_node_set_label_via_msg_buf (diagnostic_node *node,
+ 				       diagnostic_message_buffer *label)
+ {
+   FAIL_IF_NULL (node);
+ 
+   if (label)
+     node->set_label (label->to_string ());
+   else
+     node->set_label (nullptr);
+ }
+ 
+ /* Private entrypoint.  */
+ 
+ diagnostic_event_id
+ private_diagnostic_execution_path_add_event_3 (diagnostic_execution_path *path,
+ 					       const diagnostic_physical_location *physical_loc,
+ 					       const diagnostic_logical_location *logical_loc,
+ 					       unsigned stack_depth,
+ 					       diagnostic_graph *state_graph,
+ 					       diagnostic_message_buffer *msg_buf)
+ {
+   FAIL_IF_NULL (path);
+   FAIL_IF_NULL (msg_buf);
+ 
+   diagnostic_event_id_t result
+     = path->add_event_via_msg_buf
+ 	(physical_loc,
+ 	 logical_loc,
+ 	 stack_depth,
+ 	 std::unique_ptr <diagnostic_graph> (state_graph),
+ 	 std::unique_ptr <diagnostic_message_buffer> (msg_buf));
+ 
+   return as_diagnostic_event_id (result);
+ }
diff -Nrcpad gcc-16-20250713/gcc/libgdiagnostics.h gcc-16-20250720/gcc/libgdiagnostics.h
*** gcc-16-20250713/gcc/libgdiagnostics.h	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/libgdiagnostics.h	Sun Jul 20 22:32:09 2025
*************** extern "C" {
*** 50,55 ****
--- 50,62 ----
  #define LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL(ARG_NUM)
    /* empty; for the human reader */
  
+ # if (LIBGDIAGNOSTICS_GCC_VERSION >= 4001)
+ #  define LIBGDIAGNOSTICS_PARAM_FORMAT_STRING(FMT_KIND, FMT_ARG_NUM, ARGS_ARG_NUM) \
+      __attribute__ ((__format__ (FMT_KIND, FMT_ARG_NUM, ARGS_ARG_NUM)))
+ # else
+ #  define LIBGDIAGNOSTICS_PARAM_FORMAT_STRING(FMT_KIND, FMT_ARG_NUM, ARGS_ARG_NUM)
+ # endif /* GNUC >= 4.1 */
+ 
  #define LIBGDIAGNOSTICS_PARAM_GCC_FORMAT_STRING(FMT_ARG_NUM, ARGS_ARG_NUM) \
    LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (FMT_ARG_NUM)
    /* In theory we'd also add
*************** extern "C" {
*** 59,64 ****
--- 66,75 ----
       of -Wall but undocumented, and much fussier than I'd want to inflict
       on users of libgdiagnostics.  */
  
+ #define LIBGDIAGNOSTICS_PARAM_PRINTF_FORMAT_STRING(FMT_ARG_NUM, ARGS_ARG_NUM) \
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (FMT_ARG_NUM) \
+   LIBGDIAGNOSTICS_PARAM_FORMAT_STRING(gnu_printf, FMT_ARG_NUM, ARGS_ARG_NUM)
+ 
  /**********************************************************************
   Data structures and types.
   All structs within the API are opaque.
*************** enum diagnostic_level
*** 230,235 ****
--- 241,248 ----
  typedef struct diagnostic_execution_path diagnostic_execution_path;
  typedef int diagnostic_event_id;
  
+ typedef struct diagnostic_message_buffer diagnostic_message_buffer;
+ 
  /**********************************************************************
   API entrypoints.
   **********************************************************************/
*************** diagnostic_node_set_logical_location (di
*** 899,904 ****
--- 912,1120 ----
    LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
    LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (2);
  
+ /* Message buffers.  */
+ 
+ #define LIBDIAGNOSTICS_HAVE_diagnostic_message_buffer
+ 
+ /* Create a new diagnostic_message_buffer.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern diagnostic_message_buffer *
+ diagnostic_message_buffer_new (void);
+ 
+ /* Release a diagnostic_message_buffer that hasn't been used.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_release (diagnostic_message_buffer *msg_buf)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
+ /* Append a UTF-8 encoded null-terminated string to the buffer.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_append_str (diagnostic_message_buffer *msg_buf,
+ 				      const char *p)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (2);
+ 
+ /* Append a UTF-8 encoded run of bytes to the buffer.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_append_text (diagnostic_message_buffer *msg_buf,
+ 				       const char *p,
+ 				       size_t len)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (2);
+ 
+ /* Append a byte to to the buffer.  This should be either
+    ASCII, or part of UTF-8 encoded text.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_append_byte (diagnostic_message_buffer *msg_buf,
+ 				       char ch)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
+ /* Append a formatted string to the buffer, using the formatting rules
+    for "printf".
+    The string is assumed to be UTF-8 encoded.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_append_printf (diagnostic_message_buffer *msg_buf,
+ 					 const char *fmt, ...)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_PRINTF_FORMAT_STRING (2, 3);
+ 
+ /* Append a diagnostic_event_id to the buffer in the form "(1)".
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_append_event_id (diagnostic_message_buffer *msg_buf,
+ 					   diagnostic_event_id event_id)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
+ /* Begin a run of text associated with the given URL.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_begin_url (diagnostic_message_buffer *msg_buf,
+ 				     const char *url)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (2);
+ 
+ /* End a run of text started with diagnostic_message_buffer_begin_url.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_end_url (diagnostic_message_buffer *msg_buf)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
+ /* Begin a run of text to be printed in quotes.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_begin_quote (diagnostic_message_buffer *msg_buf)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
+ /* End a run of text started with diagnostic_message_buffer_begin_quote.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_end_quote (diagnostic_message_buffer *msg_buf)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
+ /* Begin a run of text to be printed with color.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_begin_color (diagnostic_message_buffer *msg_buf,
+ 				       const char *color)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (2);
+ 
+ /* End a run of text started with diagnostic_message_buffer_begin_color.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_end_color (diagnostic_message_buffer *msg_buf)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1);
+ 
+ /* Write a debugging representation of MSG_BUG to OUTF.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_message_buffer_dump (const diagnostic_message_buffer *msg_buf,
+ 				FILE *outf)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (2);
+ 
+ /* As diagnostic_finish, but takes ownership of MSG_BUF.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_finish_via_msg_buf (diagnostic *diag,
+ 			       diagnostic_message_buffer *msg_buf)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (2);
+ 
+ /* As diagnostic_add_location_with_label but takes ownership of MSG_BUF.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_add_location_with_label_via_msg_buf (diagnostic *diag,
+ 						const diagnostic_physical_location *loc,
+ 						diagnostic_message_buffer *msg_buf)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (2)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (3);
+ 
+ /* As diagnostic_execution_path_add_event but takes ownership of MSG_BUF.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern diagnostic_event_id
+ diagnostic_execution_path_add_event_via_msg_buf (diagnostic_execution_path *path,
+ 						 const diagnostic_physical_location *physical_loc,
+ 						 const diagnostic_logical_location *logical_loc,
+ 						 unsigned stack_depth,
+ 						 diagnostic_message_buffer *msg_buf)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (2)
+   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (3)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (5);
+ 
+ /* Set the description of GRAPH for use
+    in the value of the SARIF "description" property
+    (SARIF v2.1.0 section 3.39.2).
+ 
+    Takes ownership of DESC, if non-null.
+ 
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_graph_set_description_via_msg_buf (diagnostic_graph *graph,
+ 					      diagnostic_message_buffer *desc)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (2);
+ 
+ /* Create and add a new edge within GRAPH.
+ 
+    If non-null, then EDGE_ID must be unique within edges in GRAPH;
+    if EDGE_ID is null then a unique id of the form "edge0", "edge1", etc
+    will be used automatically.
+ 
+    Takes ownership of LABEL, if non-null.
+ 
+    The new edge is owned by GRAPH.
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern diagnostic_edge *
+ diagnostic_graph_add_edge_via_msg_buf (diagnostic_graph *graph,
+ 				       const char *edge_id,
+ 				       diagnostic_node *src_node,
+ 				       diagnostic_node *dst_node,
+ 				       diagnostic_message_buffer *label)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (2)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (3)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (4)
+   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (5);
+ 
+ /* Set the label of NODE for use
+    in the value of the SARIF "label" property
+    (SARIF v2.1.0 section 3.40.3).
+ 
+    Takes ownership of LABEL, if non-null.
+ 
+    Added in LIBGDIAGNOSTICS_ABI_4.  */
+ 
+ extern void
+ diagnostic_node_set_label_via_msg_buf (diagnostic_node *node,
+ 				       diagnostic_message_buffer *label)
+   LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL (1)
+   LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL (2);
+ 
  /* DEFERRED:
     - thread-safety
     - plural forms
*************** diagnostic_node_set_logical_location (di
*** 906,911 ****
--- 1122,1128 ----
     - locations within binary files
     - options and URLs for warnings
     - enable/disable of warnings by kind
+    - command-line arguments
     - plugin metadata.  */
  
  #ifdef __cplusplus
diff -Nrcpad gcc-16-20250713/gcc/libgdiagnostics.map gcc-16-20250720/gcc/libgdiagnostics.map
*** gcc-16-20250713/gcc/libgdiagnostics.map	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/libgdiagnostics.map	Sun Jul 20 22:32:09 2025
*************** LIBGDIAGNOSTICS_ABI_0
*** 69,74 ****
--- 69,75 ----
      diagnostic_finish;
      diagnostic_finish_va;
  
+ 
      diagnostic_physical_location_get_file;
  
    local: *;
*************** LIBGDIAGNOSTICS_ABI_3 {
*** 108,115 ****
      diagnostic_node_set_logical_location;
  
      # Private hooks used by sarif-replay
-     private_diagnostic_execution_path_add_event_2;
      private_diagnostic_graph_set_property_bag;
      private_diagnostic_node_set_property_bag;
      private_diagnostic_edge_set_property_bag;
  } LIBGDIAGNOSTICS_ABI_2;
--- 109,143 ----
      diagnostic_node_set_logical_location;
  
      # Private hooks used by sarif-replay
      private_diagnostic_graph_set_property_bag;
      private_diagnostic_node_set_property_bag;
      private_diagnostic_edge_set_property_bag;
  } LIBGDIAGNOSTICS_ABI_2;
+ 
+ # Add diagnostic_message_buffer
+ LIBGDIAGNOSTICS_ABI_4 {
+   global:
+     diagnostic_message_buffer_new;
+     diagnostic_message_buffer_release;
+     diagnostic_message_buffer_append_str;
+     diagnostic_message_buffer_append_text;
+     diagnostic_message_buffer_append_byte;
+     diagnostic_message_buffer_append_printf;
+     diagnostic_message_buffer_append_event_id;
+     diagnostic_message_buffer_begin_url;
+     diagnostic_message_buffer_end_url;
+     diagnostic_message_buffer_begin_quote;
+     diagnostic_message_buffer_end_quote;
+     diagnostic_message_buffer_begin_color;
+     diagnostic_message_buffer_end_color;
+     diagnostic_message_buffer_dump;
+     diagnostic_finish_via_msg_buf;
+     diagnostic_add_location_with_label_via_msg_buf;
+     diagnostic_execution_path_add_event_via_msg_buf;
+     diagnostic_graph_set_description_via_msg_buf;
+     diagnostic_graph_add_edge_via_msg_buf;
+     diagnostic_node_set_label_via_msg_buf;
+ 
+     # Private hook used by sarif-replay
+     private_diagnostic_execution_path_add_event_3;
+ } LIBGDIAGNOSTICS_ABI_3;
diff -Nrcpad gcc-16-20250713/gcc/libsarifreplay.cc gcc-16-20250720/gcc/libsarifreplay.cc
*** gcc-16-20250713/gcc/libsarifreplay.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/libsarifreplay.cc	Sun Jul 20 22:32:09 2025
*************** class annotation
*** 282,295 ****
  {
  public:
    annotation (libgdiagnostics::physical_location phys_loc,
! 	      label_text label)
    : m_phys_loc (phys_loc),
      m_label (std::move (label))
    {
    }
  
    libgdiagnostics::physical_location m_phys_loc;
!   label_text m_label;
  };
  
  using id_map = std::map<std::string, const json::string *>;
--- 282,295 ----
  {
  public:
    annotation (libgdiagnostics::physical_location phys_loc,
! 	      libgdiagnostics::message_buffer label)
    : m_phys_loc (phys_loc),
      m_label (std::move (label))
    {
    }
  
    libgdiagnostics::physical_location m_phys_loc;
!   libgdiagnostics::message_buffer m_label;
  };
  
  using id_map = std::map<std::string, const json::string *>;
*************** private:
*** 333,339 ****
  
    enum status emit_sarif_as_diagnostics (const json::value &jv);
  
!   label_text
    make_plain_text_within_result_message (const json::object *tool_component_obj,
  					 const json::object &message_obj,
  					 const json::object *rule_obj);
--- 333,339 ----
  
    enum status emit_sarif_as_diagnostics (const json::value &jv);
  
!   libgdiagnostics::message_buffer
    make_plain_text_within_result_message (const json::object *tool_component_obj,
  					 const json::object &message_obj,
  					 const json::object *rule_obj);
*************** sarif_replayer::get_level_from_level_str
*** 1181,1192 ****
  
  static void
  add_any_annotations (libgdiagnostics::diagnostic &diag,
! 		     const std::vector<annotation> &annotations)
  {
    for (auto &annotation : annotations)
!     if (annotation.m_label.get ())
        diag.add_location_with_label (annotation.m_phys_loc,
! 				    annotation.m_label.get ());
      else
        diag.add_location (annotation.m_phys_loc);
  }
--- 1181,1192 ----
  
  static void
  add_any_annotations (libgdiagnostics::diagnostic &diag,
! 		     std::vector<annotation> &annotations)
  {
    for (auto &annotation : annotations)
!     if (annotation.m_label.m_inner)
        diag.add_location_with_label (annotation.m_phys_loc,
! 				    std::move (annotation.m_label));
      else
        diag.add_location (annotation.m_phys_loc);
  }
*************** sarif_replayer::handle_result_obj (const
*** 1249,1261 ****
      }
  
    // §3.27.11 "message" property
!   label_text text;
    if (auto message_obj
  	= get_optional_property<json::object> (result_obj, PROP_result_message))
!     text = make_plain_text_within_result_message (nullptr, // TODO: tool_component_obj,
! 						  *message_obj,
! 						  rule_obj);
!   if (!text.get ())
      return status::err_invalid_sarif;
  
    // §3.27.12 "locations" property
--- 1249,1261 ----
      }
  
    // §3.27.11 "message" property
!   libgdiagnostics::message_buffer msg_buf;
    if (auto message_obj
  	= get_optional_property<json::object> (result_obj, PROP_result_message))
!     msg_buf = make_plain_text_within_result_message (nullptr, // TODO: tool_component_obj,
! 						     *message_obj,
! 						     rule_obj);
!   if (!msg_buf.m_inner)
      return status::err_invalid_sarif;
  
    // §3.27.12 "locations" property
*************** sarif_replayer::handle_result_obj (const
*** 1368,1374 ****
      }
  
    // §3.27.22 relatedLocations property
!   std::vector<std::pair<libgdiagnostics::diagnostic, label_text>> notes;
    const property_spec_ref prop_related_locations
      ("result", "relatedLocations", "3.27.22");
    if (auto related_locations_arr
--- 1368,1375 ----
      }
  
    // §3.27.22 relatedLocations property
!   std::vector<std::pair<libgdiagnostics::diagnostic,
! 			libgdiagnostics::message_buffer>> notes;
    const property_spec_ref prop_related_locations
      ("result", "relatedLocations", "3.27.22");
    if (auto related_locations_arr
*************** sarif_replayer::handle_result_obj (const
*** 1400,1417 ****
  						     prop_message))
  	    {
  	      /* Treat related locations with a message as a "note".  */
! 	      label_text text
  		(make_plain_text_within_result_message
  		 (tool_component_obj,
  		  *message_obj,
  		  rule_obj));
! 	      if (!text.get ())
  		return status::err_invalid_sarif;
  	      auto note (m_output_mgr.begin_diagnostic (DIAGNOSTIC_LEVEL_NOTE));
  	      note.set_location (physical_loc);
  	      note.set_logical_location (logical_loc);
  	      add_any_annotations (note, annotations);
! 	      notes.push_back ({std::move (note), std::move (text)});
  	    }
  	  else
  	    {
--- 1401,1418 ----
  						     prop_message))
  	    {
  	      /* Treat related locations with a message as a "note".  */
! 	      libgdiagnostics::message_buffer msg_buf
  		(make_plain_text_within_result_message
  		 (tool_component_obj,
  		  *message_obj,
  		  rule_obj));
! 	      if (!msg_buf.m_inner)
  		return status::err_invalid_sarif;
  	      auto note (m_output_mgr.begin_diagnostic (DIAGNOSTIC_LEVEL_NOTE));
  	      note.set_location (physical_loc);
  	      note.set_logical_location (logical_loc);
  	      add_any_annotations (note, annotations);
! 	      notes.push_back ({std::move (note), std::move (msg_buf)});
  	    }
  	  else
  	    {
*************** sarif_replayer::handle_result_obj (const
*** 1434,1447 ****
  	  handle_fix_object (err, *fix_obj);
      }
  
!   err.finish ("%s", text.get ());
  
    // Flush any notes
    for (auto &iter : notes)
      {
        auto &note = iter.first;
!       auto &text = iter.second;
!       note.finish ("%s", text.get ());
      }
  
    return status::ok;
--- 1435,1448 ----
  	  handle_fix_object (err, *fix_obj);
      }
  
!   err.finish_via_msg_buf (std::move (msg_buf));
  
    // Flush any notes
    for (auto &iter : notes)
      {
        auto &note = iter.first;
!       auto &msg_buf = iter.second;
!       note.finish_via_msg_buf (std::move (msg_buf));
      }
  
    return status::ok;
*************** maybe_consume_embedded_link (const char
*** 1569,1581 ****
     and substitute for any placeholders (§3.11.5) and handle any
     embedded links (§3.11.6).
  
-    Limitations:
-    - we don't preserve destinations within embedded links
- 
     MESSAGE_OBJ is "theMessage"
     RULE_OBJ is "theRule".  */
  
! label_text
  sarif_replayer::
  make_plain_text_within_result_message (const json::object *tool_component_obj,
  				       const json::object &message_obj,
--- 1570,1579 ----
     and substitute for any placeholders (§3.11.5) and handle any
     embedded links (§3.11.6).
  
     MESSAGE_OBJ is "theMessage"
     RULE_OBJ is "theRule".  */
  
! libgdiagnostics::message_buffer
  sarif_replayer::
  make_plain_text_within_result_message (const json::object *tool_component_obj,
  				       const json::object &message_obj,
*************** make_plain_text_within_result_message (c
*** 1588,1594 ****
  					       rule_obj,
  					       js_str);
    if (!original_text)
!     return label_text::borrow (nullptr);
  
    gcc_assert (js_str);
  
--- 1586,1592 ----
  					       rule_obj,
  					       js_str);
    if (!original_text)
!     return libgdiagnostics::message_buffer ();
  
    gcc_assert (js_str);
  
*************** make_plain_text_within_result_message (c
*** 1598,1604 ****
      = get_optional_property<json::array> (message_obj, arguments_prop);
  
    /* Duplicate original_text, substituting any placeholders.  */
!   std::string accum;
  
    const char *iter_src = original_text;
    while (char ch = *iter_src)
--- 1596,1602 ----
      = get_optional_property<json::array> (message_obj, arguments_prop);
  
    /* Duplicate original_text, substituting any placeholders.  */
!   libgdiagnostics::message_buffer result (diagnostic_message_buffer_new ());
  
    const char *iter_src = original_text;
    while (char ch = *iter_src)
*************** make_plain_text_within_result_message (c
*** 1614,1620 ****
  		 " but message object has no %qs property",
  		 (int)arg_idx,
  		 arguments_prop.get_property_name ());
! 	      return label_text::borrow (nullptr);
  	    }
  	  if (arg_idx >= arguments->length ())
  	    {
--- 1612,1618 ----
  		 " but message object has no %qs property",
  		 (int)arg_idx,
  		 arguments_prop.get_property_name ());
! 	      return libgdiagnostics::message_buffer ();
  	    }
  	  if (arg_idx >= arguments->length ())
  	    {
*************** make_plain_text_within_result_message (c
*** 1625,1644 ****
  		 arguments_prop.get_property_name (),
  		 (int)arg_idx);
  	      // TODO: might be nice to add a note showing the args
! 	      return label_text::borrow (nullptr);
  	    }
  	  auto replacement_jstr
  	    = require_string (*arguments->get (arg_idx), arguments_prop);
  	  if (!replacement_jstr)
! 	    return label_text::borrow (nullptr);
! 	  accum += replacement_jstr->get_string ();
  	}
        else if (ch == '{' || ch == '}')
  	{
  	  /* '{' and '}' are escaped by repeating them.  */
  	  if (iter_src[1] == ch)
  	    {
! 	      accum += ch;
  	      iter_src += 2;
  	    }
  	  else
--- 1623,1642 ----
  		 arguments_prop.get_property_name (),
  		 (int)arg_idx);
  	      // TODO: might be nice to add a note showing the args
! 	      return libgdiagnostics::message_buffer ();
  	    }
  	  auto replacement_jstr
  	    = require_string (*arguments->get (arg_idx), arguments_prop);
  	  if (!replacement_jstr)
! 	    return libgdiagnostics::message_buffer ();
! 	  result += replacement_jstr->get_string ();
  	}
        else if (ch == '{' || ch == '}')
  	{
  	  /* '{' and '}' are escaped by repeating them.  */
  	  if (iter_src[1] == ch)
  	    {
! 	      result += ch;
  	      iter_src += 2;
  	    }
  	  else
*************** make_plain_text_within_result_message (c
*** 1648,1671 ****
  	      report_invalid_sarif (*js_str, msgs_with_placeholders,
  				    "unescaped '%c' within message string",
  				    ch);
! 	      return label_text::borrow (nullptr);
  	    }
  	}
        else if (auto link = maybe_consume_embedded_link (iter_src))
  	{
! 	  accum += link->text;
! 	  /* TODO: use the destination.  */
  	  /* TODO: potentially could try to convert
  	     intra-sarif links into event ids.  */
  	}
        else
  	{
! 	  accum += ch;
  	  iter_src++;
  	}
      }
  
!   return label_text::take (xstrdup (accum.c_str ()));
  }
  
  /* Handle a value that should be a multiformatMessageString object (§3.12).
--- 1646,1670 ----
  	      report_invalid_sarif (*js_str, msgs_with_placeholders,
  				    "unescaped '%c' within message string",
  				    ch);
! 	      return libgdiagnostics::message_buffer ();
  	    }
  	}
        else if (auto link = maybe_consume_embedded_link (iter_src))
  	{
! 	  result.begin_url (link->destination.c_str ());
! 	  result += link->text.c_str ();
! 	  result.end_url ();
  	  /* TODO: potentially could try to convert
  	     intra-sarif links into event ids.  */
  	}
        else
  	{
! 	  result += ch;
  	  iter_src++;
  	}
      }
  
!   return result;
  }
  
  /* Handle a value that should be a multiformatMessageString object (§3.12).
*************** handle_thread_flow_location_object (cons
*** 1799,1805 ****
  {
    libgdiagnostics::physical_location physical_loc;
    libgdiagnostics::logical_location logical_loc;
!   label_text message;
    int stack_depth = 0;
  
    const property_spec_ref location_prop
--- 1798,1804 ----
  {
    libgdiagnostics::physical_location physical_loc;
    libgdiagnostics::logical_location logical_loc;
!   libgdiagnostics::message_buffer msg_buf;
    int stack_depth = 0;
  
    const property_spec_ref location_prop
*************** handle_thread_flow_location_object (cons
*** 1821,1827 ****
  	  = get_optional_property<json::object> (*location_obj,
  						 location_message))
  	{
! 	  message = make_plain_text_within_result_message
  	    (nullptr,
  	     *message_obj,
  	     nullptr/* TODO.  */);
--- 1820,1826 ----
  	  = get_optional_property<json::object> (*location_obj,
  						 location_message))
  	{
! 	  msg_buf = make_plain_text_within_result_message
  	    (nullptr,
  	     *message_obj,
  	     nullptr/* TODO.  */);
*************** handle_thread_flow_location_object (cons
*** 1874,1894 ****
  	return s;
      }
  
!   if (message.get ())
!     private_diagnostic_execution_path_add_event_2 (path.m_inner,
! 						   physical_loc.m_inner,
! 						   logical_loc.m_inner,
! 						   stack_depth,
! 						   state_graph.m_inner,
! 						   "%s", message.get ());
!   else
!     private_diagnostic_execution_path_add_event_2 (path.m_inner,
! 						   physical_loc.m_inner,
! 						   logical_loc.m_inner,
! 						   stack_depth,
! 						   state_graph.m_inner,
! 						   "");
    state_graph.m_owned = false;
  
    return status::ok;
  }
--- 1873,1890 ----
  	return s;
      }
  
!   if (!msg_buf.m_inner)
!     msg_buf.m_inner = diagnostic_message_buffer_new ();
! 
!   private_diagnostic_execution_path_add_event_3 (path.m_inner,
! 						 physical_loc.m_inner,
! 						 logical_loc.m_inner,
! 						 stack_depth,
! 						 state_graph.m_inner,
! 						 msg_buf.m_inner);
! 
    state_graph.m_owned = false;
+   msg_buf.m_inner = nullptr;
  
    return status::ok;
  }
*************** handle_location_object (const json::obje
*** 1967,1973 ****
  	  if (s != status::ok)
  	    return s;
  
! 	  label_text label;
  
  	  // §3.30.14 message property
  	  {
--- 1963,1969 ----
  	  if (s != status::ok)
  	    return s;
  
! 	  libgdiagnostics::message_buffer label;
  
  	  // §3.30.14 message property
  	  {
*************** sarif_replayer::handle_graph_object (con
*** 2304,2316 ****
    if (auto description_obj
        = get_optional_property<json::object> (graph_json_obj, description_prop))
      {
!       label_text text
  	= make_plain_text_within_result_message (&run_obj,
  						 *description_obj,
  						 nullptr);
!       if (!text.get ())
  	return status::err_invalid_sarif;
!       out_graph.set_description (text.get ());
      }
  
    // §3.39.3: MAY contain a "nodes" property
--- 2300,2312 ----
    if (auto description_obj
        = get_optional_property<json::object> (graph_json_obj, description_prop))
      {
!       auto msg_buf
  	= make_plain_text_within_result_message (&run_obj,
  						 *description_obj,
  						 nullptr);
!       if (!msg_buf.m_inner)
  	return status::err_invalid_sarif;
!       out_graph.set_description (std::move (msg_buf));
      }
  
    // §3.39.3: MAY contain a "nodes" property
*************** sarif_replayer::handle_node_object (cons
*** 2403,2415 ****
    if (auto label_obj
        = get_optional_property<json::object> (node_json_obj, label_prop))
      {
!       label_text text
  	= make_plain_text_within_result_message (&run_obj,
  						 *label_obj,
  						 nullptr);
!       if (!text.get ())
  	return nullptr;
!       new_node.set_label (text.get ());
      }
  
    // §3.40.4 "location" property
--- 2399,2411 ----
    if (auto label_obj
        = get_optional_property<json::object> (node_json_obj, label_prop))
      {
!       auto msg_buf
  	= make_plain_text_within_result_message (&run_obj,
  						 *label_obj,
  						 nullptr);
!       if (!msg_buf.m_inner)
  	return nullptr;
!       new_node.set_label (std::move (msg_buf));
      }
  
    // §3.40.4 "location" property
*************** sarif_replayer::handle_edge_object (cons
*** 2484,2490 ****
    edge_id_map[id] = id_str;
  
    // §3.41.3 "label" property
!   label_text label;
    const property_spec_ref label_prop
      ("edge", "label", "3.41.3");
    if (auto label_obj
--- 2480,2486 ----
    edge_id_map[id] = id_str;
  
    // §3.41.3 "label" property
!   libgdiagnostics::message_buffer label;
    const property_spec_ref label_prop
      ("edge", "label", "3.41.3");
    if (auto label_obj
*************** sarif_replayer::handle_edge_object (cons
*** 2493,2499 ****
        label = make_plain_text_within_result_message (nullptr,
  						     *label_obj,
  						     nullptr);
!       if (!label.get ())
  	return nullptr;
      }
  
--- 2489,2495 ----
        label = make_plain_text_within_result_message (nullptr,
  						     *label_obj,
  						     nullptr);
!       if (!label.m_inner)
  	return nullptr;
      }
  
*************** sarif_replayer::handle_edge_object (cons
*** 2513,2519 ****
    if (!dst_node.m_inner)
      return nullptr;
  
!   auto result = graph.add_edge (id, src_node, dst_node, label.get ());
  
    if (auto properties = maybe_get_property_bag (edge_json_obj))
      private_diagnostic_edge_set_property_bag (*result.m_inner,
--- 2509,2515 ----
    if (!dst_node.m_inner)
      return nullptr;
  
!   auto result = graph.add_edge (id, src_node, dst_node, std::move (label));
  
    if (auto properties = maybe_get_property_bag (edge_json_obj))
      private_diagnostic_edge_set_property_bag (*result.m_inner,
diff -Nrcpad gcc-16-20250713/gcc/m2/ChangeLog gcc-16-20250720/gcc/m2/ChangeLog
*** gcc-16-20250713/gcc/m2/ChangeLog	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/m2/ChangeLog	Sun Jul 20 22:32:09 2025
***************
*** 1,3 ****
--- 1,9 ----
+ 2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/121164
+ 	* gm2-libs/ARRAYOFCHAR.mod (Write): Rename 2nd parameter
+ 	name a to str.
+ 
  2025-07-01  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	PR modula2/120912
diff -Nrcpad gcc-16-20250713/gcc/m2/gm2-libs/ARRAYOFCHAR.mod gcc-16-20250720/gcc/m2/gm2-libs/ARRAYOFCHAR.mod
*** gcc-16-20250713/gcc/m2/gm2-libs/ARRAYOFCHAR.mod	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/m2/gm2-libs/ARRAYOFCHAR.mod	Sun Jul 20 22:32:09 2025
*************** IMPORT StrLib ;
*** 34,47 ****
     Write - writes a string to file f.
  *)
  
! PROCEDURE Write (f: File; a: ARRAY OF CHAR) ;
  VAR
     len, i: CARDINAL ;
  BEGIN
!    len := StrLib.StrLen (a) ;
     i := 0 ;
     WHILE i < len DO
!       WriteChar (f, a[i]) ;
        INC (i)
     END
  END Write ;
--- 34,47 ----
     Write - writes a string to file f.
  *)
  
! PROCEDURE Write (f: File; str: ARRAY OF CHAR) ;
  VAR
     len, i: CARDINAL ;
  BEGIN
!    len := StrLib.StrLen (str) ;
     i := 0 ;
     WHILE i < len DO
!       WriteChar (f, str[i]) ;
        INC (i)
     END
  END Write ;
diff -Nrcpad gcc-16-20250713/gcc/match.pd gcc-16-20250720/gcc/match.pd
*** gcc-16-20250713/gcc/match.pd	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/match.pd	Sun Jul 20 22:32:09 2025
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3605,3615 ****
        unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
        unsigned cvt5_prec = TYPE_PRECISION (TREE_TYPE (@5));
        unsigned cvt6_prec = TYPE_PRECISION (TREE_TYPE (@6));
-       unsigned hw_int_prec = sizeof (HOST_WIDE_INT) * 8;
        wide_int c2 = wi::to_wide (@2);
        wide_int max = wi::mask (prec, false, widen_prec);
        bool c2_is_max_p = wi::eq_p (c2, max);
!       bool widen_mult_p = cvt5_prec == cvt6_prec && hw_int_prec == cvt5_prec;
       }
       (if (widen_prec > prec && c2_is_max_p && widen_mult_p)))))
  )
--- 3605,3614 ----
        unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
        unsigned cvt5_prec = TYPE_PRECISION (TREE_TYPE (@5));
        unsigned cvt6_prec = TYPE_PRECISION (TREE_TYPE (@6));
        wide_int c2 = wi::to_wide (@2);
        wide_int max = wi::mask (prec, false, widen_prec);
        bool c2_is_max_p = wi::eq_p (c2, max);
!       bool widen_mult_p = cvt5_prec == cvt6_prec && widen_prec == cvt6_prec * 2;
       }
       (if (widen_prec > prec && c2_is_max_p && widen_mult_p)))))
  )
diff -Nrcpad gcc-16-20250713/gcc/optabs-tree.cc gcc-16-20250720/gcc/optabs-tree.cc
*** gcc-16-20250713/gcc/optabs-tree.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/optabs-tree.cc	Sun Jul 20 22:32:09 2025
*************** optab_for_tree_code (enum tree_code code
*** 82,88 ****
  	return unknown_optab;
        /* FALLTHRU */
      case RDIV_EXPR:
!       gcc_assert (FLOAT_TYPE_P (type));
        /* FALLTHRU */
      case TRUNC_DIV_EXPR:
      case EXACT_DIV_EXPR:
--- 82,89 ----
  	return unknown_optab;
        /* FALLTHRU */
      case RDIV_EXPR:
!       gcc_assert (FLOAT_TYPE_P (type)
! 		  || ALL_FIXED_POINT_MODE_P (TYPE_MODE (type)));
        /* FALLTHRU */
      case TRUNC_DIV_EXPR:
      case EXACT_DIV_EXPR:
diff -Nrcpad gcc-16-20250713/gcc/params.opt gcc-16-20250720/gcc/params.opt
*** gcc-16-20250713/gcc/params.opt	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/params.opt	Sun Jul 20 22:32:09 2025
*************** Common Joined UInteger Var(param_uninit_
*** 1177,1183 ****
  Maximum number of nested calls to search for control dependencies during uninitialized variable analysis.
  
  -param=uninit-max-chain-len=
! Common Joined UInteger Var(param_uninit_max_chain_len) Init(8) IntegerRange(1, 128) Param Optimization
  Maximum number of predicates anded for each predicate ored in the normalized
  predicate chain.
  
--- 1177,1183 ----
  Maximum number of nested calls to search for control dependencies during uninitialized variable analysis.
  
  -param=uninit-max-chain-len=
! Common Joined UInteger Var(param_uninit_max_chain_len) Init(12) IntegerRange(1, 128) Param Optimization
  Maximum number of predicates anded for each predicate ored in the normalized
  predicate chain.
  
diff -Nrcpad gcc-16-20250713/gcc/pretty-print-format-impl.h gcc-16-20250720/gcc/pretty-print-format-impl.h
*** gcc-16-20250713/gcc/pretty-print-format-impl.h	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/pretty-print-format-impl.h	Sun Jul 20 22:32:10 2025
*************** public:
*** 334,339 ****
--- 334,340 ----
      push_back (std::move (tok));
    }
    void push_back_text (label_text &&text);
+   void push_back_byte (char ch);
    void push_back (std::unique_ptr<pp_token> tok);
    void push_back_list (pp_token_list &&list);
  
diff -Nrcpad gcc-16-20250713/gcc/pretty-print-markup.h gcc-16-20250720/gcc/pretty-print-markup.h
*** gcc-16-20250713/gcc/pretty-print-markup.h	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/pretty-print-markup.h	Sun Jul 20 22:32:10 2025
*************** public:
*** 45,50 ****
--- 45,55 ----
    void begin_highlight_color (const char *color_name);
    void end_highlight_color ();
  
+   void begin_url (const char *url);
+   void end_url ();
+ 
+   void add_event_id (diagnostic_event_id_t event_id);
+ 
    void push_back_any_text ();
  
    pretty_printer &m_pp;
diff -Nrcpad gcc-16-20250713/gcc/pretty-print.cc gcc-16-20250720/gcc/pretty-print.cc
*** gcc-16-20250713/gcc/pretty-print.cc	Sun Jul 13 22:32:26 2025
--- gcc-16-20250720/gcc/pretty-print.cc	Sun Jul 20 22:32:10 2025
*************** along with GCC; see the file COPYING3.
*** 30,35 ****
--- 30,36 ----
  #include "diagnostic-color.h"
  #include "diagnostic-event-id.h"
  #include "diagnostic-highlight-colors.h"
+ #include "auto-obstack.h"
  #include "selftest.h"
  
  #if HAVE_ICONV
*************** static int
*** 714,720 ****
  decode_utf8_char (const unsigned char *, size_t len, unsigned int *);
  static void pp_quoted_string (pretty_printer *, const char *, size_t = -1);
  
! static void
  default_token_printer (pretty_printer *pp,
  		       const pp_token_list &tokens);
  
--- 715,721 ----
  decode_utf8_char (const unsigned char *, size_t len, unsigned int *);
  static void pp_quoted_string (pretty_printer *, const char *, size_t = -1);
  
! extern void
  default_token_printer (pretty_printer *pp,
  		       const pp_token_list &tokens);
  
*************** pp_token_list::push_back_text (label_tex
*** 1327,1332 ****
--- 1328,1342 ----
  }
  
  void
+ pp_token_list::push_back_byte (char ch)
+ {
+   char buf[2];
+   buf[0] = ch;
+   buf[1] = '\0';
+   push_back_text (label_text::take (xstrdup (buf)));
+ }
+ 
+ void
  pp_token_list::push_back (std::unique_ptr<pp_token> tok)
  {
    if (!m_first)
*************** format_phase_2 (pretty_printer *pp,
*** 2034,2039 ****
--- 2044,2059 ----
  	    pp_string (pp, va_arg (*text.m_args_ptr, const char *));
  	  break;
  
+ 	case 'B':
+ 	  {
+ 	    string_slice s = *va_arg (*text.m_args_ptr, string_slice *);
+ 	    if (quote)
+ 	      pp_quoted_string (pp, s.begin (), s.size ());
+ 	    else
+ 	      pp_string_n (pp, s.begin (), s.size ());
+ 	    break;
+ 	  }
+ 
  	case 'p':
  	  pp_pointer (pp, va_arg (*text.m_args_ptr, void *));
  	  break;
*************** format_phase_2 (pretty_printer *pp,
*** 2177,2214 ****
        gcc_assert (!formatters[argno]);
  }
  
- struct auto_obstack
- {
-   auto_obstack ()
-   {
-     obstack_init (&m_obstack);
-   }
- 
-   ~auto_obstack ()
-   {
-     obstack_free (&m_obstack, NULL);
-   }
- 
-   operator obstack & () { return m_obstack; }
- 
-   void grow (const void *src, size_t length)
-   {
-     obstack_grow (&m_obstack, src, length);
-   }
- 
-   void *object_base () const
-   {
-     return m_obstack.object_base;
-   }
- 
-   size_t object_size () const
-   {
-     return obstack_object_size (&m_obstack);
-   }
- 
-   obstack m_obstack;
- };
- 
  /* Phase 3 of formatting a message (phases 1 and 2 done by pp_format).
  
     Pop a pp_formatted_chunks from chunk_obstack, collecting all the tokens from
--- 2197,2202 ----
*************** pp_output_formatted_text (pretty_printer
*** 2261,2267 ****
  
  /* Default implementation of token printing.  */
  
! static void
  default_token_printer (pretty_printer *pp,
  		       const pp_token_list &tokens)
  {
--- 2249,2255 ----
  
  /* Default implementation of token printing.  */
  
! void
  default_token_printer (pretty_printer *pp,
  		       const pp_token_list &tokens)
  {
*************** pp_markup::context::end_highlight_color
*** 3189,3194 ****
--- 3177,3205 ----
  }
  
  void
+ pp_markup::context::begin_url (const char *url)
+ {
+   push_back_any_text ();
+   m_formatted_token_list->push_back<pp_token_begin_url>
+     (label_text::take (xstrdup (url)));
+ }
+ 
+ void
+ pp_markup::context::end_url ()
+ {
+   push_back_any_text ();
+   m_formatted_token_list->push_back<pp_token_end_url> ();
+ }
+ 
+ void
+ pp_markup::context::add_event_id (diagnostic_event_id_t event_id)
+ {
+   gcc_assert (event_id.known_p ());
+   push_back_any_text ();
+   m_formatted_token_list->push_back<pp_token_event_id> (event_id);
+ }
+ 
+ void
  pp_markup::context::push_back_any_text ()
  {
    obstack *cur_obstack = m_buf.m_obstack;
diff -Nrcpad gcc-16-20250713/gcc/pta-andersen.cc gcc-16-20250720/gcc/pta-andersen.cc
*** gcc-16-20250713/gcc/pta-andersen.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/pta-andersen.cc	Sun Jul 20 22:32:10 2025
***************
*** 0 ****
--- 1,2565 ----
+ /* Andersen-style solver for tree based points-to analysis
+    Copyright (C) 2005-2025 Free Software Foundation, Inc.
+    Contributed by Daniel Berlin <dberlin@dberlin.org>
+ 
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify
+    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.
+ 
+    GCC is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "backend.h"
+ 
+ #include "tree-ssa-structalias.h"
+ #include "pta-andersen.h"
+ 
+ /* During variable substitution and the offline version of indirect
+    cycle finding, we create nodes to represent dereferences and
+    address taken constraints.  These represent where these start and
+    end.  */
+ #define FIRST_REF_NODE (varmap).length ()
+ #define LAST_REF_NODE (FIRST_REF_NODE + (FIRST_REF_NODE - 1))
+ 
+ #define EXECUTE_IF_IN_NONNULL_BITMAP(a, b, c, d)	\
+   if (a)						\
+     EXECUTE_IF_SET_IN_BITMAP (a, b, c, d)
+ 
+ using namespace pointer_analysis;
+ 
+ /* Used for predecessor bitmaps.  */
+ static bitmap_obstack predbitmap_obstack;
+ 
+ /* Used for per-solver-iteration bitmaps.  */
+ static bitmap_obstack iteration_obstack;
+ 
+ typedef struct constraint_graph *constraint_graph_t;
+ 
+ /* The constraint graph is represented as an array of bitmaps
+    containing successor nodes.  */
+ 
+ struct constraint_graph
+ {
+   /* Size of this graph, which may be different than the number of
+      nodes in the variable map.  */
+   unsigned int size;
+ 
+   /* Explicit successors of each node.  */
+   bitmap *succs;
+ 
+   /* Implicit predecessors of each node (Used for variable
+      substitution). */
+   bitmap *implicit_preds;
+ 
+   /* Explicit predecessors of each node (Used for variable substitution).  */
+   bitmap *preds;
+ 
+   /* Indirect cycle representatives, or -1 if the node has no indirect
+      cycles.  */
+   int *indirect_cycles;
+ 
+   /* Representative node for a node.  rep[a] == a unless the node has
+      been unified.  */
+   unsigned int *rep;
+ 
+   /* Equivalence class representative for a label.  This is used for
+      variable substitution.  */
+   int *eq_rep;
+ 
+   /* Pointer equivalence label for a node.  All nodes with the same
+      pointer equivalence label can be unified together at some point
+      (either during constraint optimization or after the constraint
+      graph is built).  */
+   unsigned int *pe;
+ 
+   /* Pointer equivalence representative for a label.  This is used to
+      handle nodes that are pointer equivalent but not location
+      equivalent.  We can unite these once the addressof constraints
+      are transformed into initial points-to sets.  */
+   int *pe_rep;
+ 
+   /* Pointer equivalence label for each node, used during variable
+      substitution.  */
+   unsigned int *pointer_label;
+ 
+   /* Location equivalence label for each node, used during location
+      equivalence finding.  */
+   unsigned int *loc_label;
+ 
+   /* Pointed-by set for each node, used during location equivalence
+      finding.  This is pointed-by rather than pointed-to, because it
+      is constructed using the predecessor graph.  */
+   bitmap *pointed_by;
+ 
+   /* Points to sets for pointer equivalence.  This is *not* the actual
+      points-to sets for nodes.  */
+   bitmap *points_to;
+ 
+   /* Bitmap of nodes where the bit is set if the node is a direct
+      node.  Used for variable substitution.  */
+   sbitmap direct_nodes;
+ 
+   /* Bitmap of nodes where the bit is set if the node is address
+      taken.  Used for variable substitution.  */
+   bitmap address_taken;
+ 
+   /* Vector of complex constraints for each graph node.  Complex
+      constraints are those involving dereferences or offsets that are
+      not 0.  */
+   vec<constraint_t> *complex;
+ };
+ 
+ static constraint_graph_t graph;
+ 
+ static void unify_nodes (constraint_graph_t, unsigned int, unsigned int, bool);
+ 
+ 
+ /* Return the representative node for NODE, if NODE has been unioned
+    with another NODE.
+    This function performs path compression along the way to finding
+    the representative.  */
+ 
+ static unsigned int
+ find (unsigned int node)
+ {
+   gcc_checking_assert (node < graph->size);
+   if (graph->rep[node] != node)
+     return graph->rep[node] = find (graph->rep[node]);
+   return node;
+ }
+ 
+ /* Union the TO and FROM nodes to the TO nodes.
+    Note that at some point in the future, we may want to do
+    union-by-rank, in which case we are going to have to return the
+    node we unified to.  */
+ 
+ static bool
+ unite (unsigned int to, unsigned int from)
+ {
+   gcc_checking_assert (to < graph->size && from < graph->size);
+   if (to != from && graph->rep[from] != to)
+     {
+       graph->rep[from] = to;
+       return true;
+     }
+   return false;
+ }
+ 
+ /* Perform path compression for all nodes in the node representatives
+    union-find structure.  */
+ 
+ static void
+ union_find_compress_all (void)
+ {
+   unsigned int i;
+   for (i = 0; i < graph->size; i++)
+     find (i);
+ }
+ 
+ /* Print the constraint graph in dot format.  */
+ 
+ static void
+ dump_constraint_graph (FILE *file)
+ {
+   unsigned int i;
+ 
+   /* Only print the graph if it has already been initialized:  */
+   if (!graph)
+     return;
+ 
+   /* Prints the header of the dot file:  */
+   fprintf (file, "strict digraph {\n");
+   fprintf (file, "  node [\n    shape = box\n  ]\n");
+   fprintf (file, "  edge [\n    fontsize = \"12\"\n  ]\n");
+   fprintf (file, "\n  // List of nodes and complex constraints in "
+ 	   "the constraint graph:\n");
+ 
+   /* The next lines print the nodes in the graph together with the
+      complex constraints attached to them.  */
+   for (i = 1; i < graph->size; i++)
+     {
+       if (i == FIRST_REF_NODE)
+ 	continue;
+       if (find (i) != i)
+ 	continue;
+       if (i < FIRST_REF_NODE)
+ 	fprintf (file, "\"%s\"", get_varinfo (i)->name);
+       else
+ 	fprintf (file, "\"*%s\"", get_varinfo (i - FIRST_REF_NODE)->name);
+       if (graph->complex[i].exists ())
+ 	{
+ 	  unsigned j;
+ 	  constraint_t c;
+ 	  fprintf (file, " [label=\"\\N\\n");
+ 	  for (j = 0; graph->complex[i].iterate (j, &c); ++j)
+ 	    {
+ 	      dump_constraint (file, c);
+ 	      fprintf (file, "\\l");
+ 	    }
+ 	  fprintf (file, "\"]");
+ 	}
+       fprintf (file, ";\n");
+     }
+ 
+   /* Go over the edges.  */
+   fprintf (file, "\n  // Edges in the constraint graph:\n");
+   for (i = 1; i < graph->size; i++)
+     {
+       unsigned j;
+       bitmap_iterator bi;
+       if (find (i) != i)
+ 	continue;
+       EXECUTE_IF_IN_NONNULL_BITMAP (graph->succs[i], 0, j, bi)
+ 	{
+ 	  unsigned to = find (j);
+ 	  if (i == to)
+ 	    continue;
+ 	  if (i < FIRST_REF_NODE)
+ 	    fprintf (file, "\"%s\"", get_varinfo (i)->name);
+ 	  else
+ 	    fprintf (file, "\"*%s\"", get_varinfo (i - FIRST_REF_NODE)->name);
+ 	  fprintf (file, " -> ");
+ 	  if (to < FIRST_REF_NODE)
+ 	    fprintf (file, "\"%s\"", get_varinfo (to)->name);
+ 	  else
+ 	    fprintf (file, "\"*%s\"", get_varinfo (to - FIRST_REF_NODE)->name);
+ 	  fprintf (file, ";\n");
+ 	}
+     }
+ 
+   /* Prints the tail of the dot file.  */
+   fprintf (file, "}\n");
+ }
+ 
+ /* Print out the constraint graph to stderr.  */
+ 
+ DEBUG_FUNCTION void
+ debug_constraint_graph (void)
+ {
+   dump_constraint_graph (stderr);
+ }
+ 
+ 
+ /* SOLVER FUNCTIONS
+ 
+    The solver is a simple worklist solver, that works on the following
+    algorithm:
+ 
+    sbitmap changed_nodes = all zeroes;
+    changed_count = 0;
+    For each node that is not already collapsed:
+        changed_count++;
+        set bit in changed nodes
+ 
+    while (changed_count > 0)
+    {
+      compute topological ordering for constraint graph
+ 
+      find and collapse cycles in the constraint graph (updating
+      changed if necessary)
+ 
+      for each node (n) in the graph in topological order:
+        changed_count--;
+ 
+        Process each complex constraint associated with the node,
+        updating changed if necessary.
+ 
+        For each outgoing edge from n, propagate the solution from n to
+        the destination of the edge, updating changed as necessary.
+ 
+    }  */
+ 
+ /* Return true if two constraint expressions A and B are equal.  */
+ 
+ static bool
+ constraint_expr_equal (struct constraint_expr a, struct constraint_expr b)
+ {
+   return a.type == b.type && a.var == b.var && a.offset == b.offset;
+ }
+ 
+ /* Return true if constraint expression A is less than constraint expression
+    B.  This is just arbitrary, but consistent, in order to give them an
+    ordering.  */
+ 
+ static bool
+ constraint_expr_less (struct constraint_expr a, struct constraint_expr b)
+ {
+   if (a.type == b.type)
+     {
+       if (a.var == b.var)
+ 	return a.offset < b.offset;
+       else
+ 	return a.var < b.var;
+     }
+   else
+     return a.type < b.type;
+ }
+ 
+ /* Return true if constraint A is less than constraint B.  This is just
+    arbitrary, but consistent, in order to give them an ordering.  */
+ 
+ static bool
+ constraint_less (const constraint_t &a, const constraint_t &b)
+ {
+   if (constraint_expr_less (a->lhs, b->lhs))
+     return true;
+   else if (constraint_expr_less (b->lhs, a->lhs))
+     return false;
+   else
+     return constraint_expr_less (a->rhs, b->rhs);
+ }
+ 
+ /* Return true if two constraints A and B are equal.  */
+ 
+ static bool
+ constraint_equal (const constraint &a, const constraint &b)
+ {
+   return constraint_expr_equal (a.lhs, b.lhs)
+     && constraint_expr_equal (a.rhs, b.rhs);
+ }
+ 
+ /* Find a constraint LOOKFOR in the sorted constraint vector VEC.  */
+ 
+ static constraint_t
+ constraint_vec_find (vec<constraint_t> vec,
+ 		     constraint &lookfor)
+ {
+   unsigned int place;
+   constraint_t found;
+ 
+   if (!vec.exists ())
+     return NULL;
+ 
+   place = vec.lower_bound (&lookfor, constraint_less);
+   if (place >= vec.length ())
+     return NULL;
+   found = vec[place];
+   if (!constraint_equal (*found, lookfor))
+     return NULL;
+   return found;
+ }
+ 
+ /* Union two constraint vectors, TO and FROM.  Put the result in TO.
+    Returns true of TO set is changed.  */
+ 
+ static bool
+ constraint_set_union (vec<constraint_t> *to,
+ 		      vec<constraint_t> *from)
+ {
+   int i;
+   constraint_t c;
+   bool any_change = false;
+ 
+   FOR_EACH_VEC_ELT (*from, i, c)
+     {
+       if (constraint_vec_find (*to, *c) == NULL)
+ 	{
+ 	  unsigned int place = to->lower_bound (c, constraint_less);
+ 	  to->safe_insert (place, c);
+ 	  any_change = true;
+ 	}
+     }
+   return any_change;
+ }
+ 
+ /* Expands the solution in SET to all sub-fields of variables included.  */
+ 
+ static bitmap
+ solution_set_expand (bitmap set, bitmap *expanded)
+ {
+   bitmap_iterator bi;
+   unsigned j;
+ 
+   if (*expanded)
+     return *expanded;
+ 
+   *expanded = BITMAP_ALLOC (&iteration_obstack);
+ 
+   /* In a first pass expand variables, once for each head to avoid
+      quadratic behavior, to include all sub-fields.  */
+   unsigned prev_head = 0;
+   EXECUTE_IF_SET_IN_BITMAP (set, 0, j, bi)
+     {
+       varinfo_t v = get_varinfo (j);
+       if (v->is_artificial_var
+ 	  || v->is_full_var)
+ 	continue;
+       if (v->head != prev_head)
+ 	{
+ 	  varinfo_t head = get_varinfo (v->head);
+ 	  unsigned num = 1;
+ 	  for (varinfo_t n = vi_next (head); n != NULL; n = vi_next (n))
+ 	    {
+ 	      if (n->id != head->id + num)
+ 		{
+ 		  /* Usually sub variables are adjacent but since we
+ 		     create pointed-to restrict representatives there
+ 		     can be gaps as well.  */
+ 		  bitmap_set_range (*expanded, head->id, num);
+ 		  head = n;
+ 		  num = 1;
+ 		}
+ 	      else
+ 		num++;
+ 	    }
+ 
+ 	  bitmap_set_range (*expanded, head->id, num);
+ 	  prev_head = v->head;
+ 	}
+     }
+ 
+   /* And finally set the rest of the bits from SET in an efficient way.  */
+   bitmap_ior_into (*expanded, set);
+ 
+   return *expanded;
+ }
+ 
+ /* Union solution sets TO and DELTA, and add INC to each member of DELTA in the
+    process.  */
+ 
+ static bool
+ set_union_with_increment (bitmap to, bitmap delta, HOST_WIDE_INT inc,
+ 			  bitmap *expanded_delta)
+ {
+   bool changed = false;
+   bitmap_iterator bi;
+   unsigned int i;
+ 
+   /* If the solution of DELTA contains anything it is good enough to transfer
+      this to TO.  */
+   if (bitmap_bit_p (delta, anything_id))
+     return bitmap_set_bit (to, anything_id);
+ 
+   /* If the offset is unknown we have to expand the solution to
+      all subfields.  */
+   if (inc == UNKNOWN_OFFSET)
+     {
+       delta = solution_set_expand (delta, expanded_delta);
+       changed |= bitmap_ior_into (to, delta);
+       return changed;
+     }
+ 
+   /* For non-zero offset union the offsetted solution into the destination.  */
+   EXECUTE_IF_SET_IN_BITMAP (delta, 0, i, bi)
+     {
+       varinfo_t vi = get_varinfo (i);
+ 
+       /* If this is a variable with just one field just set its bit
+ 	 in the result.  */
+       if (vi->is_artificial_var
+ 	  || vi->is_unknown_size_var
+ 	  || vi->is_full_var)
+ 	changed |= bitmap_set_bit (to, i);
+       else
+ 	{
+ 	  HOST_WIDE_INT fieldoffset = vi->offset + inc;
+ 	  unsigned HOST_WIDE_INT size = vi->size;
+ 
+ 	  /* If the offset makes the pointer point to before the
+ 	     variable use offset zero for the field lookup.  */
+ 	  if (fieldoffset < 0)
+ 	    vi = get_varinfo (vi->head);
+ 	  else
+ 	    vi = first_or_preceding_vi_for_offset (vi, fieldoffset);
+ 
+ 	  do
+ 	    {
+ 	      changed |= bitmap_set_bit (to, vi->id);
+ 	      if (vi->is_full_var
+ 		  || vi->next == 0)
+ 		break;
+ 
+ 	      /* We have to include all fields that overlap the current field
+ 		 shifted by inc.  */
+ 	      vi = vi_next (vi);
+ 	    }
+ 	  while (vi->offset < fieldoffset + size);
+ 	}
+     }
+ 
+   return changed;
+ }
+ 
+ /* Insert constraint C into the list of complex constraints for graph
+    node VAR.  */
+ 
+ static void
+ insert_into_complex (constraint_graph_t graph,
+ 		     unsigned int var, constraint_t c)
+ {
+   vec<constraint_t> complex = graph->complex[var];
+   unsigned int place = complex.lower_bound (c, constraint_less);
+ 
+   /* Only insert constraints that do not already exist.  */
+   if (place >= complex.length ()
+       || !constraint_equal (*c, *complex[place]))
+     graph->complex[var].safe_insert (place, c);
+ }
+ 
+ 
+ /* Condense two variable nodes into a single variable node, by moving
+    all associated info from FROM to TO.  Returns true if TO node's
+    constraint set changes after the merge.  */
+ 
+ static bool
+ merge_node_constraints (constraint_graph_t graph, unsigned int to,
+ 			unsigned int from)
+ {
+   unsigned int i;
+   constraint_t c;
+   bool any_change = false;
+ 
+   gcc_checking_assert (find (from) == to);
+ 
+   /* Move all complex constraints from src node into to node.  */
+   FOR_EACH_VEC_ELT (graph->complex[from], i, c)
+     {
+       /* In complex constraints for node FROM, we may have either
+ 	 a = *FROM, and *FROM = a, or an offseted constraint which are
+ 	 always added to the rhs node's constraints.  */
+ 
+       if (c->rhs.type == DEREF)
+ 	c->rhs.var = to;
+       else if (c->lhs.type == DEREF)
+ 	c->lhs.var = to;
+       else
+ 	c->rhs.var = to;
+ 
+     }
+   any_change = constraint_set_union (&graph->complex[to],
+ 				     &graph->complex[from]);
+   graph->complex[from].release ();
+   return any_change;
+ }
+ 
+ /* Remove edges involving NODE from GRAPH.  */
+ 
+ static void
+ clear_edges_for_node (constraint_graph_t graph, unsigned int node)
+ {
+   if (graph->succs[node])
+     BITMAP_FREE (graph->succs[node]);
+ }
+ 
+ /* Merge GRAPH nodes FROM and TO into node TO.  */
+ 
+ static void
+ merge_graph_nodes (constraint_graph_t graph, unsigned int to,
+ 		   unsigned int from)
+ {
+   if (graph->indirect_cycles[from] != -1)
+     {
+       /* If we have indirect cycles with the from node, and we have
+ 	 none on the to node, the to node has indirect cycles from the
+ 	 from node now that they are unified.
+ 	 If indirect cycles exist on both, unify the nodes that they
+ 	 are in a cycle with, since we know they are in a cycle with
+ 	 each other.  */
+       if (graph->indirect_cycles[to] == -1)
+ 	graph->indirect_cycles[to] = graph->indirect_cycles[from];
+     }
+ 
+   /* Merge all the successor edges.  */
+   if (graph->succs[from])
+     {
+       if (!graph->succs[to])
+ 	graph->succs[to] = BITMAP_ALLOC (&pta_obstack);
+       bitmap_ior_into (graph->succs[to],
+ 		       graph->succs[from]);
+     }
+ 
+   clear_edges_for_node (graph, from);
+ }
+ 
+ 
+ /* Add an indirect graph edge to GRAPH, going from TO to FROM if
+    it doesn't exist in the graph already.  */
+ 
+ static void
+ add_implicit_graph_edge (constraint_graph_t graph, unsigned int to,
+ 			 unsigned int from)
+ {
+   if (to == from)
+     return;
+ 
+   if (!graph->implicit_preds[to])
+     graph->implicit_preds[to] = BITMAP_ALLOC (&predbitmap_obstack);
+ 
+   if (bitmap_set_bit (graph->implicit_preds[to], from))
+     stats.num_implicit_edges++;
+ }
+ 
+ /* Add a predecessor graph edge to GRAPH, going from TO to FROM if
+    it doesn't exist in the graph already.
+    Return false if the edge already existed, true otherwise.  */
+ 
+ static void
+ add_pred_graph_edge (constraint_graph_t graph, unsigned int to,
+ 		     unsigned int from)
+ {
+   if (!graph->preds[to])
+     graph->preds[to] = BITMAP_ALLOC (&predbitmap_obstack);
+   bitmap_set_bit (graph->preds[to], from);
+ }
+ 
+ /* Add a graph edge to GRAPH, going from FROM to TO if
+    it doesn't exist in the graph already.
+    Return false if the edge already existed, true otherwise.  */
+ 
+ static bool
+ add_graph_edge (constraint_graph_t graph, unsigned int to,
+ 		unsigned int from)
+ {
+   if (to == from)
+     {
+       return false;
+     }
+   else
+     {
+       bool r = false;
+ 
+       if (!graph->succs[from])
+ 	graph->succs[from] = BITMAP_ALLOC (&pta_obstack);
+ 
+       /* The graph solving process does not avoid "triangles", thus
+ 	 there can be multiple paths from a node to another involving
+ 	 intermediate other nodes.  That causes extra copying which is
+ 	 most difficult to avoid when the intermediate node is ESCAPED
+ 	 because there are no edges added from ESCAPED.  Avoid
+ 	 adding the direct edge FROM -> TO when we have FROM -> ESCAPED
+ 	 and TO contains ESCAPED.
+ 	 ???  Note this is only a heuristic, it does not prevent the
+ 	 situation from occuring.  The heuristic helps PR38474 and
+ 	 PR99912 significantly.  */
+       if (to < FIRST_REF_NODE
+ 	  && bitmap_bit_p (graph->succs[from], find (escaped_id))
+ 	  && bitmap_bit_p (get_varinfo (find (to))->solution, escaped_id))
+ 	{
+ 	  stats.num_avoided_edges++;
+ 	  return false;
+ 	}
+ 
+       if (bitmap_set_bit (graph->succs[from], to))
+ 	{
+ 	  r = true;
+ 	  if (to < FIRST_REF_NODE && from < FIRST_REF_NODE)
+ 	    stats.num_edges++;
+ 	}
+       return r;
+     }
+ }
+ 
+ /* Initialize the constraint graph structure to contain SIZE nodes.  */
+ 
+ static void
+ init_graph (unsigned int size)
+ {
+   unsigned int j;
+ 
+   bitmap_obstack_initialize (&predbitmap_obstack);
+ 
+   graph = XCNEW (struct constraint_graph);
+   graph->size = size;
+   graph->succs = XCNEWVEC (bitmap, graph->size);
+   graph->indirect_cycles = XNEWVEC (int, graph->size);
+   graph->rep = XNEWVEC (unsigned int, graph->size);
+   /* ??? Macros do not support template types with multiple arguments,
+      so we use a typedef to work around it.  */
+   typedef vec<constraint_t> vec_constraint_t_heap;
+   graph->complex = XCNEWVEC (vec_constraint_t_heap, size);
+   graph->pe = XCNEWVEC (unsigned int, graph->size);
+   graph->pe_rep = XNEWVEC (int, graph->size);
+ 
+   for (j = 0; j < graph->size; j++)
+     {
+       graph->rep[j] = j;
+       graph->pe_rep[j] = -1;
+       graph->indirect_cycles[j] = -1;
+     }
+ }
+ 
+ /* Build the constraint graph, adding only predecessor edges right now.  */
+ 
+ static void
+ build_pred_graph (void)
+ {
+   int i;
+   constraint_t c;
+   unsigned int j;
+ 
+   graph->implicit_preds = XCNEWVEC (bitmap, graph->size);
+   graph->preds = XCNEWVEC (bitmap, graph->size);
+   graph->pointer_label = XCNEWVEC (unsigned int, graph->size);
+   graph->loc_label = XCNEWVEC (unsigned int, graph->size);
+   graph->pointed_by = XCNEWVEC (bitmap, graph->size);
+   graph->points_to = XCNEWVEC (bitmap, graph->size);
+   graph->eq_rep = XNEWVEC (int, graph->size);
+   graph->direct_nodes = sbitmap_alloc (graph->size);
+   graph->address_taken = BITMAP_ALLOC (&predbitmap_obstack);
+   bitmap_clear (graph->direct_nodes);
+ 
+   for (j = 1; j < FIRST_REF_NODE; j++)
+     {
+       if (!get_varinfo (j)->is_special_var)
+ 	bitmap_set_bit (graph->direct_nodes, j);
+     }
+ 
+   for (j = 0; j < graph->size; j++)
+     graph->eq_rep[j] = -1;
+ 
+   for (j = 0; j < varmap.length (); j++)
+     graph->indirect_cycles[j] = -1;
+ 
+   FOR_EACH_VEC_ELT (constraints, i, c)
+     {
+       struct constraint_expr lhs = c->lhs;
+       struct constraint_expr rhs = c->rhs;
+       unsigned int lhsvar = lhs.var;
+       unsigned int rhsvar = rhs.var;
+ 
+       if (lhs.type == DEREF)
+ 	{
+ 	  /* *x = y.  */
+ 	  if (rhs.offset == 0 && lhs.offset == 0 && rhs.type == SCALAR)
+ 	    {
+ 	      if (lhs.var == anything_id)
+ 		add_pred_graph_edge (graph, storedanything_id, rhsvar);
+ 	      else
+ 		add_pred_graph_edge (graph, FIRST_REF_NODE + lhsvar, rhsvar);
+ 	    }
+ 	}
+       else if (rhs.type == DEREF)
+ 	{
+ 	  /* x = *y */
+ 	  if (rhs.offset == 0 && lhs.offset == 0 && lhs.type == SCALAR)
+ 	    add_pred_graph_edge (graph, lhsvar, FIRST_REF_NODE + rhsvar);
+ 	  else
+ 	    bitmap_clear_bit (graph->direct_nodes, lhsvar);
+ 	}
+       else if (rhs.type == ADDRESSOF)
+ 	{
+ 	  varinfo_t v;
+ 
+ 	  /* x = &y */
+ 	  if (graph->points_to[lhsvar] == NULL)
+ 	    graph->points_to[lhsvar] = BITMAP_ALLOC (&predbitmap_obstack);
+ 	  bitmap_set_bit (graph->points_to[lhsvar], rhsvar);
+ 
+ 	  if (graph->pointed_by[rhsvar] == NULL)
+ 	    graph->pointed_by[rhsvar] = BITMAP_ALLOC (&predbitmap_obstack);
+ 	  bitmap_set_bit (graph->pointed_by[rhsvar], lhsvar);
+ 
+ 	  /* Implicitly, *x = y */
+ 	  add_implicit_graph_edge (graph, FIRST_REF_NODE + lhsvar, rhsvar);
+ 
+ 	  /* All related variables are no longer direct nodes.  */
+ 	  bitmap_clear_bit (graph->direct_nodes, rhsvar);
+ 	  v = get_varinfo (rhsvar);
+ 	  if (!v->is_full_var)
+ 	    {
+ 	      v = get_varinfo (v->head);
+ 	      do
+ 		{
+ 		  bitmap_clear_bit (graph->direct_nodes, v->id);
+ 		  v = vi_next (v);
+ 		}
+ 	      while (v != NULL);
+ 	    }
+ 	  bitmap_set_bit (graph->address_taken, rhsvar);
+ 	}
+       else if (lhsvar > anything_id
+ 	       && lhsvar != rhsvar && lhs.offset == 0 && rhs.offset == 0)
+ 	{
+ 	  /* x = y */
+ 	  add_pred_graph_edge (graph, lhsvar, rhsvar);
+ 	  /* Implicitly, *x = *y */
+ 	  add_implicit_graph_edge (graph, FIRST_REF_NODE + lhsvar,
+ 				   FIRST_REF_NODE + rhsvar);
+ 	}
+       else if (lhs.offset != 0 || rhs.offset != 0)
+ 	{
+ 	  if (rhs.offset != 0)
+ 	    bitmap_clear_bit (graph->direct_nodes, lhs.var);
+ 	  else if (lhs.offset != 0)
+ 	    bitmap_clear_bit (graph->direct_nodes, rhs.var);
+ 	}
+     }
+ }
+ 
+ /* Build the constraint graph, adding successor edges.  */
+ 
+ static void
+ build_succ_graph (void)
+ {
+   unsigned i, t;
+   constraint_t c;
+ 
+   FOR_EACH_VEC_ELT (constraints, i, c)
+     {
+       struct constraint_expr lhs;
+       struct constraint_expr rhs;
+       unsigned int lhsvar;
+       unsigned int rhsvar;
+ 
+       if (!c)
+ 	continue;
+ 
+       lhs = c->lhs;
+       rhs = c->rhs;
+       lhsvar = find (lhs.var);
+       rhsvar = find (rhs.var);
+ 
+       if (lhs.type == DEREF)
+ 	{
+ 	  if (rhs.offset == 0 && lhs.offset == 0 && rhs.type == SCALAR)
+ 	    {
+ 	      if (lhs.var == anything_id)
+ 		add_graph_edge (graph, storedanything_id, rhsvar);
+ 	      else
+ 		add_graph_edge (graph, FIRST_REF_NODE + lhsvar, rhsvar);
+ 	    }
+ 	}
+       else if (rhs.type == DEREF)
+ 	{
+ 	  if (rhs.offset == 0 && lhs.offset == 0 && lhs.type == SCALAR)
+ 	    add_graph_edge (graph, lhsvar, FIRST_REF_NODE + rhsvar);
+ 	}
+       else if (rhs.type == ADDRESSOF)
+ 	{
+ 	  /* x = &y */
+ 	  gcc_checking_assert (find (rhs.var) == rhs.var);
+ 	  bitmap_set_bit (get_varinfo (lhsvar)->solution, rhsvar);
+ 	}
+       else if (lhsvar > anything_id
+ 	       && lhsvar != rhsvar && lhs.offset == 0 && rhs.offset == 0)
+ 	{
+ 	  add_graph_edge (graph, lhsvar, rhsvar);
+ 	}
+     }
+ 
+   /* Add edges from STOREDANYTHING to all nodes that can receive pointers.  */
+   t = find (storedanything_id);
+   for (i = integer_id + 1; i < FIRST_REF_NODE; ++i)
+     {
+       if (get_varinfo (i)->may_have_pointers)
+ 	add_graph_edge (graph, find (i), t);
+     }
+ 
+   /* Everything stored to ANYTHING also potentially escapes.  */
+   add_graph_edge (graph, find (escaped_id), t);
+ }
+ 
+ 
+ /* Changed variables on the last iteration.  */
+ static bitmap changed;
+ 
+ /* Strongly Connected Component visitation info.  */
+ 
+ class scc_info
+ {
+ public:
+   scc_info (size_t size);
+   ~scc_info ();
+ 
+   auto_sbitmap visited;
+   auto_sbitmap deleted;
+   unsigned int *dfs;
+   unsigned int *node_mapping;
+   int current_index;
+   auto_vec<unsigned> scc_stack;
+ };
+ 
+ 
+ /* Recursive routine to find strongly connected components in GRAPH.
+    SI is the SCC info to store the information in, and N is the id of current
+    graph node we are processing.
+ 
+    This is Tarjan's strongly connected component finding algorithm, as
+    modified by Nuutila to keep only non-root nodes on the stack.
+    The algorithm can be found in "On finding the strongly connected
+    connected components in a directed graph" by Esko Nuutila and Eljas
+    Soisalon-Soininen, in Information Processing Letters volume 49,
+    number 1, pages 9-14.  */
+ 
+ static void
+ scc_visit (constraint_graph_t graph, class scc_info *si, unsigned int n)
+ {
+   unsigned int i;
+   bitmap_iterator bi;
+   unsigned int my_dfs;
+ 
+   bitmap_set_bit (si->visited, n);
+   si->dfs[n] = si->current_index ++;
+   my_dfs = si->dfs[n];
+ 
+   /* Visit all the successors.  */
+   EXECUTE_IF_IN_NONNULL_BITMAP (graph->succs[n], 0, i, bi)
+     {
+       unsigned int w;
+ 
+       if (i > LAST_REF_NODE)
+ 	break;
+ 
+       w = find (i);
+       if (bitmap_bit_p (si->deleted, w))
+ 	continue;
+ 
+       if (!bitmap_bit_p (si->visited, w))
+ 	scc_visit (graph, si, w);
+ 
+       unsigned int t = find (w);
+       gcc_checking_assert (find (n) == n);
+       if (si->dfs[t] < si->dfs[n])
+ 	si->dfs[n] = si->dfs[t];
+     }
+ 
+   /* See if any components have been identified.  */
+   if (si->dfs[n] == my_dfs)
+     {
+       if (si->scc_stack.length () > 0
+ 	  && si->dfs[si->scc_stack.last ()] >= my_dfs)
+ 	{
+ 	  bitmap scc = BITMAP_ALLOC (NULL);
+ 	  unsigned int lowest_node;
+ 	  bitmap_iterator bi;
+ 
+ 	  bitmap_set_bit (scc, n);
+ 
+ 	  while (si->scc_stack.length () != 0
+ 		 && si->dfs[si->scc_stack.last ()] >= my_dfs)
+ 	    {
+ 	      unsigned int w = si->scc_stack.pop ();
+ 
+ 	      bitmap_set_bit (scc, w);
+ 	    }
+ 
+ 	  lowest_node = bitmap_first_set_bit (scc);
+ 	  gcc_assert (lowest_node < FIRST_REF_NODE);
+ 
+ 	  /* Collapse the SCC nodes into a single node, and mark the
+ 	     indirect cycles.  */
+ 	  EXECUTE_IF_SET_IN_BITMAP (scc, 0, i, bi)
+ 	    {
+ 	      if (i < FIRST_REF_NODE)
+ 		{
+ 		  if (unite (lowest_node, i))
+ 		    unify_nodes (graph, lowest_node, i, false);
+ 		}
+ 	      else
+ 		{
+ 		  unite (lowest_node, i);
+ 		  graph->indirect_cycles[i - FIRST_REF_NODE] = lowest_node;
+ 		}
+ 	    }
+ 	  bitmap_set_bit (si->deleted, lowest_node);
+ 	}
+       else
+ 	bitmap_set_bit (si->deleted, n);
+     }
+   else
+     si->scc_stack.safe_push (n);
+ }
+ 
+ /* Unify node FROM into node TO, updating the changed count if
+    necessary when UPDATE_CHANGED is true.  */
+ 
+ static void
+ unify_nodes (constraint_graph_t graph, unsigned int to, unsigned int from,
+ 	     bool update_changed)
+ {
+   gcc_checking_assert (to != from && find (to) == to);
+ 
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     fprintf (dump_file, "Unifying %s to %s\n",
+ 	     get_varinfo (from)->name,
+ 	     get_varinfo (to)->name);
+ 
+   if (update_changed)
+     stats.unified_vars_dynamic++;
+   else
+     stats.unified_vars_static++;
+ 
+   merge_graph_nodes (graph, to, from);
+   if (merge_node_constraints (graph, to, from))
+     {
+       if (update_changed)
+ 	bitmap_set_bit (changed, to);
+     }
+ 
+   /* Mark TO as changed if FROM was changed.  If TO was already marked
+      as changed, decrease the changed count.  */
+ 
+   if (update_changed
+       && bitmap_clear_bit (changed, from))
+     bitmap_set_bit (changed, to);
+   varinfo_t fromvi = get_varinfo (from);
+   if (fromvi->solution)
+     {
+       /* If the solution changes because of the merging, we need to mark
+ 	 the variable as changed.  */
+       varinfo_t tovi = get_varinfo (to);
+       if (bitmap_ior_into (tovi->solution, fromvi->solution))
+ 	{
+ 	  if (update_changed)
+ 	    bitmap_set_bit (changed, to);
+ 	}
+ 
+       BITMAP_FREE (fromvi->solution);
+       if (fromvi->oldsolution)
+ 	BITMAP_FREE (fromvi->oldsolution);
+ 
+       if (stats.iterations > 0
+ 	  && tovi->oldsolution)
+ 	BITMAP_FREE (tovi->oldsolution);
+     }
+   if (graph->succs[to])
+     bitmap_clear_bit (graph->succs[to], to);
+ }
+ 
+ /* Add a copy edge FROM -> TO, optimizing special cases.  Returns TRUE
+    if the solution of TO changed.  */
+ 
+ static bool
+ solve_add_graph_edge (constraint_graph_t graph, unsigned int to,
+ 		      unsigned int from)
+ {
+   /* Adding edges from the special vars is pointless.
+      They don't have sets that can change.  */
+   if (get_varinfo (from)->is_special_var)
+     return bitmap_ior_into (get_varinfo (to)->solution,
+ 			    get_varinfo (from)->solution);
+   /* Merging the solution from ESCAPED needlessly increases
+      the set.  Use ESCAPED as representative instead.  */
+   else if (from == find (escaped_id))
+     return bitmap_set_bit (get_varinfo (to)->solution, escaped_id);
+   else if (get_varinfo (from)->may_have_pointers
+ 	   && add_graph_edge (graph, to, from))
+     return bitmap_ior_into (get_varinfo (to)->solution,
+ 			    get_varinfo (from)->solution);
+   return false;
+ }
+ 
+ /* Process a constraint C that represents x = *(y + off), using DELTA as the
+    starting solution for y.  */
+ 
+ static void
+ do_sd_constraint (constraint_graph_t graph, constraint_t c,
+ 		  bitmap delta, bitmap *expanded_delta)
+ {
+   unsigned int lhs = c->lhs.var;
+   bool flag = false;
+   bitmap sol = get_varinfo (lhs)->solution;
+   unsigned int j;
+   bitmap_iterator bi;
+   HOST_WIDE_INT roffset = c->rhs.offset;
+ 
+   /* Our IL does not allow this.  */
+   gcc_checking_assert (c->lhs.offset == 0);
+ 
+   /* If the solution of Y contains anything it is good enough to transfer
+      this to the LHS.  */
+   if (bitmap_bit_p (delta, anything_id))
+     {
+       flag |= bitmap_set_bit (sol, anything_id);
+       goto done;
+     }
+ 
+   /* If we do not know at with offset the rhs is dereferenced compute
+      the reachability set of DELTA, conservatively assuming it is
+      dereferenced at all valid offsets.  */
+   if (roffset == UNKNOWN_OFFSET)
+     {
+       delta = solution_set_expand (delta, expanded_delta);
+       /* No further offset processing is necessary.  */
+       roffset = 0;
+     }
+ 
+   /* For each variable j in delta (Sol(y)), add
+      an edge in the graph from j to x, and union Sol(j) into Sol(x).  */
+   EXECUTE_IF_SET_IN_BITMAP (delta, 0, j, bi)
+     {
+       varinfo_t v = get_varinfo (j);
+       HOST_WIDE_INT fieldoffset = v->offset + roffset;
+       unsigned HOST_WIDE_INT size = v->size;
+       unsigned int t;
+ 
+       if (v->is_full_var)
+ 	;
+       else if (roffset != 0)
+ 	{
+ 	  if (fieldoffset < 0)
+ 	    v = get_varinfo (v->head);
+ 	  else
+ 	    v = first_or_preceding_vi_for_offset (v, fieldoffset);
+ 	}
+ 
+       /* We have to include all fields that overlap the current field
+ 	 shifted by roffset.  */
+       do
+ 	{
+ 	  t = find (v->id);
+ 
+ 	  flag |= solve_add_graph_edge (graph, lhs, t);
+ 
+ 	  if (v->is_full_var
+ 	      || v->next == 0)
+ 	    break;
+ 
+ 	  v = vi_next (v);
+ 	}
+       while (v->offset < fieldoffset + size);
+     }
+ 
+ done:
+   /* If the LHS solution changed, mark the var as changed.  */
+   if (flag)
+     bitmap_set_bit (changed, lhs);
+ }
+ 
+ /* Process a constraint C that represents *(x + off) = y using DELTA
+    as the starting solution for x.  */
+ 
+ static void
+ do_ds_constraint (constraint_t c, bitmap delta, bitmap *expanded_delta)
+ {
+   unsigned int rhs = c->rhs.var;
+   bitmap sol = get_varinfo (rhs)->solution;
+   unsigned int j;
+   bitmap_iterator bi;
+   HOST_WIDE_INT loff = c->lhs.offset;
+   bool escaped_p = false;
+ 
+   /* Our IL does not allow this.  */
+   gcc_checking_assert (c->rhs.offset == 0);
+ 
+   /* If the solution of y contains ANYTHING simply use the ANYTHING
+      solution.  This avoids needlessly increasing the points-to sets.  */
+   if (bitmap_bit_p (sol, anything_id))
+     sol = get_varinfo (find (anything_id))->solution;
+ 
+   /* If the solution for x contains ANYTHING we have to merge the
+      solution of y into all pointer variables which we do via
+      STOREDANYTHING.  */
+   if (bitmap_bit_p (delta, anything_id))
+     {
+       unsigned t = find (storedanything_id);
+       if (solve_add_graph_edge (graph, t, rhs))
+ 	bitmap_set_bit (changed, t);
+       return;
+     }
+ 
+   /* If we do not know at with offset the rhs is dereferenced compute
+      the reachability set of DELTA, conservatively assuming it is
+      dereferenced at all valid offsets.  */
+   if (loff == UNKNOWN_OFFSET)
+     {
+       delta = solution_set_expand (delta, expanded_delta);
+       loff = 0;
+     }
+ 
+   /* For each member j of delta (Sol(x)), add an edge from y to j and
+      union Sol(y) into Sol(j) */
+   EXECUTE_IF_SET_IN_BITMAP (delta, 0, j, bi)
+     {
+       varinfo_t v = get_varinfo (j);
+       unsigned int t;
+       HOST_WIDE_INT fieldoffset = v->offset + loff;
+       unsigned HOST_WIDE_INT size = v->size;
+ 
+       if (v->is_full_var)
+ 	;
+       else if (loff != 0)
+ 	{
+ 	  if (fieldoffset < 0)
+ 	    v = get_varinfo (v->head);
+ 	  else
+ 	    v = first_or_preceding_vi_for_offset (v, fieldoffset);
+ 	}
+ 
+       /* We have to include all fields that overlap the current field
+ 	 shifted by loff.  */
+       do
+ 	{
+ 	  if (v->may_have_pointers)
+ 	    {
+ 	      /* If v is a global variable then this is an escape point.  */
+ 	      if (v->is_global_var
+ 		  && !escaped_p)
+ 		{
+ 		  t = find (escaped_id);
+ 		  if (add_graph_edge (graph, t, rhs)
+ 		      && bitmap_ior_into (get_varinfo (t)->solution, sol))
+ 		    bitmap_set_bit (changed, t);
+ 		  /* Enough to let rhs escape once.  */
+ 		  escaped_p = true;
+ 		}
+ 
+ 	      if (v->is_special_var)
+ 		break;
+ 
+ 	      t = find (v->id);
+ 
+ 	      if (solve_add_graph_edge (graph, t, rhs))
+ 		bitmap_set_bit (changed, t);
+ 	    }
+ 
+ 	  if (v->is_full_var
+ 	      || v->next == 0)
+ 	    break;
+ 
+ 	  v = vi_next (v);
+ 	}
+       while (v->offset < fieldoffset + size);
+     }
+ }
+ 
+ /* Handle a non-simple (simple meaning requires no iteration),
+    constraint (IE *x = &y, x = *y, *x = y, and x = y with offsets involved).  */
+ 
+ static void
+ do_complex_constraint (constraint_graph_t graph, constraint_t c, bitmap delta,
+ 		       bitmap *expanded_delta)
+ {
+   if (c->lhs.type == DEREF)
+     {
+       if (c->rhs.type == ADDRESSOF)
+ 	{
+ 	  gcc_unreachable ();
+ 	}
+       else
+ 	{
+ 	  /* *x = y */
+ 	  do_ds_constraint (c, delta, expanded_delta);
+ 	}
+     }
+   else if (c->rhs.type == DEREF)
+     {
+       /* x = *y */
+       if (!(get_varinfo (c->lhs.var)->is_special_var))
+ 	do_sd_constraint (graph, c, delta, expanded_delta);
+     }
+   else
+     {
+       bitmap tmp;
+       bool flag = false;
+ 
+       gcc_checking_assert (c->rhs.type == SCALAR && c->lhs.type == SCALAR
+ 			   && c->rhs.offset != 0 && c->lhs.offset == 0);
+       tmp = get_varinfo (c->lhs.var)->solution;
+ 
+       flag = set_union_with_increment (tmp, delta, c->rhs.offset,
+ 				       expanded_delta);
+ 
+       if (flag)
+ 	bitmap_set_bit (changed, c->lhs.var);
+     }
+ }
+ 
+ /* Initialize and return a new SCC info structure.  */
+ 
+ scc_info::scc_info (size_t size) :
+   visited (size), deleted (size), current_index (0), scc_stack (1)
+ {
+   bitmap_clear (visited);
+   bitmap_clear (deleted);
+   node_mapping = XNEWVEC (unsigned int, size);
+   dfs = XCNEWVEC (unsigned int, size);
+ 
+   for (size_t i = 0; i < size; i++)
+     node_mapping[i] = i;
+ }
+ 
+ /* Free an SCC info structure pointed to by SI.  */
+ 
+ scc_info::~scc_info ()
+ {
+   free (node_mapping);
+   free (dfs);
+ }
+ 
+ 
+ /* Find indirect cycles in GRAPH that occur, using strongly connected
+    components, and note them in the indirect cycles map.
+ 
+    This technique comes from Ben Hardekopf and Calvin Lin,
+    "It Pays to be Lazy: Fast and Accurate Pointer Analysis for Millions of
+    Lines of Code", submitted to PLDI 2007.  */
+ 
+ static void
+ find_indirect_cycles (constraint_graph_t graph)
+ {
+   unsigned int i;
+   unsigned int size = graph->size;
+   scc_info si (size);
+ 
+   for (i = 0; i < MIN (LAST_REF_NODE, size); i++)
+     if (!bitmap_bit_p (si.visited, i) && find (i) == i)
+       scc_visit (graph, &si, i);
+ }
+ 
+ /* Visit the graph in topological order starting at node N, and store the
+    order in TOPO_ORDER using VISITED to indicate visited nodes.  */
+ 
+ static void
+ topo_visit (constraint_graph_t graph, vec<unsigned> &topo_order,
+ 	    sbitmap visited, unsigned int n)
+ {
+   bitmap_iterator bi;
+   unsigned int j;
+ 
+   bitmap_set_bit (visited, n);
+ 
+   if (graph->succs[n])
+     EXECUTE_IF_SET_IN_BITMAP (graph->succs[n], 0, j, bi)
+       {
+ 	unsigned k = find (j);
+ 	if (!bitmap_bit_p (visited, k))
+ 	  topo_visit (graph, topo_order, visited, k);
+       }
+ 
+   /* Also consider copy with offset complex constraints as implicit edges.  */
+   for (auto c : graph->complex[n])
+     {
+       /* Constraints are ordered so that SCALAR = SCALAR appear first.  */
+       if (c->lhs.type != SCALAR || c->rhs.type != SCALAR)
+ 	break;
+       gcc_checking_assert (c->rhs.var == n);
+       unsigned k = find (c->lhs.var);
+       if (!bitmap_bit_p (visited, k))
+ 	topo_visit (graph, topo_order, visited, k);
+     }
+ 
+   topo_order.quick_push (n);
+ }
+ 
+ /* Compute a topological ordering for GRAPH, and return the result.  */
+ 
+ static auto_vec<unsigned>
+ compute_topo_order (constraint_graph_t graph)
+ {
+   unsigned int i;
+   unsigned int size = graph->size;
+ 
+   auto_sbitmap visited (size);
+   bitmap_clear (visited);
+ 
+   /* For the heuristic in add_graph_edge to work optimally make sure to
+      first visit the connected component of the graph containing
+      ESCAPED.  Do this by extracting the connected component
+      with ESCAPED and append that to all other components as solve_graph
+      pops from the order.  */
+   auto_vec<unsigned> tail (size);
+   topo_visit (graph, tail, visited, find (escaped_id));
+ 
+   auto_vec<unsigned> topo_order (size);
+ 
+   for (i = 0; i != size; ++i)
+     if (!bitmap_bit_p (visited, i) && find (i) == i)
+       topo_visit (graph, topo_order, visited, i);
+ 
+   topo_order.splice (tail);
+   return topo_order;
+ }
+ 
+ /* Structure used to for hash value numbering of pointer equivalence
+    classes.  */
+ 
+ typedef struct equiv_class_label
+ {
+   hashval_t hashcode;
+   unsigned int equivalence_class;
+   bitmap labels;
+ } *equiv_class_label_t;
+ typedef const struct equiv_class_label *const_equiv_class_label_t;
+ 
+ /* Equiv_class_label hashtable helpers.  */
+ 
+ struct equiv_class_hasher : nofree_ptr_hash <equiv_class_label>
+ {
+   static inline hashval_t hash (const equiv_class_label *);
+   static inline bool equal (const equiv_class_label *,
+ 			    const equiv_class_label *);
+ };
+ 
+ /* A hashtable for mapping a bitmap of labels->pointer equivalence
+    classes.  */
+ static hash_table<equiv_class_hasher> *pointer_equiv_class_table;
+ 
+ /* A hashtable for mapping a bitmap of labels->location equivalence
+    classes.  */
+ static hash_table<equiv_class_hasher> *location_equiv_class_table;
+ 
+ /* Hash function for a equiv_class_label_t.  */
+ 
+ inline hashval_t
+ equiv_class_hasher::hash (const equiv_class_label *ecl)
+ {
+   return ecl->hashcode;
+ }
+ 
+ /* Equality function for two equiv_class_label_t's.  */
+ 
+ inline bool
+ equiv_class_hasher::equal (const equiv_class_label *eql1,
+ 			   const equiv_class_label *eql2)
+ {
+   return (eql1->hashcode == eql2->hashcode
+ 	  && bitmap_equal_p (eql1->labels, eql2->labels));
+ }
+ 
+ struct obstack equiv_class_obstack;
+ 
+ /* Lookup a equivalence class in TABLE by the bitmap of LABELS with
+    hash HAS it contains.  Sets *REF_LABELS to the bitmap LABELS
+    is equivalent to.  */
+ 
+ static equiv_class_label *
+ equiv_class_lookup_or_add (hash_table<equiv_class_hasher> *table,
+ 			   bitmap labels)
+ {
+   equiv_class_label **slot;
+   equiv_class_label ecl;
+ 
+   ecl.labels = labels;
+   ecl.hashcode = bitmap_hash (labels);
+   slot = table->find_slot (&ecl, INSERT);
+   if (!*slot)
+     {
+       *slot = XOBNEW (&equiv_class_obstack, struct equiv_class_label);
+       (*slot)->labels = labels;
+       (*slot)->hashcode = ecl.hashcode;
+       (*slot)->equivalence_class = 0;
+     }
+ 
+   return *slot;
+ }
+ 
+ 
+ /* Perform offline variable substitution.
+ 
+    This is a worst case quadratic time way of identifying variables
+    that must have equivalent points-to sets, including those caused by
+    static cycles, and single entry subgraphs, in the constraint graph.
+ 
+    The technique is described in "Exploiting Pointer and Location
+    Equivalence to Optimize Pointer Analysis.  In the 14th International
+    Static Analysis Symposium (SAS), August 2007."  It is known as the
+    "HU" algorithm, and is equivalent to value numbering the collapsed
+    constraint graph including evaluating unions.
+ 
+    The general method of finding equivalence classes is as follows:
+    Add fake nodes (REF nodes) and edges for *a = b and a = *b constraints.
+    Initialize all non-REF nodes to be direct nodes.
+    For each constraint a = a U {b}, we set pts(a) = pts(a) u {fresh
+    variable}
+    For each constraint containing the dereference, we also do the same
+    thing.
+ 
+    We then compute SCC's in the graph and unify nodes in the same SCC,
+    including pts sets.
+ 
+    For each non-collapsed node x:
+     Visit all unvisited explicit incoming edges.
+     Ignoring all non-pointers, set pts(x) = Union of pts(a) for y
+     where y->x.
+     Lookup the equivalence class for pts(x).
+      If we found one, equivalence_class(x) = found class.
+      Otherwise, equivalence_class(x) = new class, and new_class is
+     added to the lookup table.
+ 
+    All direct nodes with the same equivalence class can be replaced
+    with a single representative node.
+    All unlabeled nodes (label == 0) are not pointers and all edges
+    involving them can be eliminated.
+    We perform these optimizations during rewrite_constraints
+ 
+    In addition to pointer equivalence class finding, we also perform
+    location equivalence class finding.  This is the set of variables
+    that always appear together in points-to sets.  We use this to
+    compress the size of the points-to sets.  */
+ 
+ /* Current maximum pointer equivalence class id.  */
+ static int pointer_equiv_class;
+ 
+ /* Current maximum location equivalence class id.  */
+ static int location_equiv_class;
+ 
+ /* Recursive routine to find strongly connected components in GRAPH,
+    and label it's nodes with DFS numbers.  */
+ 
+ static void
+ condense_visit (constraint_graph_t graph, class scc_info *si, unsigned int n)
+ {
+   unsigned int i;
+   bitmap_iterator bi;
+   unsigned int my_dfs;
+ 
+   gcc_checking_assert (si->node_mapping[n] == n);
+   bitmap_set_bit (si->visited, n);
+   si->dfs[n] = si->current_index ++;
+   my_dfs = si->dfs[n];
+ 
+   /* Visit all the successors.  */
+   EXECUTE_IF_IN_NONNULL_BITMAP (graph->preds[n], 0, i, bi)
+     {
+       unsigned int w = si->node_mapping[i];
+ 
+       if (bitmap_bit_p (si->deleted, w))
+ 	continue;
+ 
+       if (!bitmap_bit_p (si->visited, w))
+ 	condense_visit (graph, si, w);
+ 
+       unsigned int t = si->node_mapping[w];
+       gcc_checking_assert (si->node_mapping[n] == n);
+       if (si->dfs[t] < si->dfs[n])
+ 	si->dfs[n] = si->dfs[t];
+     }
+ 
+   /* Visit all the implicit predecessors.  */
+   EXECUTE_IF_IN_NONNULL_BITMAP (graph->implicit_preds[n], 0, i, bi)
+     {
+       unsigned int w = si->node_mapping[i];
+ 
+       if (bitmap_bit_p (si->deleted, w))
+ 	continue;
+ 
+       if (!bitmap_bit_p (si->visited, w))
+ 	condense_visit (graph, si, w);
+ 
+       unsigned int t = si->node_mapping[w];
+       gcc_assert (si->node_mapping[n] == n);
+       if (si->dfs[t] < si->dfs[n])
+ 	si->dfs[n] = si->dfs[t];
+     }
+ 
+   /* See if any components have been identified.  */
+   if (si->dfs[n] == my_dfs)
+     {
+       if (si->scc_stack.length () != 0
+ 	  && si->dfs[si->scc_stack.last ()] >= my_dfs)
+ 	{
+ 	  /* Find the first node of the SCC and do non-bitmap work.  */
+ 	  bool direct_p = true;
+ 	  unsigned first = si->scc_stack.length ();
+ 	  do
+ 	    {
+ 	      --first;
+ 	      unsigned int w = si->scc_stack[first];
+ 	      si->node_mapping[w] = n;
+ 	      if (!bitmap_bit_p (graph->direct_nodes, w))
+ 		direct_p = false;
+ 	    }
+ 	  while (first > 0
+ 		 && si->dfs[si->scc_stack[first - 1]] >= my_dfs);
+ 	  if (!direct_p)
+ 	    bitmap_clear_bit (graph->direct_nodes, n);
+ 
+ 	  /* Want to reduce to node n, push that first.  */
+ 	  si->scc_stack.reserve (1);
+ 	  si->scc_stack.quick_push (si->scc_stack[first]);
+ 	  si->scc_stack[first] = n;
+ 
+ 	  unsigned scc_size = si->scc_stack.length () - first;
+ 	  unsigned split = scc_size / 2;
+ 	  unsigned carry = scc_size - split * 2;
+ 	  while (split > 0)
+ 	    {
+ 	      for (unsigned i = 0; i < split; ++i)
+ 		{
+ 		  unsigned a = si->scc_stack[first + i];
+ 		  unsigned b = si->scc_stack[first + split + carry + i];
+ 
+ 		  /* Unify our nodes.  */
+ 		  if (graph->preds[b])
+ 		    {
+ 		      if (!graph->preds[a])
+ 			std::swap (graph->preds[a], graph->preds[b]);
+ 		      else
+ 			bitmap_ior_into_and_free (graph->preds[a],
+ 						  &graph->preds[b]);
+ 		    }
+ 		  if (graph->implicit_preds[b])
+ 		    {
+ 		      if (!graph->implicit_preds[a])
+ 			std::swap (graph->implicit_preds[a],
+ 				   graph->implicit_preds[b]);
+ 		      else
+ 			bitmap_ior_into_and_free (graph->implicit_preds[a],
+ 						  &graph->implicit_preds[b]);
+ 		    }
+ 		  if (graph->points_to[b])
+ 		    {
+ 		      if (!graph->points_to[a])
+ 			std::swap (graph->points_to[a], graph->points_to[b]);
+ 		      else
+ 			bitmap_ior_into_and_free (graph->points_to[a],
+ 						  &graph->points_to[b]);
+ 		    }
+ 		}
+ 	      unsigned remain = split + carry;
+ 	      split = remain / 2;
+ 	      carry = remain - split * 2;
+ 	    }
+ 	  /* Actually pop the SCC.  */
+ 	  si->scc_stack.truncate (first);
+ 	}
+       bitmap_set_bit (si->deleted, n);
+     }
+   else
+     si->scc_stack.safe_push (n);
+ }
+ 
+ /* Label pointer equivalences.
+ 
+    This performs a value numbering of the constraint graph to
+    discover which variables will always have the same points-to sets
+    under the current set of constraints.
+ 
+    The way it value numbers is to store the set of points-to bits
+    generated by the constraints and graph edges.  This is just used as a
+    hash and equality comparison.  The *actual set of points-to bits* is
+    completely irrelevant, in that we don't care about being able to
+    extract them later.
+ 
+    The equality values (currently bitmaps) just have to satisfy a few
+    constraints, the main ones being:
+    1. The combining operation must be order independent.
+    2. The end result of a given set of operations must be unique iff the
+       combination of input values is unique
+    3. Hashable.  */
+ 
+ static void
+ label_visit (constraint_graph_t graph, class scc_info *si, unsigned int n)
+ {
+   unsigned int i, first_pred;
+   bitmap_iterator bi;
+ 
+   bitmap_set_bit (si->visited, n);
+ 
+   /* Label and union our incoming edges's points to sets.  */
+   first_pred = -1U;
+   EXECUTE_IF_IN_NONNULL_BITMAP (graph->preds[n], 0, i, bi)
+     {
+       unsigned int w = si->node_mapping[i];
+       if (!bitmap_bit_p (si->visited, w))
+ 	label_visit (graph, si, w);
+ 
+       /* Skip unused edges.  */
+       if (w == n || graph->pointer_label[w] == 0)
+ 	continue;
+ 
+       if (graph->points_to[w])
+ 	{
+ 	  if (!graph->points_to[n])
+ 	    {
+ 	      if (first_pred == -1U)
+ 		first_pred = w;
+ 	      else
+ 		{
+ 		  graph->points_to[n] = BITMAP_ALLOC (&predbitmap_obstack);
+ 		  bitmap_ior (graph->points_to[n],
+ 			      graph->points_to[first_pred],
+ 			      graph->points_to[w]);
+ 		}
+ 	    }
+ 	  else
+ 	    bitmap_ior_into (graph->points_to[n], graph->points_to[w]);
+ 	}
+     }
+ 
+   /* Indirect nodes get fresh variables and a new pointer equiv class.  */
+   if (!bitmap_bit_p (graph->direct_nodes, n))
+     {
+       if (!graph->points_to[n])
+ 	{
+ 	  graph->points_to[n] = BITMAP_ALLOC (&predbitmap_obstack);
+ 	  if (first_pred != -1U)
+ 	    bitmap_copy (graph->points_to[n], graph->points_to[first_pred]);
+ 	}
+       bitmap_set_bit (graph->points_to[n], FIRST_REF_NODE + n);
+       graph->pointer_label[n] = pointer_equiv_class++;
+       equiv_class_label_t ecl;
+       ecl = equiv_class_lookup_or_add (pointer_equiv_class_table,
+ 				       graph->points_to[n]);
+       ecl->equivalence_class = graph->pointer_label[n];
+       return;
+     }
+ 
+   /* If there was only a single non-empty predecessor the pointer equiv
+      class is the same.  */
+   if (!graph->points_to[n])
+     {
+       if (first_pred != -1U)
+ 	{
+ 	  graph->pointer_label[n] = graph->pointer_label[first_pred];
+ 	  graph->points_to[n] = graph->points_to[first_pred];
+ 	}
+       return;
+     }
+ 
+   if (!bitmap_empty_p (graph->points_to[n]))
+     {
+       equiv_class_label_t ecl;
+       ecl = equiv_class_lookup_or_add (pointer_equiv_class_table,
+ 				       graph->points_to[n]);
+       if (ecl->equivalence_class == 0)
+ 	ecl->equivalence_class = pointer_equiv_class++;
+       else
+ 	{
+ 	  BITMAP_FREE (graph->points_to[n]);
+ 	  graph->points_to[n] = ecl->labels;
+ 	}
+       graph->pointer_label[n] = ecl->equivalence_class;
+     }
+ }
+ 
+ /* Print the pred graph in dot format.  */
+ 
+ static void
+ dump_pred_graph (class scc_info *si, FILE *file)
+ {
+   unsigned int i;
+ 
+   /* Only print the graph if it has already been initialized:  */
+   if (!graph)
+     return;
+ 
+   /* Prints the header of the dot file:  */
+   fprintf (file, "strict digraph {\n");
+   fprintf (file, "  node [\n    shape = box\n  ]\n");
+   fprintf (file, "  edge [\n    fontsize = \"12\"\n  ]\n");
+   fprintf (file, "\n  // List of nodes and complex constraints in "
+ 	   "the constraint graph:\n");
+ 
+   /* The next lines print the nodes in the graph together with the
+      complex constraints attached to them.  */
+   for (i = 1; i < graph->size; i++)
+     {
+       if (i == FIRST_REF_NODE)
+ 	continue;
+       if (si->node_mapping[i] != i)
+ 	continue;
+       if (i < FIRST_REF_NODE)
+ 	fprintf (file, "\"%s\"", get_varinfo (i)->name);
+       else
+ 	fprintf (file, "\"*%s\"", get_varinfo (i - FIRST_REF_NODE)->name);
+       if (graph->points_to[i]
+ 	  && !bitmap_empty_p (graph->points_to[i]))
+ 	{
+ 	  if (i < FIRST_REF_NODE)
+ 	    fprintf (file, "[label=\"%s = {", get_varinfo (i)->name);
+ 	  else
+ 	    fprintf (file, "[label=\"*%s = {",
+ 		     get_varinfo (i - FIRST_REF_NODE)->name);
+ 	  unsigned j;
+ 	  bitmap_iterator bi;
+ 	  EXECUTE_IF_SET_IN_BITMAP (graph->points_to[i], 0, j, bi)
+ 	    fprintf (file, " %d", j);
+ 	  fprintf (file, " }\"]");
+ 	}
+       fprintf (file, ";\n");
+     }
+ 
+   /* Go over the edges.  */
+   fprintf (file, "\n  // Edges in the constraint graph:\n");
+   for (i = 1; i < graph->size; i++)
+     {
+       unsigned j;
+       bitmap_iterator bi;
+       if (si->node_mapping[i] != i)
+ 	continue;
+       EXECUTE_IF_IN_NONNULL_BITMAP (graph->preds[i], 0, j, bi)
+ 	{
+ 	  unsigned from = si->node_mapping[j];
+ 	  if (from < FIRST_REF_NODE)
+ 	    fprintf (file, "\"%s\"", get_varinfo (from)->name);
+ 	  else
+ 	    fprintf (file, "\"*%s\"",
+ 		     get_varinfo (from - FIRST_REF_NODE)->name);
+ 	  fprintf (file, " -> ");
+ 	  if (i < FIRST_REF_NODE)
+ 	    fprintf (file, "\"%s\"", get_varinfo (i)->name);
+ 	  else
+ 	    fprintf (file, "\"*%s\"", get_varinfo (i - FIRST_REF_NODE)->name);
+ 	  fprintf (file, ";\n");
+ 	}
+     }
+ 
+   /* Prints the tail of the dot file.  */
+   fprintf (file, "}\n");
+ }
+ 
+ /* Perform offline variable substitution, discovering equivalence
+    classes, and eliminating non-pointer variables.  */
+ 
+ static class scc_info *
+ perform_var_substitution (constraint_graph_t graph)
+ {
+   unsigned int i;
+   unsigned int size = graph->size;
+   scc_info *si = new scc_info (size);
+ 
+   bitmap_obstack_initialize (&iteration_obstack);
+   gcc_obstack_init (&equiv_class_obstack);
+   pointer_equiv_class_table = new hash_table<equiv_class_hasher> (511);
+   location_equiv_class_table
+     = new hash_table<equiv_class_hasher> (511);
+   pointer_equiv_class = 1;
+   location_equiv_class = 1;
+ 
+   /* Condense the nodes, which means to find SCC's, count incoming
+      predecessors, and unite nodes in SCC's.  */
+   for (i = 1; i < FIRST_REF_NODE; i++)
+     if (!bitmap_bit_p (si->visited, si->node_mapping[i]))
+       condense_visit (graph, si, si->node_mapping[i]);
+ 
+   if (dump_file && (dump_flags & TDF_GRAPH))
+     {
+       fprintf (dump_file, "\n\n// The constraint graph before var-substitution "
+ 	       "in dot format:\n");
+       dump_pred_graph (si, dump_file);
+       fprintf (dump_file, "\n\n");
+     }
+ 
+   bitmap_clear (si->visited);
+   /* Actually the label the nodes for pointer equivalences.  */
+   for (i = 1; i < FIRST_REF_NODE; i++)
+     if (!bitmap_bit_p (si->visited, si->node_mapping[i]))
+       label_visit (graph, si, si->node_mapping[i]);
+ 
+   /* Calculate location equivalence labels.  */
+   for (i = 1; i < FIRST_REF_NODE; i++)
+     {
+       bitmap pointed_by;
+       bitmap_iterator bi;
+       unsigned int j;
+ 
+       if (!graph->pointed_by[i])
+ 	continue;
+       pointed_by = BITMAP_ALLOC (&iteration_obstack);
+ 
+       /* Translate the pointed-by mapping for pointer equivalence
+ 	 labels.  */
+       EXECUTE_IF_SET_IN_BITMAP (graph->pointed_by[i], 0, j, bi)
+ 	{
+ 	  bitmap_set_bit (pointed_by,
+ 			  graph->pointer_label[si->node_mapping[j]]);
+ 	}
+       /* The original pointed_by is now dead.  */
+       BITMAP_FREE (graph->pointed_by[i]);
+ 
+       /* Look up the location equivalence label if one exists, or make
+ 	 one otherwise.  */
+       equiv_class_label_t ecl;
+       ecl = equiv_class_lookup_or_add (location_equiv_class_table, pointed_by);
+       if (ecl->equivalence_class == 0)
+ 	ecl->equivalence_class = location_equiv_class++;
+       else
+ 	{
+ 	  if (dump_file && (dump_flags & TDF_DETAILS))
+ 	    fprintf (dump_file, "Found location equivalence for node %s\n",
+ 		     get_varinfo (i)->name);
+ 	  BITMAP_FREE (pointed_by);
+ 	}
+       graph->loc_label[i] = ecl->equivalence_class;
+ 
+     }
+ 
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     for (i = 1; i < FIRST_REF_NODE; i++)
+       {
+ 	unsigned j = si->node_mapping[i];
+ 	if (j != i)
+ 	  {
+ 	    fprintf (dump_file, "%s node id %d ",
+ 		     bitmap_bit_p (graph->direct_nodes, i)
+ 		     ? "Direct" : "Indirect", i);
+ 	    if (i < FIRST_REF_NODE)
+ 	      fprintf (dump_file, "\"%s\"", get_varinfo (i)->name);
+ 	    else
+ 	      fprintf (dump_file, "\"*%s\"",
+ 		       get_varinfo (i - FIRST_REF_NODE)->name);
+ 	    fprintf (dump_file, " mapped to SCC leader node id %d ", j);
+ 	    if (j < FIRST_REF_NODE)
+ 	      fprintf (dump_file, "\"%s\"\n", get_varinfo (j)->name);
+ 	    else
+ 	      fprintf (dump_file, "\"*%s\"\n",
+ 		       get_varinfo (j - FIRST_REF_NODE)->name);
+ 	  }
+ 	else
+ 	  {
+ 	    fprintf (dump_file,
+ 		     "Equivalence classes for %s node id %d ",
+ 		     bitmap_bit_p (graph->direct_nodes, i)
+ 		     ? "direct" : "indirect", i);
+ 	    if (i < FIRST_REF_NODE)
+ 	      fprintf (dump_file, "\"%s\"", get_varinfo (i)->name);
+ 	    else
+ 	      fprintf (dump_file, "\"*%s\"",
+ 		       get_varinfo (i - FIRST_REF_NODE)->name);
+ 	    fprintf (dump_file,
+ 		     ": pointer %d, location %d\n",
+ 		     graph->pointer_label[i], graph->loc_label[i]);
+ 	  }
+       }
+ 
+   /* Quickly eliminate our non-pointer variables.  */
+ 
+   for (i = 1; i < FIRST_REF_NODE; i++)
+     {
+       unsigned int node = si->node_mapping[i];
+ 
+       if (graph->pointer_label[node] == 0)
+ 	{
+ 	  if (dump_file && (dump_flags & TDF_DETAILS))
+ 	    fprintf (dump_file,
+ 		     "%s is a non-pointer variable, eliminating edges.\n",
+ 		     get_varinfo (node)->name);
+ 	  stats.nonpointer_vars++;
+ 	  clear_edges_for_node (graph, node);
+ 	}
+     }
+ 
+   return si;
+ }
+ 
+ /* Free information that was only necessary for variable
+    substitution.  */
+ 
+ static void
+ free_var_substitution_info (class scc_info *si)
+ {
+   delete si;
+   free (graph->pointer_label);
+   free (graph->loc_label);
+   free (graph->pointed_by);
+   free (graph->points_to);
+   free (graph->eq_rep);
+   sbitmap_free (graph->direct_nodes);
+   delete pointer_equiv_class_table;
+   pointer_equiv_class_table = NULL;
+   delete location_equiv_class_table;
+   location_equiv_class_table = NULL;
+   obstack_free (&equiv_class_obstack, NULL);
+   bitmap_obstack_release (&iteration_obstack);
+ }
+ 
+ /* Return an existing node that is equivalent to NODE, which has
+    equivalence class LABEL, if one exists.  Return NODE otherwise.  */
+ 
+ static unsigned int
+ find_equivalent_node (constraint_graph_t graph,
+ 		      unsigned int node, unsigned int label)
+ {
+   /* If the address version of this variable is unused, we can
+      substitute it for anything else with the same label.
+      Otherwise, we know the pointers are equivalent, but not the
+      locations, and we can unite them later.  */
+ 
+   if (!bitmap_bit_p (graph->address_taken, node))
+     {
+       gcc_checking_assert (label < graph->size);
+ 
+       if (graph->eq_rep[label] != -1)
+ 	{
+ 	  /* Unify the two variables since we know they are equivalent.  */
+ 	  if (unite (graph->eq_rep[label], node))
+ 	    unify_nodes (graph, graph->eq_rep[label], node, false);
+ 	  return graph->eq_rep[label];
+ 	}
+       else
+ 	{
+ 	  graph->eq_rep[label] = node;
+ 	  graph->pe_rep[label] = node;
+ 	}
+     }
+   else
+     {
+       gcc_checking_assert (label < graph->size);
+       graph->pe[node] = label;
+       if (graph->pe_rep[label] == -1)
+ 	graph->pe_rep[label] = node;
+     }
+ 
+   return node;
+ }
+ 
+ /* Unite pointer equivalent but not location equivalent nodes in
+    GRAPH.  This may only be performed once variable substitution is
+    finished.  */
+ 
+ static void
+ unite_pointer_equivalences (constraint_graph_t graph)
+ {
+   unsigned int i;
+ 
+   /* Go through the pointer equivalences and unite them to their
+      representative, if they aren't already.  */
+   for (i = 1; i < FIRST_REF_NODE; i++)
+     {
+       unsigned int label = graph->pe[i];
+       if (label)
+ 	{
+ 	  int label_rep = graph->pe_rep[label];
+ 
+ 	  if (label_rep == -1)
+ 	    continue;
+ 
+ 	  label_rep = find (label_rep);
+ 	  if (label_rep >= 0 && unite (label_rep, find (i)))
+ 	    unify_nodes (graph, label_rep, i, false);
+ 	}
+     }
+ }
+ 
+ /* Move complex constraints to the GRAPH nodes they belong to.  */
+ 
+ static void
+ move_complex_constraints (constraint_graph_t graph)
+ {
+   int i;
+   constraint_t c;
+ 
+   FOR_EACH_VEC_ELT (constraints, i, c)
+     {
+       if (c)
+ 	{
+ 	  struct constraint_expr lhs = c->lhs;
+ 	  struct constraint_expr rhs = c->rhs;
+ 
+ 	  if (lhs.type == DEREF)
+ 	    {
+ 	      insert_into_complex (graph, lhs.var, c);
+ 	    }
+ 	  else if (rhs.type == DEREF)
+ 	    {
+ 	      if (!(get_varinfo (lhs.var)->is_special_var))
+ 		insert_into_complex (graph, rhs.var, c);
+ 	    }
+ 	  else if (rhs.type != ADDRESSOF && lhs.var > anything_id
+ 		   && (lhs.offset != 0 || rhs.offset != 0))
+ 	    {
+ 	      insert_into_complex (graph, rhs.var, c);
+ 	    }
+ 	}
+     }
+ }
+ 
+ /* Optimize and rewrite complex constraints while performing
+    collapsing of equivalent nodes.  SI is the SCC_INFO that is the
+    result of perform_variable_substitution.  */
+ 
+ static void
+ rewrite_constraints (constraint_graph_t graph,
+ 		     class scc_info *si)
+ {
+   int i;
+   constraint_t c;
+ 
+   if (flag_checking)
+     {
+       for (unsigned int j = 0; j < graph->size; j++)
+ 	gcc_assert (find (j) == j);
+     }
+ 
+   FOR_EACH_VEC_ELT (constraints, i, c)
+     {
+       struct constraint_expr lhs = c->lhs;
+       struct constraint_expr rhs = c->rhs;
+       unsigned int lhsvar = find (lhs.var);
+       unsigned int rhsvar = find (rhs.var);
+       unsigned int lhsnode, rhsnode;
+       unsigned int lhslabel, rhslabel;
+ 
+       lhsnode = si->node_mapping[lhsvar];
+       rhsnode = si->node_mapping[rhsvar];
+       lhslabel = graph->pointer_label[lhsnode];
+       rhslabel = graph->pointer_label[rhsnode];
+ 
+       /* See if it is really a non-pointer variable, and if so, ignore
+ 	 the constraint.  */
+       if (lhslabel == 0)
+ 	{
+ 	  if (dump_file && (dump_flags & TDF_DETAILS))
+ 	    {
+ 
+ 	      fprintf (dump_file, "%s is a non-pointer variable, "
+ 		       "ignoring constraint:",
+ 		       get_varinfo (lhs.var)->name);
+ 	      dump_constraint (dump_file, c);
+ 	      fprintf (dump_file, "\n");
+ 	    }
+ 	  constraints[i] = NULL;
+ 	  continue;
+ 	}
+ 
+       if (rhslabel == 0)
+ 	{
+ 	  if (dump_file && (dump_flags & TDF_DETAILS))
+ 	    {
+ 
+ 	      fprintf (dump_file, "%s is a non-pointer variable, "
+ 		       "ignoring constraint:",
+ 		       get_varinfo (rhs.var)->name);
+ 	      dump_constraint (dump_file, c);
+ 	      fprintf (dump_file, "\n");
+ 	    }
+ 	  constraints[i] = NULL;
+ 	  continue;
+ 	}
+ 
+       lhsvar = find_equivalent_node (graph, lhsvar, lhslabel);
+       rhsvar = find_equivalent_node (graph, rhsvar, rhslabel);
+       c->lhs.var = lhsvar;
+       c->rhs.var = rhsvar;
+     }
+ }
+ 
+ /* Eliminate indirect cycles involving NODE.  Return true if NODE was
+    part of an SCC, false otherwise.  */
+ 
+ static bool
+ eliminate_indirect_cycles (unsigned int node)
+ {
+   if (graph->indirect_cycles[node] != -1
+       && !bitmap_empty_p (get_varinfo (node)->solution))
+     {
+       unsigned int i;
+       auto_vec<unsigned> queue;
+       int queuepos;
+       unsigned int to = find (graph->indirect_cycles[node]);
+       bitmap_iterator bi;
+ 
+       /* We can't touch the solution set and call unify_nodes
+ 	 at the same time, because unify_nodes is going to do
+ 	 bitmap unions into it.  */
+ 
+       EXECUTE_IF_SET_IN_BITMAP (get_varinfo (node)->solution, 0, i, bi)
+ 	{
+ 	  if (find (i) == i && i != to)
+ 	    {
+ 	      if (unite (to, i))
+ 		queue.safe_push (i);
+ 	    }
+ 	}
+ 
+       for (queuepos = 0;
+ 	   queue.iterate (queuepos, &i);
+ 	   queuepos++)
+ 	{
+ 	  unify_nodes (graph, to, i, true);
+ 	}
+       return true;
+     }
+   return false;
+ }
+ 
+ /* Solve the constraint graph GRAPH using our worklist solver.
+    This is based on the PW* family of solvers from the "Efficient Field
+    Sensitive Pointer Analysis for C" paper.
+    It works by iterating over all the graph nodes, processing the complex
+    constraints and propagating the copy constraints, until everything stops
+    changed.  This corresponds to steps 6-8 in the solving list given above.  */
+ 
+ static void
+ solve_graph (constraint_graph_t graph)
+ {
+   unsigned int size = graph->size;
+   unsigned int i;
+   bitmap pts;
+ 
+   changed = BITMAP_ALLOC (NULL);
+ 
+   /* Mark all initial non-collapsed nodes as changed.  */
+   for (i = 1; i < size; i++)
+     {
+       varinfo_t ivi = get_varinfo (i);
+       if (find (i) == i && !bitmap_empty_p (ivi->solution)
+ 	  && ((graph->succs[i] && !bitmap_empty_p (graph->succs[i]))
+ 	      || graph->complex[i].length () > 0))
+ 	bitmap_set_bit (changed, i);
+     }
+ 
+   /* Allocate a bitmap to be used to store the changed bits.  */
+   pts = BITMAP_ALLOC (&pta_obstack);
+ 
+   while (!bitmap_empty_p (changed))
+     {
+       unsigned int i;
+       stats.iterations++;
+ 
+       bitmap_obstack_initialize (&iteration_obstack);
+ 
+       auto_vec<unsigned> topo_order = compute_topo_order (graph);
+       while (topo_order.length () != 0)
+ 	{
+ 	  i = topo_order.pop ();
+ 
+ 	  /* If this variable is not a representative, skip it.  */
+ 	  if (find (i) != i)
+ 	    continue;
+ 
+ 	  /* In certain indirect cycle cases, we may merge this
+ 	     variable to another.  */
+ 	  if (eliminate_indirect_cycles (i) && find (i) != i)
+ 	    continue;
+ 
+ 	  /* If the node has changed, we need to process the
+ 	     complex constraints and outgoing edges again.  For complex
+ 	     constraints that modify i itself, like the common group of
+ 	       callarg = callarg + UNKNOWN;
+ 	       callarg = *callarg + UNKNOWN;
+ 	       *callarg = callescape;
+ 	     make sure to iterate immediately because that maximizes
+ 	     cache reuse and expands the graph quickest, leading to
+ 	     better visitation order in the next iteration.  */
+ 	  while (bitmap_clear_bit (changed, i))
+ 	    {
+ 	      bitmap solution;
+ 	      vec<constraint_t> &complex = graph->complex[i];
+ 	      varinfo_t vi = get_varinfo (i);
+ 	      bool solution_empty;
+ 
+ 	      /* Compute the changed set of solution bits.  If anything
+ 		 is in the solution just propagate that.  */
+ 	      if (bitmap_bit_p (vi->solution, anything_id))
+ 		{
+ 		  /* If anything is also in the old solution there is
+ 		     nothing to do.
+ 		     ???  But we shouldn't ended up with "changed" set ...  */
+ 		  if (vi->oldsolution
+ 		      && bitmap_bit_p (vi->oldsolution, anything_id))
+ 		    break;
+ 		  bitmap_copy (pts, get_varinfo (find (anything_id))->solution);
+ 		}
+ 	      else if (vi->oldsolution)
+ 		bitmap_and_compl (pts, vi->solution, vi->oldsolution);
+ 	      else
+ 		bitmap_copy (pts, vi->solution);
+ 
+ 	      if (bitmap_empty_p (pts))
+ 		break;
+ 
+ 	      if (vi->oldsolution)
+ 		bitmap_ior_into (vi->oldsolution, pts);
+ 	      else
+ 		{
+ 		  vi->oldsolution = BITMAP_ALLOC (&oldpta_obstack);
+ 		  bitmap_copy (vi->oldsolution, pts);
+ 		}
+ 
+ 	      solution = vi->solution;
+ 	      solution_empty = bitmap_empty_p (solution);
+ 
+ 	      /* Process the complex constraints.  */
+ 	      hash_set<constraint_t> *cvisited = nullptr;
+ 	      if (flag_checking)
+ 		cvisited = new hash_set<constraint_t>;
+ 	      bitmap expanded_pts = NULL;
+ 	      for (unsigned j = 0; j < complex.length (); ++j)
+ 		{
+ 		  constraint_t c = complex[j];
+ 		  /* At unification time only the directly involved nodes
+ 		     will get their complex constraints updated.  Update
+ 		     our complex constraints now but keep the constraint
+ 		     vector sorted and clear of duplicates.  Also make
+ 		     sure to evaluate each prevailing constraint only once.  */
+ 		  unsigned int new_lhs = find (c->lhs.var);
+ 		  unsigned int new_rhs = find (c->rhs.var);
+ 		  if (c->lhs.var != new_lhs || c->rhs.var != new_rhs)
+ 		    {
+ 		      constraint tem = *c;
+ 		      tem.lhs.var = new_lhs;
+ 		      tem.rhs.var = new_rhs;
+ 		      unsigned int place
+ 			= complex.lower_bound (&tem, constraint_less);
+ 		      c->lhs.var = new_lhs;
+ 		      c->rhs.var = new_rhs;
+ 		      if (place != j)
+ 			{
+ 			  complex.ordered_remove (j);
+ 			  if (j < place)
+ 			    --place;
+ 			  if (place < complex.length ())
+ 			    {
+ 			      if (constraint_equal (*complex[place], *c))
+ 				{
+ 				  j--;
+ 				  continue;
+ 				}
+ 			      else
+ 				complex.safe_insert (place, c);
+ 			    }
+ 			  else
+ 			    complex.quick_push (c);
+ 			  if (place > j)
+ 			    {
+ 			      j--;
+ 			      continue;
+ 			    }
+ 			}
+ 		    }
+ 
+ 		  /* The only complex constraint that can change our
+ 		     solution to non-empty, given an empty solution,
+ 		     is a constraint where the lhs side is receiving
+ 		     some set from elsewhere.  */
+ 		  if (cvisited && cvisited->add (c))
+ 		    gcc_unreachable ();
+ 		  if (!solution_empty || c->lhs.type != DEREF)
+ 		    do_complex_constraint (graph, c, pts, &expanded_pts);
+ 		}
+ 	      if (cvisited)
+ 		{
+ 		  /* When checking, verify the order of constraints is
+ 		     maintained and each constraint is evaluated exactly
+ 		     once.  */
+ 		  for (unsigned j = 1; j < complex.length (); ++j)
+ 		    gcc_assert (constraint_less (complex[j-1], complex[j]));
+ 		  gcc_assert (cvisited->elements () == complex.length ());
+ 		  delete cvisited;
+ 		}
+ 	      BITMAP_FREE (expanded_pts);
+ 
+ 	      solution_empty = bitmap_empty_p (solution);
+ 
+ 	      if (!solution_empty)
+ 		{
+ 		  bitmap_iterator bi;
+ 		  unsigned eff_escaped_id = find (escaped_id);
+ 		  unsigned j;
+ 
+ 		  /* Propagate solution to all successors.  */
+ 		  unsigned to_remove = ~0U;
+ 		  EXECUTE_IF_IN_NONNULL_BITMAP (graph->succs[i],
+ 						0, j, bi)
+ 		    {
+ 		      if (to_remove != ~0U)
+ 			{
+ 			  bitmap_clear_bit (graph->succs[i], to_remove);
+ 			  to_remove = ~0U;
+ 			}
+ 		      unsigned int to = find (j);
+ 		      if (to != j)
+ 			{
+ 			  /* Update the succ graph, avoiding duplicate
+ 			     work.  */
+ 			  to_remove = j;
+ 			  if (! bitmap_set_bit (graph->succs[i], to))
+ 			    continue;
+ 			  /* We eventually end up processing 'to' twice
+ 			     as it is undefined whether bitmap iteration
+ 			     iterates over bits set during iteration.
+ 			     Play safe instead of doing tricks.  */
+ 			}
+ 		      /* Don't try to propagate to ourselves.  */
+ 		      if (to == i)
+ 			{
+ 			  to_remove = j;
+ 			  continue;
+ 			}
+ 		      /* Early node unification can lead to edges from
+ 			 escaped - remove them.  */
+ 		      if (i == eff_escaped_id)
+ 			{
+ 			  to_remove = j;
+ 			  if (bitmap_set_bit (get_varinfo (to)->solution,
+ 					      escaped_id))
+ 			    bitmap_set_bit (changed, to);
+ 			  continue;
+ 			}
+ 
+ 		      if (bitmap_ior_into (get_varinfo (to)->solution, pts))
+ 			bitmap_set_bit (changed, to);
+ 		    }
+ 		  if (to_remove != ~0U)
+ 		    bitmap_clear_bit (graph->succs[i], to_remove);
+ 		}
+ 	    }
+ 	}
+       bitmap_obstack_release (&iteration_obstack);
+     }
+ 
+   BITMAP_FREE (pts);
+   BITMAP_FREE (changed);
+   bitmap_obstack_release (&oldpta_obstack);
+ }
+ 
+ void
+ delete_graph (void)
+ {
+   unsigned int i;
+   for (i = 0; i < graph->size; i++)
+     graph->complex[i].release ();
+   free (graph->complex);
+ 
+   free (graph->succs);
+   free (graph->pe);
+   free (graph->pe_rep);
+   free (graph->indirect_cycles);
+   /* We are not doing free (graph->rep) since the representatives mapping is
+      needed outside of the solver too.  */
+   free (graph);
+ }
+ 
+ /* Remove the REF and ADDRESS edges from GRAPH, as well as all the
+    predecessor edges.  */
+ 
+ static void
+ remove_preds_and_fake_succs (constraint_graph_t graph)
+ {
+   unsigned int i;
+ 
+   /* Clear the implicit ref and address nodes from the successor
+      lists.  */
+   for (i = 1; i < FIRST_REF_NODE; i++)
+     {
+       if (graph->succs[i])
+ 	bitmap_clear_range (graph->succs[i], FIRST_REF_NODE,
+ 			    FIRST_REF_NODE * 2);
+     }
+ 
+   /* Free the successor list for the non-ref nodes.  */
+   for (i = FIRST_REF_NODE + 1; i < graph->size; i++)
+     {
+       if (graph->succs[i])
+ 	BITMAP_FREE (graph->succs[i]);
+     }
+ 
+   /* Now reallocate the size of the successor list as, and blow away
+      the predecessor bitmaps.  */
+   graph->size = varmap.length ();
+   graph->succs = XRESIZEVEC (bitmap, graph->succs, graph->size);
+ 
+   free (graph->implicit_preds);
+   graph->implicit_preds = NULL;
+   free (graph->preds);
+   graph->preds = NULL;
+   bitmap_obstack_release (&predbitmap_obstack);
+ }
+ 
+ namespace pointer_analysis {
+ 
+ /* Solve the constraint set.  The entry function of the solver.  */
+ 
+ void
+ solve_constraints (void)
+ {
+   class scc_info *si;
+ 
+   /* Sort varinfos so that ones that cannot be pointed to are last.
+      This makes bitmaps more efficient.  */
+   unsigned int *map = XNEWVEC (unsigned int, varmap.length ());
+   for (unsigned i = 0; i < integer_id + 1; ++i)
+     map[i] = i;
+   /* Start with address-taken vars, followed by not address-taken vars
+      to move vars never appearing in the points-to solution bitmaps last.  */
+   unsigned j = integer_id + 1;
+   for (unsigned i = integer_id + 1; i < varmap.length (); ++i)
+     if (varmap[varmap[i]->head]->address_taken)
+       map[i] = j++;
+   for (unsigned i = integer_id + 1; i < varmap.length (); ++i)
+     if (! varmap[varmap[i]->head]->address_taken)
+       map[i] = j++;
+   /* Shuffle varmap according to map.  */
+   for (unsigned i = integer_id + 1; i < varmap.length (); ++i)
+     {
+       while (map[varmap[i]->id] != i)
+ 	std::swap (varmap[i], varmap[map[varmap[i]->id]]);
+       gcc_assert (bitmap_empty_p (varmap[i]->solution));
+       varmap[i]->id = i;
+       varmap[i]->next = map[varmap[i]->next];
+       varmap[i]->head = map[varmap[i]->head];
+     }
+   /* Finally rewrite constraints.  */
+   for (unsigned i = 0; i < constraints.length (); ++i)
+     {
+       constraints[i]->lhs.var = map[constraints[i]->lhs.var];
+       constraints[i]->rhs.var = map[constraints[i]->rhs.var];
+     }
+   free (map);
+ 
+   if (dump_file)
+     fprintf (dump_file,
+ 	     "\nCollapsing static cycles and doing variable "
+ 	     "substitution\n");
+ 
+   init_graph (varmap.length () * 2);
+ 
+   if (dump_file)
+     fprintf (dump_file, "Building predecessor graph\n");
+   build_pred_graph ();
+ 
+   if (dump_file)
+     fprintf (dump_file, "Detecting pointer and location "
+ 	     "equivalences\n");
+   si = perform_var_substitution (graph);
+ 
+   if (dump_file)
+     fprintf (dump_file, "Rewriting constraints and unifying "
+ 	     "variables\n");
+   rewrite_constraints (graph, si);
+ 
+   build_succ_graph ();
+ 
+   free_var_substitution_info (si);
+ 
+   /* Attach complex constraints to graph nodes.  */
+   move_complex_constraints (graph);
+ 
+   if (dump_file)
+     fprintf (dump_file, "Uniting pointer but not location equivalent "
+ 	     "variables\n");
+   unite_pointer_equivalences (graph);
+ 
+   if (dump_file)
+     fprintf (dump_file, "Finding indirect cycles\n");
+   find_indirect_cycles (graph);
+ 
+   /* Implicit nodes and predecessors are no longer necessary at this
+      point.  */
+   remove_preds_and_fake_succs (graph);
+ 
+   if (dump_file && (dump_flags & TDF_GRAPH))
+     {
+       fprintf (dump_file, "\n\n// The constraint graph before solve-graph "
+ 	       "in dot format:\n");
+       dump_constraint_graph (dump_file);
+       fprintf (dump_file, "\n\n");
+     }
+ 
+   if (dump_file)
+     fprintf (dump_file, "Solving graph\n");
+ 
+   solve_graph (graph);
+ 
+   if (dump_file && (dump_flags & TDF_GRAPH))
+     {
+       fprintf (dump_file, "\n\n// The constraint graph after solve-graph "
+ 	       "in dot format:\n");
+       dump_constraint_graph (dump_file);
+       fprintf (dump_file, "\n\n");
+     }
+ 
+   /* The mapping node -> representative is one of the outputs of the
+      solver.  */
+   union_find_compress_all ();
+   var_rep = graph->rep;
+ 
+   delete_graph ();
+ }
+ 
+ } // namespace pointer_analysis
diff -Nrcpad gcc-16-20250713/gcc/pta-andersen.h gcc-16-20250720/gcc/pta-andersen.h
*** gcc-16-20250713/gcc/pta-andersen.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/pta-andersen.h	Sun Jul 20 22:32:10 2025
***************
*** 0 ****
--- 1,31 ----
+ /* Andersen-style solver for tree based points-to analysis
+    Copyright (C) 2005-2025 Free Software Foundation, Inc.
+    Contributed by Daniel Berlin <dberlin@dberlin.org>
+ 
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify
+    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.
+ 
+    GCC is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef PTA_ANDERSEN_H
+ #define PTA_ANDERSEN_H
+ 
+ namespace pointer_analysis {
+ 
+ /* Solve the constraint set.  */
+ void solve_constraints (void);
+ 
+ } // namespace pointer_analysis
+ 
+ #endif /* PTA_ANDERSEN_H  */
diff -Nrcpad gcc-16-20250713/gcc/spellcheck.cc gcc-16-20250720/gcc/spellcheck.cc
*** gcc-16-20250713/gcc/spellcheck.cc	Sun Jul 13 22:32:27 2025
--- gcc-16-20250720/gcc/spellcheck.cc	Sun Jul 20 22:32:10 2025
*************** You should have received a copy of the G
*** 17,22 ****
--- 17,23 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  
+ #define INCLUDE_ALGORITHM
  #include "config.h"
  #include "system.h"
  #include "coretypes.h"
*************** along with GCC; see the file COPYING3.
*** 25,35 ****
  #include "spellcheck.h"
  #include "selftest.h"
  
  /* Cost of a case transformation.  */
! #define CASE_COST 1
  
  /* Cost of another kind of edit.  */
! #define BASE_COST 2
  
  /* Get the edit distance between the two strings: the minimal
     number of edits that are needed to change one string into another,
--- 26,40 ----
  #include "spellcheck.h"
  #include "selftest.h"
  
+ namespace {
+ 
  /* Cost of a case transformation.  */
! const edit_distance_t case_cost = 1;
  
  /* Cost of another kind of edit.  */
! const edit_distance_t base_cost = 2;
! 
! } // anonymous namespace
  
  /* Get the edit distance between the two strings: the minimal
     number of edits that are needed to change one string into another,
*************** get_edit_distance (const char *s, int le
*** 55,63 ****
      }
  
    if (len_s == 0)
!     return BASE_COST * len_t;
    if (len_t == 0)
!     return BASE_COST * len_s;
  
    /* We effectively build a matrix where each (i, j) contains the
       distance between the prefix strings s[0:j] and t[0:i].
--- 60,68 ----
      }
  
    if (len_s == 0)
!     return base_cost * len_t;
    if (len_t == 0)
!     return base_cost * len_s;
  
    /* We effectively build a matrix where each (i, j) contains the
       distance between the prefix strings s[0:j] and t[0:i].
*************** get_edit_distance (const char *s, int le
*** 75,81 ****
    /* The first row is for the case of an empty target string, which
       we can reach by deleting every character in the source string.  */
    for (int i = 0; i < len_s + 1; i++)
!     v_one_ago[i] = i * BASE_COST;
  
    /* Build successive rows.  */
    for (int i = 0; i < len_t; i++)
--- 80,86 ----
    /* The first row is for the case of an empty target string, which
       we can reach by deleting every character in the source string.  */
    for (int i = 0; i < len_s + 1; i++)
!     v_one_ago[i] = i * base_cost;
  
    /* Build successive rows.  */
    for (int i = 0; i < len_t; i++)
*************** get_edit_distance (const char *s, int le
*** 91,97 ****
        /* The initial column is for the case of an empty source string; we
  	 can reach prefixes of the target string of length i
  	 by inserting i characters.  */
!       v_next[0] = (i + 1) * BASE_COST;
  
        /* Build the rest of the row by considering neighbors to
  	 the north, west and northwest.  */
--- 96,102 ----
        /* The initial column is for the case of an empty source string; we
  	 can reach prefixes of the target string of length i
  	 by inserting i characters.  */
!       v_next[0] = (i + 1) * base_cost;
  
        /* Build the rest of the row by considering neighbors to
  	 the north, west and northwest.  */
*************** get_edit_distance (const char *s, int le
*** 102,119 ****
  	  if (s[j] == t[i])
  	    cost = 0;
  	  else if (TOLOWER (s[j]) == TOLOWER (t[i]))
! 	    cost = CASE_COST;
  	  else
! 	    cost = BASE_COST;
! 	  edit_distance_t deletion     = v_next[j] + BASE_COST;
! 	  edit_distance_t insertion    = v_one_ago[j + 1] + BASE_COST;
  	  edit_distance_t substitution = v_one_ago[j] + cost;
! 	  edit_distance_t cheapest = MIN (deletion, insertion);
! 	  cheapest = MIN (cheapest, substitution);
  	  if (i > 0 && j > 0 && s[j] == t[i - 1] && s[j - 1] == t[i])
  	    {
! 	      edit_distance_t transposition = v_two_ago[j - 1] + BASE_COST;
! 	      cheapest = MIN (cheapest, transposition);
  	    }
  	  v_next[j + 1] = cheapest;
  	}
--- 107,124 ----
  	  if (s[j] == t[i])
  	    cost = 0;
  	  else if (TOLOWER (s[j]) == TOLOWER (t[i]))
! 	    cost = case_cost;
  	  else
! 	    cost = base_cost;
! 	  edit_distance_t deletion     = v_next[j] + base_cost;
! 	  edit_distance_t insertion    = v_one_ago[j + 1] + base_cost;
  	  edit_distance_t substitution = v_one_ago[j] + cost;
! 	  edit_distance_t cheapest = std::min (deletion, insertion);
! 	  cheapest = std::min (cheapest, substitution);
  	  if (i > 0 && j > 0 && s[j] == t[i - 1] && s[j - 1] == t[i])
  	    {
! 	      edit_distance_t transposition = v_two_ago[j - 1] + base_cost;
! 	      cheapest = std::min (cheapest, transposition);
  	    }
  	  v_next[j + 1] = cheapest;
  	}
*************** find_closest_string (const char *target,
*** 187,194 ****
  edit_distance_t
  get_edit_distance_cutoff (size_t goal_len, size_t candidate_len)
  {
!   size_t max_length = MAX (goal_len, candidate_len);
!   size_t min_length = MIN (goal_len, candidate_len);
  
    gcc_assert (max_length >= min_length);
  
--- 192,199 ----
  edit_distance_t
  get_edit_distance_cutoff (size_t goal_len, size_t candidate_len)
  {
!   size_t max_length = std::max (goal_len, candidate_len);
!   size_t min_length = std::min (goal_len, candidate_len);
  
    gcc_assert (max_length >= min_length);
  
*************** get_edit_distance_cutoff (size_t goal_le
*** 200,210 ****
    /* If the lengths are close, then round down.  */
    if (max_length - min_length <= 1)
      /* ...but allow an edit distance of at least 1.  */
!     return BASE_COST * MAX (max_length / 3, 1);
  
    /* Otherwise, round up (thus giving a little extra leeway to some cases
       involving insertions/deletions).  */
!   return BASE_COST * (max_length + 2) / 3;
  }
  
  #if CHECKING_P
--- 205,215 ----
    /* If the lengths are close, then round down.  */
    if (max_length - min_length <= 1)
      /* ...but allow an edit distance of at least 1.  */
!     return base_cost * std::max (max_length / 3, size_t {1});
  
    /* Otherwise, round up (thus giving a little extra leeway to some cases
       involving insertions/deletions).  */
!   return base_cost * (max_length + 2) / 3;
  }
  
  #if CHECKING_P
*************** static void
*** 244,292 ****
  test_edit_distances ()
  {
    test_get_edit_distance_both_ways ("", "nonempty",
! 				    BASE_COST * strlen ("nonempty"));
    test_get_edit_distance_both_ways ("saturday", "sunday",
! 				    BASE_COST * 3);
!   test_get_edit_distance_both_ways ("foo", "m_foo", BASE_COST * 2);
    test_get_edit_distance_both_ways ("hello_world", "HelloWorld", 4);
    test_get_edit_distance_both_ways
!     ("the quick brown fox jumps over the lazy dog", "dog", BASE_COST * 40);
    test_get_edit_distance_both_ways
      ("the quick brown fox jumps over the lazy dog",
       "the quick brown dog jumps over the lazy fox",
!      BASE_COST * 4);
    test_get_edit_distance_both_ways
      ("Lorem ipsum dolor sit amet, consectetur adipiscing elit,",
       "All your base are belong to us",
!      BASE_COST * 44);
    test_get_edit_distance_both_ways ("foo", "FOO", 3);
!   test_get_edit_distance_both_ways ("fee", "deed", BASE_COST * 2);
!   test_get_edit_distance_both_ways ("coorzd1", "coordx1", BASE_COST * 2);
!   test_get_edit_distance_both_ways ("assert", "sqrt", BASE_COST * 3);
!   test_get_edit_distance_both_ways ("PATH_MAX", "INT8_MAX", BASE_COST * 3);
!   test_get_edit_distance_both_ways ("time", "nice", BASE_COST * 2);
!   test_get_edit_distance_both_ways ("bar", "carg", BASE_COST * 2);
    test_get_edit_distance_both_ways ("gtk_widget_show_all",
  				    "GtkWidgetShowAll", 10);
!   test_get_edit_distance_both_ways ("m_bar", "bar", BASE_COST * 2);
!   test_get_edit_distance_both_ways ("MACRO", "MACRAME", BASE_COST * 3);
!   test_get_edit_distance_both_ways ("ab", "ac", BASE_COST * 1);
!   test_get_edit_distance_both_ways ("ab", "a", BASE_COST * 1);
!   test_get_edit_distance_both_ways ("a", "b", BASE_COST * 1);
!   test_get_edit_distance_both_ways ("nanl", "name", BASE_COST * 2);
!   test_get_edit_distance_both_ways ("char", "bar", BASE_COST * 2);
!   test_get_edit_distance_both_ways ("-optimize", "fsanitize", BASE_COST * 5);
!   test_get_edit_distance_both_ways ("__DATE__", "__i386__", BASE_COST * 4);
  
    /* Examples where transposition helps.  */
!   test_get_edit_distance_both_ways ("ab", "ba", BASE_COST * 1);
!   test_get_edit_distance_both_ways ("ba", "abc", BASE_COST * 2);
!   test_get_edit_distance_both_ways ("coorzd1", "coordz1", BASE_COST * 1);
    test_get_edit_distance_both_ways ("abcdefghijklmnopqrstuvwxyz",
  				    "bacdefghijklmnopqrstuvwxzy",
! 				    BASE_COST * 2);
!   test_get_edit_distance_both_ways ("saturday", "sundya", BASE_COST * 4);
!   test_get_edit_distance_both_ways ("signed", "singed", BASE_COST * 1);
  }
  
  /* Subroutine of test_get_edit_distance_cutoff, for emulating the
--- 249,297 ----
  test_edit_distances ()
  {
    test_get_edit_distance_both_ways ("", "nonempty",
! 				    base_cost * strlen ("nonempty"));
    test_get_edit_distance_both_ways ("saturday", "sunday",
! 				    base_cost * 3);
!   test_get_edit_distance_both_ways ("foo", "m_foo", base_cost * 2);
    test_get_edit_distance_both_ways ("hello_world", "HelloWorld", 4);
    test_get_edit_distance_both_ways
!     ("the quick brown fox jumps over the lazy dog", "dog", base_cost * 40);
    test_get_edit_distance_both_ways
      ("the quick brown fox jumps over the lazy dog",
       "the quick brown dog jumps over the lazy fox",
!      base_cost * 4);
    test_get_edit_distance_both_ways
      ("Lorem ipsum dolor sit amet, consectetur adipiscing elit,",
       "All your base are belong to us",
!      base_cost * 44);
    test_get_edit_distance_both_ways ("foo", "FOO", 3);
!   test_get_edit_distance_both_ways ("fee", "deed", base_cost * 2);
!   test_get_edit_distance_both_ways ("coorzd1", "coordx1", base_cost * 2);
!   test_get_edit_distance_both_ways ("assert", "sqrt", base_cost * 3);
!   test_get_edit_distance_both_ways ("PATH_MAX", "INT8_MAX", base_cost * 3);
!   test_get_edit_distance_both_ways ("time", "nice", base_cost * 2);
!   test_get_edit_distance_both_ways ("bar", "carg", base_cost * 2);
    test_get_edit_distance_both_ways ("gtk_widget_show_all",
  				    "GtkWidgetShowAll", 10);
!   test_get_edit_distance_both_ways ("m_bar", "bar", base_cost * 2);
!   test_get_edit_distance_both_ways ("MACRO", "MACRAME", base_cost * 3);
!   test_get_edit_distance_both_ways ("ab", "ac", base_cost * 1);
!   test_get_edit_distance_both_ways ("ab", "a", base_cost * 1);
!   test_get_edit_distance_both_ways ("a", "b", base_cost * 1);
!   test_get_edit_distance_both_ways ("nanl", "name", base_cost * 2);
!   test_get_edit_distance_both_ways ("char", "bar", base_cost * 2);
!   test_get_edit_distance_both_ways ("-optimize", "fsanitize", base_cost * 5);
!   test_get_edit_distance_both_ways ("__DATE__", "__i386__", base_cost * 4);
  
    /* Examples where transposition helps.  */
!   test_get_edit_distance_both_ways ("ab", "ba", base_cost * 1);
!   test_get_edit_distance_both_ways ("ba", "abc", base_cost * 2);
!   test_get_edit_distance_both_ways ("coorzd1", "coordz1", base_cost * 1);
    test_get_edit_distance_both_ways ("abcdefghijklmnopqrstuvwxyz",
  				    "bacdefghijklmnopqrstuvwxzy",
! 				    base_cost * 2);
!   test_get_edit_distance_both_ways ("saturday", "sundya", base_cost * 4);
!   test_get_edit_distance_both_ways ("signed", "singed", base_cost * 1);
  }
  
  /* Subroutine of test_get_edit_distance_cutoff, for emulating the
*************** test_edit_distances ()
*** 295,301 ****
  static edit_distance_t
  get_old_cutoff (size_t goal_len, size_t candidate_len)
  {
!   return BASE_COST * MAX (goal_len, candidate_len) / 2;
  }
  
  /* Verify that the cutoff for "meaningfulness" of suggestions is at least as
--- 300,306 ----
  static edit_distance_t
  get_old_cutoff (size_t goal_len, size_t candidate_len)
  {
!   return base_cost * std::max (goal_len, candidate_len) / 2;
  }
  
  /* Verify that the cutoff for "meaningfulness" of suggestions is at least as
*************** assert_not_suggested_for (const location
*** 339,345 ****
  {
    auto_vec<const char *> candidates;
    candidates.safe_push (candidate);
!   ASSERT_EQ_AT (loc, NULL, find_closest_string (target, &candidates));
  }
  
  /* Assert that CANDIDATE is not offered as a suggestion for TARGET.  */
--- 344,350 ----
  {
    auto_vec<const char *> candidates;
    candidates.safe_push (candidate);
!   ASSERT_EQ_AT (loc, nullptr, find_closest_string (target, &candidates));
  }
  
  /* Assert that CANDIDATE is not offered as a suggestion for TARGET.  */
*************** test_find_closest_string ()
*** 409,415 ****
    auto_vec<const char *> candidates;
  
    /* Verify that it can handle an empty vec.  */
!   ASSERT_EQ (NULL, find_closest_string ("", &candidates));
  
    /* Verify that it works sanely for non-empty vecs.  */
    candidates.safe_push ("apple");
--- 414,420 ----
    auto_vec<const char *> candidates;
  
    /* Verify that it can handle an empty vec.  */
!   ASSERT_EQ (nullptr, find_closest_string ("", &candidates));
  
    /* Verify that it works sanely for non-empty vecs.  */
    candidates.safe_push ("apple");
*************** test_find_closest_string ()
*** 419,425 ****
    ASSERT_STREQ ("apple", find_closest_string ("app", &candidates));
    ASSERT_STREQ ("banana", find_closest_string ("banyan", &candidates));
    ASSERT_STREQ ("cherry", find_closest_string ("berry", &candidates));
!   ASSERT_EQ (NULL, find_closest_string ("not like the others", &candidates));
  
    /* The order of the vec can matter, but it should not matter for these
       inputs.  */
--- 424,430 ----
    ASSERT_STREQ ("apple", find_closest_string ("app", &candidates));
    ASSERT_STREQ ("banana", find_closest_string ("banyan", &candidates));
    ASSERT_STREQ ("cherry", find_closest_string ("berry", &candidates));
!   ASSERT_EQ (nullptr, find_closest_string ("not like the others", &candidates));
  
    /* The order of the vec can matter, but it should not matter for these
       inputs.  */
*************** test_find_closest_string ()
*** 430,441 ****
    ASSERT_STREQ ("apple", find_closest_string ("app", &candidates));
    ASSERT_STREQ ("banana", find_closest_string ("banyan", &candidates));
    ASSERT_STREQ ("cherry", find_closest_string ("berry", &candidates));
!   ASSERT_EQ (NULL, find_closest_string ("not like the others", &candidates));
  
    /* If the goal string somehow makes it into the candidate list, offering
       it as a suggestion will be nonsensical.  Verify that we don't offer such
       suggestions.  */
!   ASSERT_EQ (NULL, find_closest_string ("banana", &candidates));
  
    /* Example from PR 69968 where transposition helps.  */
    candidates.truncate (0);
--- 435,446 ----
    ASSERT_STREQ ("apple", find_closest_string ("app", &candidates));
    ASSERT_STREQ ("banana", find_closest_string ("banyan", &candidates));
    ASSERT_STREQ ("cherry", find_closest_string ("berry", &candidates));
!   ASSERT_EQ (nullptr, find_closest_string ("not like the others", &candidates));
  
    /* If the goal string somehow makes it into the candidate list, offering
       it as a suggestion will be nonsensical.  Verify that we don't offer such
       suggestions.  */
!   ASSERT_EQ (nullptr, find_closest_string ("banana", &candidates));
  
    /* Example from PR 69968 where transposition helps.  */
    candidates.truncate (0);
diff -Nrcpad gcc-16-20250713/gcc/spellcheck.h gcc-16-20250720/gcc/spellcheck.h
*** gcc-16-20250713/gcc/spellcheck.h	Sun Jul 13 22:32:27 2025
--- gcc-16-20250720/gcc/spellcheck.h	Sun Jul 20 22:32:10 2025
*************** find_closest_string (const char *target,
*** 39,51 ****
     class best_match.
     Specializations should provide the implementations of the following:
  
!      static size_t get_length (TYPE);
!      static const char *get_string (TYPE);
  
     get_string should return a non-NULL ptr, which does not need to be
     0-terminated.  */
  
! template <typename TYPE>
  struct edit_distance_traits {};
  
  /* Specialization of edit_distance_traits for C-style strings.  */
--- 39,51 ----
     class best_match.
     Specializations should provide the implementations of the following:
  
!      static size_t get_length (StringlikeType);
!      static const char *get_string (StringlikeType);
  
     get_string should return a non-NULL ptr, which does not need to be
     0-terminated.  */
  
! template <typename StringlikeType>
  struct edit_distance_traits {};
  
  /* Specialization of edit_distance_traits for C-style strings.  */
*************** extern edit_distance_t get_edit_distance
*** 74,96 ****
     string-like types (const char *, frontend identifiers, and preprocessor
     macros).
  
!    This type accumulates the best possible match against GOAL_TYPE for
!    a sequence of elements of CANDIDATE_TYPE, whilst minimizing the
     number of calls to get_edit_distance and to
     edit_distance_traits<T>::get_length.  */
  
! template <typename GOAL_TYPE, typename CANDIDATE_TYPE>
  class best_match
  {
   public:
!   typedef GOAL_TYPE goal_t;
!   typedef CANDIDATE_TYPE candidate_t;
    typedef edit_distance_traits<goal_t> goal_traits;
    typedef edit_distance_traits<candidate_t> candidate_traits;
  
    /* Constructor.  */
  
!   best_match (GOAL_TYPE goal,
  	      edit_distance_t best_distance_so_far = MAX_EDIT_DISTANCE)
    : m_goal (goal_traits::get_string (goal)),
      m_goal_len (goal_traits::get_length (goal)),
--- 74,96 ----
     string-like types (const char *, frontend identifiers, and preprocessor
     macros).
  
!    This type accumulates the best possible match against GoalType for
!    a sequence of elements of CandidateType, whilst minimizing the
     number of calls to get_edit_distance and to
     edit_distance_traits<T>::get_length.  */
  
! template <typename GoalType, typename CandidateType>
  class best_match
  {
   public:
!   typedef GoalType goal_t;
!   typedef CandidateType candidate_t;
    typedef edit_distance_traits<goal_t> goal_traits;
    typedef edit_distance_traits<candidate_t> candidate_traits;
  
    /* Constructor.  */
  
!   best_match (goal_t goal,
  	      edit_distance_t best_distance_so_far = MAX_EDIT_DISTANCE)
    : m_goal (goal_traits::get_string (goal)),
      m_goal_len (goal_traits::get_length (goal)),
*************** class best_match
*** 163,169 ****
       m_best_candidate, update (without recomputing the edit distance to
       the goal).  */
  
!   void set_best_so_far (CANDIDATE_TYPE best_candidate,
  			edit_distance_t best_distance,
  			size_t best_candidate_len)
    {
--- 163,169 ----
       m_best_candidate, update (without recomputing the edit distance to
       the goal).  */
  
!   void set_best_so_far (candidate_t best_candidate,
  			edit_distance_t best_distance,
  			size_t best_candidate_len)
    {
diff -Nrcpad gcc-16-20250713/gcc/testsuite/ChangeLog gcc-16-20250720/gcc/testsuite/ChangeLog
*** gcc-16-20250713/gcc/testsuite/ChangeLog	Sun Jul 13 22:32:27 2025
--- gcc-16-20250720/gcc/testsuite/ChangeLog	Sun Jul 20 22:32:10 2025
***************
*** 1,3 ****
--- 1,758 ----
+ 2025-07-19  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	PR target/121124
+ 	* gcc.target/pru/pragma-ctable_entry-2.c: New test.
+ 
+ 2025-07-19  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	PR target/119100
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfwnmacc and
+ 	vfwnmsac.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f32.c: New test.
+ 
+ 2025-07-18  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121145
+ 	* gfortran.dg/pointer_check_15.f90: New test.
+ 
+ 2025-07-18  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR testsuite/121153
+ 	* gcc.dg/vect/vect-reduc-cond-1.c: Require vect_condition.
+ 	* gcc.dg/vect/vect-reduc-cond-2.c: Likewise.
+ 
+ 2025-07-18  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/avg_data.h: Adjust the test data.
+ 	* gcc.target/riscv/rvv/autovec/avg_ceil-1-i64-from-i128.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i64-from-i128.c: New test.
+ 
+ 2025-07-18  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/117423
+ 	* gcc.dg/tree-ssa/pr117423.c: New test.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121126
+ 	* gcc.dg/vect/pr121126.c: New testcase.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120924
+ 	* gcc.dg/uninit-pr120924.c: New testcase.
+ 
+ 2025-07-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121131
+ 	* gcc.dg/bitint-124.c: New test.
+ 
+ 2025-07-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/87097
+ 	* g++.dg/cpp0x/constexpr-array29.C: New test.
+ 
+ 2025-07-17  Richard Sandiford  <richard.sandiford@arm.com>
+ 	    Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	* lib/target-supports.exp (add_options_for_aarch64_sme)
+ 	(check_effective_target_aarch64_sme_hw): New procedures.
+ 	* g++.target/aarch64/sme/sme_throw_1.C: New test.
+ 	* g++.target/aarch64/sme/sme_throw_2.C: Likewise.
+ 
+ 2025-07-17  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c: Adapt
+ 	scan assembler directives.
+ 	* gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c: Ditto.
+ 	* gcc.target/s390/signbit-1.c: New test.
+ 	* gcc.target/s390/signbit-2.c: New test.
+ 	* gcc.target/s390/signbit-3.c: New test.
+ 	* gcc.target/s390/signbit-4.c: New test.
+ 	* gcc.target/s390/signbit-5.c: New test.
+ 	* gcc.target/s390/signbit.h: New test.
+ 
+ 2025-07-17  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* gcc.target/s390/vector/vlgv-zero-extend-1.c: New test.
+ 
+ 2025-07-17  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/121064
+ 	* gcc.target/loongarch/pr121064.c: New test.
+ 
+ 2025-07-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gcc.dg/vect/bb-slp-39.c: Adjust.
+ 
+ 2025-07-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121035
+ 	* gcc.dg/pr121035.c: New testcase.
+ 
+ 2025-07-16  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/121062
+ 	* gcc.target/i386/pr121062-1.c: New test.
+ 	* gcc.target/i386/pr121062-2.c: Likewise.
+ 	* gcc.target/i386/pr121062-3a.c: Likewise.
+ 	* gcc.target/i386/pr121062-3b.c: Likewise.
+ 	* gcc.target/i386/pr121062-3c.c: Likewise.
+ 	* gcc.target/i386/pr121062-4.c: Likewise.
+ 	* gcc.target/i386/pr121062-5.c: Likewise.
+ 	* gcc.target/i386/pr121062-6.c: Likewise.
+ 	* gcc.target/i386/pr121062-7.c: Likewise.
+ 
+ 2025-07-16  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120881
+ 	PR testsuite/121078
+ 	* gcc.dg/20021014-1.c (dg-additional-options): Add -mfentry
+ 	-fno-pic only on gnu/x86 targets.
+ 	* gcc.dg/aru-2.c (dg-additional-options): Likewise.
+ 	* gcc.dg/nest.c (dg-additional-options): Likewise.
+ 	* gcc.dg/pr32450.c (dg-additional-options): Likewise.
+ 	* gcc.dg/pr43643.c (dg-additional-options): Likewise.
+ 	* gcc.target/i386/pr104447.c (dg-additional-options): Likewise.
+ 	* gcc.target/i386/pr113122-3.c(dg-additional-options): Likewise.
+ 	* gcc.target/i386/pr119386-1.c (dg-additional-options): Add
+ 	-mfentry only on gnu targets.
+ 	* gcc.target/i386/pr119386-2.c (dg-additional-options): Likewise.
+ 
+ 2025-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121049
+ 	* gcc.dg/vect/pr121049.c: New testcase.
+ 
+ 2025-07-16  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/119920
+ 	PR tree-optimization/112324
+ 	PR tree-optimization/110015
+ 	* gcc.dg/vect/vect-reduc-cond-1.c: New test.
+ 	* gcc.dg/vect/vect-reduc-cond-2.c: New test.
+ 	* gcc.dg/vect/vect-reduc-cond-3.c: New test.
+ 
+ 2025-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121116
+ 	* gcc.dg/torture/pr121116.c: New testcase.
+ 
+ 2025-07-16  Spencer Abson  <spencer.abson@arm.com>
+ 
+ 	PR target/117850
+ 	* gcc.target/aarch64/simd/vabal_combine.c: Removed.  This is
+ 	covered by fold_to_highpart_1.c
+ 	* gcc.target/aarch64/simd/fold_to_highpart_1.c: New test.
+ 	* gcc.target/aarch64/simd/fold_to_highpart_2.c: Likewise.
+ 	* gcc.target/aarch64/simd/fold_to_highpart_3.c: Likewise.
+ 	* gcc.target/aarch64/simd/fold_to_highpart_4.c: Likewise.
+ 	* gcc.target/aarch64/simd/fold_to_highpart_5.c: Likewise.
+ 	* gcc.target/aarch64/simd/fold_to_highpart_6.c: Likewise.
+ 
+ 2025-07-16  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* g++.dg/warn/Wformat-gcc_diag-1.C: Add string_slice "%B" format tests.
+ 
+ 2025-07-16  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR middle-end/121065
+ 	* gcc.target/arm/pr121065.c: New test.
+ 
+ 2025-07-16  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR target/120297
+ 	* gcc.target/riscv/rvv/pr120297.c: New test.
+ 
+ 2025-07-16  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* gcc.target/aarch64/sve2/eon_bsl2n.c: New test.
+ 
+ 2025-07-16  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* gcc.target/aarch64/sve2/nbsl_nor_nand_neon.c: New test.
+ 
+ 2025-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/121060
+ 	* gfortran.dg/associate_75.f90: New test.
+ 
+ 2025-07-16  Steve Kargl  <sgk@troutmask.apl.washington.edu>
+ 
+ 	* gfortran.dg/import13.f90: New test.
+ 
+ 2025-07-16  Jeremy Rifkin  <jeremy@rifkin.dev>
+ 
+ 	PR c/82134
+ 	* c-c++-common/attr-warn-unused-result-2.c: New test.
+ 
+ 2025-07-16  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* gcc.target/i386/amxavx512-cvtrowd2ps-2.c: Add -mavx512fp16 to
+ 	use FP16 related intrins for convert.
+ 	* gcc.target/i386/amxavx512-cvtrowps2bf16-2.c: Ditto.
+ 	* gcc.target/i386/amxavx512-cvtrowps2ph-2.c: Ditto.
+ 	* gcc.target/i386/amxavx512-movrow-2.c: Ditto.
+ 
+ 2025-07-16  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_s_add-1-i16.c: Remove function-body
+ 	check and add no jmp label asm check.
+ 	* gcc.target/riscv/sat/sat_s_add-1-i32.c:
+ 	* gcc.target/riscv/sat/sat_s_add-1-i64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-1-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-2-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-2-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-2-i64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-2-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-3-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-3-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-3-i64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-3-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-4-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-4-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-4-i64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add-4-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-1-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-1-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-1-i64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-1-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-2-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-2-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-2-i64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_add_imm-2-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-1-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-1-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-1-i64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-1-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-2-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-2-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-2-i64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-2-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-3-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-3-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-3-i64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-3-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-4-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-4-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-4-i64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_sub-4-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-1-i16-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-2-i16-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-3-i16-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-4-i16-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-5-i16-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-6-i16-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-7-i16-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-8-i16-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-1-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-1-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-1-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-1-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-2-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-2-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-2-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-2-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-3-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-3-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-3-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-3-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-4-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-4-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-4-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-4-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-5-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-5-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-5-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-5-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-6-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-6-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-6-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-6-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-1-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-1-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-1-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-1-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-2-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-2-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-2-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-2-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-3-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-3-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-3-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-3-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-4-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-4-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-4-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_add_imm-4-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_mul-1-u16-from-u128.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_mul-1-u32-from-u128.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_mul-1-u64-from-u128.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_mul-1-u8-from-u128.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-1-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-1-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-1-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-1-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-10-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-10-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-10-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-10-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-11-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-11-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-11-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-11-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-12-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-12-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-12-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-12-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-2-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-2-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-2-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-2-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-3-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-3-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-3-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-3-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-4-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-4-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-4-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-4-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-5-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-5-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-5-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-5-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-6-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-6-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-6-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-6-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-7-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-7-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-7-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-7-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-8-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-8-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-8-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-8-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-9-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-9-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-9-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub-9-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u16-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u16-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u16-3.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u16-4.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u32-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u32-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u32-3.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u32-4.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u64-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u64-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u8-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u8-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u8-3.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u8-4.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-1-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u16-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u16-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u16-3.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u32-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u32-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u32-3.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u64-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u8-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u8-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u8-3.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-2-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-3-u16-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-3-u16-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-3-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-3-u32-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-3-u32-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-3-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-3-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-3-u8-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-3-u8-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-3-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-4-u16-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-4-u16-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-4-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-4-u32-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-4-u32-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-4-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-4-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-4-u8-1.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-4-u8-2.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_sub_imm-4-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-1-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-1-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-1-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-1-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-2-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-2-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-2-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-2-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-3-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-3-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-3-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-3-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-4-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-4-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-4-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-4-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-5-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-5-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-5-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-5-u8.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-6-u16.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-6-u32.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-6-u64.c: Ditto.
+ 	* gcc.target/riscv/sat/sat_u_trunc-6-u8.c: Ditto.
+ 
+ 2025-07-16  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/avg.h: Add int128 type when
+ 	xlen == 64.
+ 	* gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i32.c:
+ 	Suppress __int128 warning for run test.
+ 	* gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i32-from-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/avg_data.h: Fix one incorrect
+ 	test data.
+ 	* gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/avg_floor-1-i64-from-i128.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/avg_floor-run-1-i64-from-i128.c: New test.
+ 
+ 2025-07-15  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR sarif-replay/120792
+ 	* libgdiagnostics.dg/sarif.py: Delete duplicate script.
+ 	* libgdiagnostics.dg/test-message-buffer-c.py: New test script.
+ 	* libgdiagnostics.dg/test-message-buffer.c: New test.
+ 	* libgdiagnostics.dg/test-warning-with-path-c.py: Update expected
+ 	output to reflect that SARIF for event messages now contains JSON
+ 	pointers when referring to other events by ID.
+ 	* sarif-replay.dg/2.1.0-valid/3.11.6-embedded-links.sarif: Add
+ 	HTML and SARIF output, and call out to Python scripts to verify
+ 	the output.  Add example of a result with a link in its message.
+ 	* sarif-replay.dg/2.1.0-valid/embedded-links-check-html.py: New
+ 	test script.
+ 	* sarif-replay.dg/2.1.0-valid/embedded-links-check-sarif-roundtrip.py:
+ 	New test script.
+ 
+ 2025-07-15  Umesh Kalappa  <ukalappa.mips@gmail.com>
+ 
+ 	* gcc.target/riscv/mipscondmov.c: Test file for mips.ccmov insn.
+ 
+ 2025-07-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120577
+ 	* g++.dg/cpp2a/constexpr-union9.C: New test.
+ 
+ 2025-07-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/117784
+ 	* g++.dg/cpp26/decomp25.C: Add -fno-implicit-constexpr.
+ 
+ 2025-07-15  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 
+ 	PR fortran/104428
+ 	* gfortran.dg/gomp/pr104428.f90: New.
+ 
+ 2025-07-15  Konstantinos Eleftheriou  <konstantinos.eleftheriou@vrull.eu>
+ 
+ 	* gcc.target/aarch64/avoid-store-forwarding-be.c: New test.
+ 
+ 2025-07-15  Soumya AR  <soumyaa@nvidia.com>
+ 
+ 	* gcc.target/aarch64/ldapr-sext.c: Update expected output to include
+ 	offsets.
+ 	* gcc.target/aarch64/ldapur.c: New test for LDAPUR.
+ 	* gcc.target/aarch64/ldapur_avoid.c: New test for AVOID_LDAPUR flag.
+ 
+ 2025-07-15  Richard Biener  <rguenther@suse.de>
+ 	    Richard Sandiford   <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/121059
+ 	* gcc.dg/vect/pr121059.c: New testcase.
+ 
+ 2025-07-15  Jakub Jelinek  <jakub@redhat.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c/44677
+ 	* c-c++-common/Wunused-parm-1.c: New test.
+ 	* c-c++-common/Wunused-parm-2.c: New test.
+ 	* c-c++-common/Wunused-parm-3.c: New test.
+ 	* c-c++-common/Wunused-parm-4.c: New test.
+ 	* c-c++-common/Wunused-parm-5.c: New test.
+ 	* c-c++-common/Wunused-parm-6.c: New test.
+ 	* c-c++-common/Wunused-var-7.c (bar, baz): Expect warning on a.
+ 	* c-c++-common/Wunused-var-19.c: New test.
+ 	* c-c++-common/Wunused-var-20.c: New test.
+ 	* c-c++-common/Wunused-var-21.c: New test.
+ 	* c-c++-common/Wunused-var-22.c: New test.
+ 	* c-c++-common/Wunused-var-23.c: New test.
+ 	* c-c++-common/Wunused-var-24.c: New test.
+ 	* g++.dg/cpp26/name-independent-decl1.C (foo): Expect one
+ 	set but not used warning.
+ 	* g++.dg/warn/Wunused-parm-12.C: New test.
+ 	* g++.dg/warn/Wunused-parm-13.C: New test.
+ 	* g++.dg/warn/Wunused-var-2.C (f2): Expect set but not used warning
+ 	on parameter x and variable a.
+ 	* g++.dg/warn/Wunused-var-40.C: New test.
+ 	* g++.dg/warn/Wunused-var-41.C: New test.
+ 	* gcc.dg/memchr-3.c (test_find): Change return type from void to int,
+ 	and add return n; statement.
+ 	* gcc.dg/unused-9.c (g): Move dg-bogus to the correct line and expect
+ 	a warning on i.
+ 
+ 2025-07-15  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Revert:
+ 	2025-07-15  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* gcc.target/aarch64/simd/eor3_d.c: Add tests for DImode operands.
+ 
+ 2025-07-15  Spencer Abson  <spencer.abson@arm.com>
+ 
+ 	* gcc.target/aarch64/sve/unpacked_fcm_combines_1.c: New test.
+ 	* gcc.target/aarch64/sve/unpacked_fcm_combines_2.c: Likewise.
+ 
+ 2025-07-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	Revert:
+ 	2025-07-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121059
+ 	* gcc.dg/vect/pr121059.c: New testcase.
+ 
+ 2025-07-14  Juergen Christ  <jchrist@linux.ibm.com>
+ 
+ 	* lib/target-supports.exp: Add s390 to vect_logical_reduc targets.
+ 	* gcc.target/s390/vector/reduc-binops-1.c: New test.
+ 	* gcc.target/s390/vector/reduc-minmax-1.c: New test.
+ 	* gcc.target/s390/vector/reduc-plus-1.c: New test.
+ 
+ 2025-07-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121059
+ 	* gcc.dg/vect/pr121059.c: New testcase.
+ 
+ 2025-07-14  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_u_mul-1-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-1-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-1-u8-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-1-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-1-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-1-u8-from-u64.c: New test.
+ 
+ 2025-07-14  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/121015
+ 	* gcc.target/i386/pr121015.c: New test.
+ 
+ 2025-07-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120881
+ 	* gcc.dg/20021014-1.c: Add additional -mfentry -fno-pic options
+ 	for x86.
+ 	* gcc.dg/aru-2.c: Likewise.
+ 	* gcc.dg/nest.c: Likewise.
+ 	* gcc.dg/pr32450.c: Likewise.
+ 	* gcc.dg/pr43643.c: Likewise.
+ 	* gcc.target/i386/pr104447.c: Likewise.
+ 	* gcc.target/i386/pr113122-3.c: Likewise.
+ 	* gcc.target/i386/pr119386-1.c: Add additional -mfentry if not
+ 	ia32.
+ 	* gcc.target/i386/pr119386-2.c: Likewise.
+ 	* gcc.target/i386/pr120881-1a.c: New test.
+ 	* gcc.target/i386/pr120881-1b.c: Likewise.
+ 	* gcc.target/i386/pr120881-1c.c: Likewise.
+ 	* gcc.target/i386/pr120881-1d.c: Likewise.
+ 	* gcc.target/i386/pr120881-2a.c: Likewise.
+ 	* gcc.target/i386/pr120881-2b.c: Likewise.
+ 	* gcc.target/i386/pr82699-1.c: Add additional -mfentry.
+ 	* lib/target-supports.exp (check_effective_target_fentry): New.
+ 
+ 2025-07-14  François-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+ 
+ 	* gcc.dg/darwin-minversion-link.c: Account for macOS 26.
+ 
+ 2025-07-14  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	PR target/119100
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfwmacc and
+ 	vfwmsac.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise. Also check
+ 	for fcvt and vfmv.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Add vfwmacc and
+ 	vfwmsac.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise. Also check
+ 	for fcvt and vfmv.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h: Add support for
+ 	widening variants.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_widen_run.h: New test
+ 	helper.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f32.c: New test.
+ 
+ 2025-07-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/deref4.adb: New test.
+ 	* gnat.dg/deref4_pkg.ads: New helper.
+ 
+ 2025-07-14  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c: New test.
+ 
+ 2025-07-14  panciyan  <panciyan@eswincomputing.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h: Unsigned vector SAT_SUB form11 form12.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c: Use ussub instead of usub.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u8.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u8.c: New test.
+ 
  2025-07-12  Xi Ruoyao  <xry111@xry111.site>
  
  	PR rtl-optimization/87600
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-1.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-1.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-1.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,50 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused-but-set-parameter" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (int a,		/* { dg-warning "parameter 'a' set but not used" } */
+      int b,		/* { dg-warning "parameter 'b' set but not used" } */
+      int c,		/* { dg-warning "parameter 'c' set but not used" } */
+      int d,		/* { dg-warning "parameter 'd' set but not used" } */
+      int e,		/* { dg-warning "parameter 'e' set but not used" } */
+      int f,		/* { dg-warning "parameter 'f' set but not used" } */
+      int g,		/* { dg-warning "parameter 'g' set but not used" } */
+      int h,		/* { dg-warning "parameter 'h' set but not used" } */
+      int i,		/* { dg-warning "parameter 'i' set but not used" } */
+      int j,		/* { dg-warning "parameter 'j' set but not used" } */
+      int k,		/* { dg-warning "parameter 'k' set but not used" } */
+      int l,		/* { dg-warning "parameter 'l' set but not used" } */
+      int m)		/* { dg-warning "parameter 'm' set but not used" } */
+ {
+   a = 1;
+   ++b;
+   c++;
+   --d;
+   e--;
+   f += 2;
+   g |= 2;
+   h -= 2;
+   i &= 2;
+   j ^= 2;
+   k *= 2;
+   l %= 2;
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+      int k, int l, int m, int n)
+ {
+   b = ++a;
+   d = --c;
+   f = e--;
+   h = g++;
+   j = i += 42;
+   l = k *= 4;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-2.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-2.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-2.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,50 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused -Wextra" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (int a,		/* { dg-warning "parameter 'a' set but not used" } */
+      int b,		/* { dg-warning "parameter 'b' set but not used" } */
+      int c,		/* { dg-warning "parameter 'c' set but not used" } */
+      int d,		/* { dg-warning "parameter 'd' set but not used" } */
+      int e,		/* { dg-warning "parameter 'e' set but not used" } */
+      int f,		/* { dg-warning "parameter 'f' set but not used" } */
+      int g,		/* { dg-warning "parameter 'g' set but not used" } */
+      int h,		/* { dg-warning "parameter 'h' set but not used" } */
+      int i,		/* { dg-warning "parameter 'i' set but not used" } */
+      int j,		/* { dg-warning "parameter 'j' set but not used" } */
+      int k,		/* { dg-warning "parameter 'k' set but not used" } */
+      int l,		/* { dg-warning "parameter 'l' set but not used" } */
+      int m)		/* { dg-warning "parameter 'm' set but not used" } */
+ {
+   a = 1;
+   ++b;
+   c++;
+   --d;
+   e--;
+   f += 2;
+   g |= 2;
+   h -= 2;
+   i &= 2;
+   j ^= 2;
+   k *= 2;
+   l %= 2;
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+      int k, int l, int m, int n)
+ {
+   b = ++a;
+   d = --c;
+   f = e--;
+   h = g++;
+   j = i += 42;
+   l = k *= 4;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-3.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-3.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-3.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,50 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused-but-set-parameter=3" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (int a,		/* { dg-warning "parameter 'a' set but not used" } */
+      int b,		/* { dg-warning "parameter 'b' set but not used" } */
+      int c,		/* { dg-warning "parameter 'c' set but not used" } */
+      int d,		/* { dg-warning "parameter 'd' set but not used" } */
+      int e,		/* { dg-warning "parameter 'e' set but not used" } */
+      int f,		/* { dg-warning "parameter 'f' set but not used" } */
+      int g,		/* { dg-warning "parameter 'g' set but not used" } */
+      int h,		/* { dg-warning "parameter 'h' set but not used" } */
+      int i,		/* { dg-warning "parameter 'i' set but not used" } */
+      int j,		/* { dg-warning "parameter 'j' set but not used" } */
+      int k,		/* { dg-warning "parameter 'k' set but not used" } */
+      int l,		/* { dg-warning "parameter 'l' set but not used" } */
+      int m)		/* { dg-warning "parameter 'm' set but not used" } */
+ {
+   a = 1;
+   ++b;
+   c++;
+   --d;
+   e--;
+   f += 2;
+   g |= 2;
+   h -= 2;
+   i &= 2;
+   j ^= 2;
+   k *= 2;
+   l %= 2;
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+      int k, int l, int m, int n)
+ {
+   b = ++a;
+   d = --c;
+   f = e--;
+   h = g++;
+   j = i += 42;
+   l = k *= 4;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-4.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-4.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-4.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,50 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused-but-set-parameter=2" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (int a,		/* { dg-warning "parameter 'a' set but not used" } */
+      int b,		/* { dg-warning "parameter 'b' set but not used" } */
+      int c,		/* { dg-warning "parameter 'c' set but not used" } */
+      int d,		/* { dg-warning "parameter 'd' set but not used" } */
+      int e,		/* { dg-warning "parameter 'e' set but not used" } */
+      int f,
+      int g,
+      int h,
+      int i,
+      int j,
+      int k,
+      int l,
+      int m)		/* { dg-warning "parameter 'm' set but not used" } */
+ {
+   a = 1;
+   ++b;
+   c++;
+   --d;
+   e--;
+   f += 2;
+   g |= 2;
+   h -= 2;
+   i &= 2;
+   j ^= 2;
+   k *= 2;
+   l %= 2;
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+      int k, int l, int m, int n)
+ {
+   b = ++a;
+   d = --c;
+   f = e--;
+   h = g++;
+   j = i += 42;
+   l = k *= 4;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-5.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-5.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-5.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,50 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused-but-set-parameter=1" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (int a,		/* { dg-warning "parameter 'a' set but not used" } */
+      int b,
+      int c,
+      int d,
+      int e,
+      int f,
+      int g,
+      int h,
+      int i,
+      int j,
+      int k,
+      int l,
+      int m)
+ {
+   a = 1;
+   ++b;
+   c++;
+   --d;
+   e--;
+   f += 2;
+   g |= 2;
+   h -= 2;
+   i &= 2;
+   j ^= 2;
+   k *= 2;
+   l %= 2;
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+      int k, int l, int m, int n)
+ {
+   b = ++a;
+   d = --c;
+   f = e--;
+   h = g++;
+   j = i += 42;
+   l = k *= 4;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-6.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-6.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-parm-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-parm-6.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,50 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused-but-set-parameter=0" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (int a,
+      int b,
+      int c,
+      int d,
+      int e,
+      int f,
+      int g,
+      int h,
+      int i,
+      int j,
+      int k,
+      int l,
+      int m)
+ {
+   a = 1;
+   ++b;
+   c++;
+   --d;
+   e--;
+   f += 2;
+   g |= 2;
+   h -= 2;
+   i &= 2;
+   j ^= 2;
+   k *= 2;
+   l %= 2;
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+      int k, int l, int m, int n)
+ {
+   b = ++a;
+   d = --c;
+   f = e--;
+   h = g++;
+   j = i += 42;
+   l = k *= 4;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-19.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-19.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-19.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-19.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,60 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused-but-set-variable" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (void)
+ {
+   int a = 0;		/* { dg-warning "variable 'a' set but not used" } */
+   a = 1;
+   int b = 0;		/* { dg-warning "variable 'b' set but not used" } */
+   ++b;
+   int c = 0;		/* { dg-warning "variable 'c' set but not used" } */
+   c++;
+   int d = 0;		/* { dg-warning "variable 'd' set but not used" } */
+   --d;
+   int e = 0;		/* { dg-warning "variable 'e' set but not used" } */
+   e--;
+   int f = 0;		/* { dg-warning "variable 'f' set but not used" } */
+   f += 2;
+   int g = 0;		/* { dg-warning "variable 'g' set but not used" } */
+   g |= 2;
+   int h = 0;		/* { dg-warning "variable 'h' set but not used" } */
+   h -= 2;
+   int i = 0;		/* { dg-warning "variable 'i' set but not used" } */
+   i &= 2;
+   int j = 0;		/* { dg-warning "variable 'j' set but not used" } */
+   j ^= 2;
+   int k = 0;		/* { dg-warning "variable 'k' set but not used" } */
+   k *= 2;
+   int l = 0;		/* { dg-warning "variable 'l' set but not used" } */
+   l %= 2;
+   int m = 0;		/* { dg-warning "variable 'm' set but not used" } */
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (void)
+ {
+   int a = 0;
+   int b = ++a;
+   int c = 0;
+   int d = --c;
+   int e = 0;
+   int f = e--;
+   int g = 0;
+   int h = g++;
+   int i = 0;
+   int j;
+   j = i += 42;
+   int k = 0;
+   int l;
+   l = k *= 4;
+   int m = 0;
+   int n;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-20.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-20.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-20.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-20.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,60 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (void)
+ {
+   int a = 0;		/* { dg-warning "variable 'a' set but not used" } */
+   a = 1;
+   int b = 0;		/* { dg-warning "variable 'b' set but not used" } */
+   ++b;
+   int c = 0;		/* { dg-warning "variable 'c' set but not used" } */
+   c++;
+   int d = 0;		/* { dg-warning "variable 'd' set but not used" } */
+   --d;
+   int e = 0;		/* { dg-warning "variable 'e' set but not used" } */
+   e--;
+   int f = 0;		/* { dg-warning "variable 'f' set but not used" } */
+   f += 2;
+   int g = 0;		/* { dg-warning "variable 'g' set but not used" } */
+   g |= 2;
+   int h = 0;		/* { dg-warning "variable 'h' set but not used" } */
+   h -= 2;
+   int i = 0;		/* { dg-warning "variable 'i' set but not used" } */
+   i &= 2;
+   int j = 0;		/* { dg-warning "variable 'j' set but not used" } */
+   j ^= 2;
+   int k = 0;		/* { dg-warning "variable 'k' set but not used" } */
+   k *= 2;
+   int l = 0;		/* { dg-warning "variable 'l' set but not used" } */
+   l %= 2;
+   int m = 0;		/* { dg-warning "variable 'm' set but not used" } */
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (void)
+ {
+   int a = 0;
+   int b = ++a;
+   int c = 0;
+   int d = --c;
+   int e = 0;
+   int f = e--;
+   int g = 0;
+   int h = g++;
+   int i = 0;
+   int j;
+   j = i += 42;
+   int k = 0;
+   int l;
+   l = k *= 4;
+   int m = 0;
+   int n;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-21.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-21.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-21.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-21.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,60 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused-but-set-variable=3" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (void)
+ {
+   int a = 0;		/* { dg-warning "variable 'a' set but not used" } */
+   a = 1;
+   int b = 0;		/* { dg-warning "variable 'b' set but not used" } */
+   ++b;
+   int c = 0;		/* { dg-warning "variable 'c' set but not used" } */
+   c++;
+   int d = 0;		/* { dg-warning "variable 'd' set but not used" } */
+   --d;
+   int e = 0;		/* { dg-warning "variable 'e' set but not used" } */
+   e--;
+   int f = 0;		/* { dg-warning "variable 'f' set but not used" } */
+   f += 2;
+   int g = 0;		/* { dg-warning "variable 'g' set but not used" } */
+   g |= 2;
+   int h = 0;		/* { dg-warning "variable 'h' set but not used" } */
+   h -= 2;
+   int i = 0;		/* { dg-warning "variable 'i' set but not used" } */
+   i &= 2;
+   int j = 0;		/* { dg-warning "variable 'j' set but not used" } */
+   j ^= 2;
+   int k = 0;		/* { dg-warning "variable 'k' set but not used" } */
+   k *= 2;
+   int l = 0;		/* { dg-warning "variable 'l' set but not used" } */
+   l %= 2;
+   int m = 0;		/* { dg-warning "variable 'm' set but not used" } */
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (void)
+ {
+   int a = 0;
+   int b = ++a;
+   int c = 0;
+   int d = --c;
+   int e = 0;
+   int f = e--;
+   int g = 0;
+   int h = g++;
+   int i = 0;
+   int j;
+   j = i += 42;
+   int k = 0;
+   int l;
+   l = k *= 4;
+   int m = 0;
+   int n;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-22.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-22.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-22.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-22.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,60 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused-but-set-variable=2" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (void)
+ {
+   int a = 0;		/* { dg-warning "variable 'a' set but not used" } */
+   a = 1;
+   int b = 0;		/* { dg-warning "variable 'b' set but not used" } */
+   ++b;
+   int c = 0;		/* { dg-warning "variable 'c' set but not used" } */
+   c++;
+   int d = 0;		/* { dg-warning "variable 'd' set but not used" } */
+   --d;
+   int e = 0;		/* { dg-warning "variable 'e' set but not used" } */
+   e--;
+   int f = 0;
+   f += 2;
+   int g = 0;
+   g |= 2;
+   int h = 0;
+   h -= 2;
+   int i = 0;
+   i &= 2;
+   int j = 0;
+   j ^= 2;
+   int k = 0;
+   k *= 2;
+   int l = 0;
+   l %= 2;
+   int m = 0;		/* { dg-warning "variable 'm' set but not used" } */
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (void)
+ {
+   int a = 0;
+   int b = ++a;
+   int c = 0;
+   int d = --c;
+   int e = 0;
+   int f = e--;
+   int g = 0;
+   int h = g++;
+   int i = 0;
+   int j;
+   j = i += 42;
+   int k = 0;
+   int l;
+   l = k *= 4;
+   int m = 0;
+   int n;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-23.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-23.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-23.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-23.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,60 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused-but-set-variable=1" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (void)
+ {
+   int a = 0;		/* { dg-warning "variable 'a' set but not used" } */
+   a = 1;
+   int b = 0;
+   ++b;
+   int c = 0;
+   c++;
+   int d = 0;
+   --d;
+   int e = 0;
+   e--;
+   int f = 0;
+   f += 2;
+   int g = 0;
+   g |= 2;
+   int h = 0;
+   h -= 2;
+   int i = 0;
+   i &= 2;
+   int j = 0;
+   j ^= 2;
+   int k = 0;
+   k *= 2;
+   int l = 0;
+   l %= 2;
+   int m = 0;
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (void)
+ {
+   int a = 0;
+   int b = ++a;
+   int c = 0;
+   int d = --c;
+   int e = 0;
+   int f = e--;
+   int g = 0;
+   int h = g++;
+   int i = 0;
+   int j;
+   j = i += 42;
+   int k = 0;
+   int l;
+   l = k *= 4;
+   int m = 0;
+   int n;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-24.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-24.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-24.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-24.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,60 ----
+ /* PR c/44677 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wunused-but-set-variable=0" } */
+ 
+ void baz (int);
+ 
+ void
+ foo (void)
+ {
+   int a = 0;
+   a = 1;
+   int b = 0;
+   ++b;
+   int c = 0;
+   c++;
+   int d = 0;
+   --d;
+   int e = 0;
+   e--;
+   int f = 0;
+   f += 2;
+   int g = 0;
+   g |= 2;
+   int h = 0;
+   h -= 2;
+   int i = 0;
+   i &= 2;
+   int j = 0;
+   j ^= 2;
+   int k = 0;
+   k *= 2;
+   int l = 0;
+   l %= 2;
+   int m = 0;
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ int
+ bar (void)
+ {
+   int a = 0;
+   int b = ++a;
+   int c = 0;
+   int d = --c;
+   int e = 0;
+   int f = e--;
+   int g = 0;
+   int h = g++;
+   int i = 0;
+   int j;
+   j = i += 42;
+   int k = 0;
+   int l;
+   l = k *= 4;
+   int m = 0;
+   int n;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-7.c gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-7.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/Wunused-var-7.c	Sun Jul 13 22:32:30 2025
--- gcc-16-20250720/gcc/testsuite/c-c++-common/Wunused-var-7.c	Sun Jul 20 22:32:11 2025
*************** foo (void)
*** 24,30 ****
  void
  bar (void)
  {
!   int a;
    int b;
    int c;		/* { dg-warning "set but not used" } */
    a = 1;
--- 24,30 ----
  void
  bar (void)
  {
!   int a;		/* { dg-warning "set but not used" } */
    int b;
    int c;		/* { dg-warning "set but not used" } */
    a = 1;
*************** bar (void)
*** 36,42 ****
  void
  baz (void)
  {
!   int a;
    int b;
    int c;
    int d;
--- 36,42 ----
  void
  baz (void)
  {
!   int a;		/* { dg-warning "set but not used" } */
    int b;
    int c;
    int d;
diff -Nrcpad gcc-16-20250713/gcc/testsuite/c-c++-common/attr-warn-unused-result-2.c gcc-16-20250720/gcc/testsuite/c-c++-common/attr-warn-unused-result-2.c
*** gcc-16-20250713/gcc/testsuite/c-c++-common/attr-warn-unused-result-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/c-c++-common/attr-warn-unused-result-2.c	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,16 ----
+ /* PR c/82134 */
+ /* { dg-do compile } */
+ /* { dg-additional-options -Wno-c++-compat { target c } } */
+ 
+ struct S {};
+ 
+ __attribute__((warn_unused_result)) struct S foo();
+ 
+ void use_s(struct S);
+ 
+ void
+ test (void)
+ {
+   struct S s = foo(); /* { dg-bogus "ignoring return value of" } */
+   use_s(foo()); /* { dg-bogus "ignoring return value of" } */
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C gcc-16-20250720/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C
*** gcc-16-20250713/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C	Sun Jul 20 22:32:11 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/87097
+ // { dg-do compile { target c++11 } }
+ 
+ struct A {
+   constexpr A() : data() {}
+   struct X { int n; };
+   X data[2];
+ };
+ 
+ static_assert((A(), true), "");
+ static_assert(A().data[0].n == 0, "");
+ static_assert(A().data[1].n == 0, "");
+ constexpr A x;
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.dg/cpp26/decomp25.C gcc-16-20250720/gcc/testsuite/g++.dg/cpp26/decomp25.C
*** gcc-16-20250713/gcc/testsuite/g++.dg/cpp26/decomp25.C	Sun Jul 13 22:32:33 2025
--- gcc-16-20250720/gcc/testsuite/g++.dg/cpp26/decomp25.C	Sun Jul 20 22:32:12 2025
***************
*** 1,6 ****
  // C++26 P2686R4 - constexpr structured bindings
  // { dg-do compile { target c++11 } }
! // { dg-options "" }
  
  namespace std {
    template <typename T> struct tuple_size;
--- 1,6 ----
  // C++26 P2686R4 - constexpr structured bindings
  // { dg-do compile { target c++11 } }
! // { dg-options "-fno-implicit-constexpr" }
  
  namespace std {
    template <typename T> struct tuple_size;
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.dg/cpp26/name-independent-decl1.C gcc-16-20250720/gcc/testsuite/g++.dg/cpp26/name-independent-decl1.C
*** gcc-16-20250713/gcc/testsuite/g++.dg/cpp26/name-independent-decl1.C	Sun Jul 13 22:32:33 2025
--- gcc-16-20250720/gcc/testsuite/g++.dg/cpp26/name-independent-decl1.C	Sun Jul 20 22:32:12 2025
*************** foo ()
*** 70,76 ****
        ++_;
      }
      {
!       static int _ = 3;
        ++_;
      }
      {
--- 70,76 ----
        ++_;
      }
      {
!       static int _ = 3;		// { dg-warning "variable '_' set but not used" }
        ++_;
      }
      {
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.dg/cpp2a/constexpr-union9.C gcc-16-20250720/gcc/testsuite/g++.dg/cpp2a/constexpr-union9.C
*** gcc-16-20250713/gcc/testsuite/g++.dg/cpp2a/constexpr-union9.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/g++.dg/cpp2a/constexpr-union9.C	Sun Jul 20 22:32:12 2025
***************
*** 0 ****
--- 1,33 ----
+ // PR c++/120577
+ // { dg-do compile { target c++20 } }
+ 
+ template <class _Tp> struct optional {
+   union {
+     _Tp __val_;
+   };
+   template <class... _Args>
+   constexpr optional(_Args... __args)
+       : __val_(__args...) {}
+ };
+ template <class _Tp, class... _Args>
+ constexpr optional<_Tp> make_optional(_Args... __args) {
+   return optional<_Tp>(__args...);
+ }
+ 
+ struct __non_trivial_if {
+   constexpr __non_trivial_if() {}
+ };
+ struct allocator : __non_trivial_if {};
+ struct __padding {};
+ struct __short {
+   [[__no_unique_address__]] __padding __padding_;
+   int __data_;
+ };
+ struct basic_string {
+   union {
+     __short __s;
+   };
+   [[__no_unique_address__]] allocator __alloc_;
+   constexpr basic_string(int, int) {}
+ };
+ auto opt = make_optional<basic_string>(4, 'X');
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wformat-gcc_diag-1.C gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wformat-gcc_diag-1.C
*** gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wformat-gcc_diag-1.C	Sun Jul 13 22:32:34 2025
--- gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wformat-gcc_diag-1.C	Sun Jul 20 22:32:13 2025
*************** typedef struct diagnostic_event_id_t dia
*** 29,34 ****
--- 29,36 ----
  namespace pp_markup { class element; }
  typedef pp_markup::element pp_element;
  
+ typedef class string_slice string_slice;
+ 
  #define FORMAT(kind) __attribute__ ((format (__gcc_## kind ##__, 1, 2)))
  
  void diag (const char*, ...) FORMAT (diag);
*************** void test_diag (tree t, gimple *gc, diag
*** 63,69 ****
    diag ("%e", 42); /* { dg-warning "format" } */
  }
  
! void test_cdiag (tree t, gimple *gc)
  {
    cdiag ("%<");   /* { dg-warning "unterminated quoting directive" } */
    cdiag ("%>");   /* { dg-warning "unmatched quoting directive " } */
--- 65,71 ----
    diag ("%e", 42); /* { dg-warning "format" } */
  }
  
! void test_cdiag (tree t, gimple *gc, string_slice *s)
  {
    cdiag ("%<");   /* { dg-warning "unterminated quoting directive" } */
    cdiag ("%>");   /* { dg-warning "unmatched quoting directive " } */
*************** void test_cdiag (tree t, gimple *gc)
*** 74,79 ****
--- 76,82 ----
    cdiag ("%F", t);       /* { dg-warning ".F. conversion used unquoted" } */
    cdiag ("%G", gc);      /* { dg-warning "format" } */
    cdiag ("%K", t);       /* { dg-warning "format" } */
+   cdiag ("%B", s);
  
    cdiag ("%R");       /* { dg-warning "unmatched color reset directive" } */
    cdiag ("%r", "");   /* { dg-warning "unterminated color directive" } */
*************** void test_cdiag (tree t, gimple *gc)
*** 90,95 ****
--- 93,99 ----
    cdiag ("%<%F%>", t);
    cdiag ("%<%G%>", gc);  /* { dg-warning "format" } */
    cdiag ("%<%K%>", t);   /* { dg-warning "format" } */
+   cdiag ("%<%B%>", s);
  
    cdiag ("%<%R%>");      /* { dg-warning "unmatched color reset directive" } */
    cdiag ("%<%r%>", "");  /* { dg-warning "unterminated color directive" } */
*************** void test_cdiag (tree t, gimple *gc)
*** 101,109 ****
    cdiag ("%<%qD%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
    cdiag ("%<%qE%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
    cdiag ("%<%qT%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
  }
  
! void test_tdiag (tree t, gimple *gc)
  {
    tdiag ("%<");       /* { dg-warning "unterminated quoting directive" } */
    tdiag ("%>");       /* { dg-warning "unmatched quoting directive " } */
--- 105,114 ----
    cdiag ("%<%qD%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
    cdiag ("%<%qE%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
    cdiag ("%<%qT%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
+   cdiag ("%<%qB%>", s);  /* { dg-warning ".q. flag used within a quoted sequence" } */
  }
  
! void test_tdiag (tree t, gimple *gc, string_slice *s)
  {
    tdiag ("%<");       /* { dg-warning "unterminated quoting directive" } */
    tdiag ("%>");       /* { dg-warning "unmatched quoting directive " } */
*************** void test_tdiag (tree t, gimple *gc)
*** 113,118 ****
--- 118,124 ----
    tdiag ("%E", t);
    tdiag ("%G", gc);     /* { dg-warning "format" } */
    tdiag ("%K", t);      /* { dg-warning "format" } */
+   tdiag ("%B", s);
  
    tdiag ("%R");          /* { dg-warning "unmatched color reset directive" } */
    tdiag ("%r", "");   /* { dg-warning "unterminated color directive" } */
*************** void test_tdiag (tree t, gimple *gc)
*** 138,146 ****
    tdiag ("%<%qD%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
    tdiag ("%<%qE%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
    tdiag ("%<%qT%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
  }
  
! void test_cxxdiag (tree t, gimple *gc)
  {
    cxxdiag ("%A", t);     /* { dg-warning ".A. conversion used unquoted" } */
    cxxdiag ("%D", t);     /* { dg-warning ".D. conversion used unquoted" } */
--- 144,153 ----
    tdiag ("%<%qD%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
    tdiag ("%<%qE%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
    tdiag ("%<%qT%>", t);  /* { dg-warning ".q. flag used within a quoted sequence" } */
+   tdiag ("%<%qB%>", s);  /* { dg-warning ".q. flag used within a quoted sequence" } */
  }
  
! void test_cxxdiag (tree t, gimple *gc, string_slice *s)
  {
    cxxdiag ("%A", t);     /* { dg-warning ".A. conversion used unquoted" } */
    cxxdiag ("%D", t);     /* { dg-warning ".D. conversion used unquoted" } */
*************** void test_cxxdiag (tree t, gimple *gc)
*** 148,153 ****
--- 155,161 ----
    cxxdiag ("%F", t);     /* { dg-warning ".F. conversion used unquoted" } */
    cxxdiag ("%G", gc);    /* { dg-warning "format" } */
    cxxdiag ("%K", t);     /* { dg-warning "format" } */
+   cxxdiag ("%B", s);
  
    cxxdiag ("%R");        /* { dg-warning "unmatched color reset directive" } */
    cxxdiag ("%r", "");    /* { dg-warning "unterminated color directive" } */
*************** void test_cxxdiag (tree t, gimple *gc)
*** 172,180 ****
    cxxdiag ("%<%T%>", t);
    cxxdiag ("%<%V%>", t);
    cxxdiag ("%<%X%>", t);
  }
  
! void test_dump (tree t, gimple *stmt, cgraph_node *node)
  {
    dump ("%<");   /* { dg-warning "unterminated quoting directive" } */
    dump ("%>");   /* { dg-warning "unmatched quoting directive " } */
--- 180,189 ----
    cxxdiag ("%<%T%>", t);
    cxxdiag ("%<%V%>", t);
    cxxdiag ("%<%X%>", t);
+   cxxdiag ("%<%B%>", s);
  }
  
! void test_dump (tree t, gimple *stmt, cgraph_node *node, string_slice *s)
  {
    dump ("%<");   /* { dg-warning "unterminated quoting directive" } */
    dump ("%>");   /* { dg-warning "unmatched quoting directive " } */
*************** void test_dump (tree t, gimple *stmt, cg
*** 197,200 ****
--- 206,210 ----
    dump ("%C", node);
    dump ("%f", 1.0);
    dump ("%4.2f", 1.0); /* { dg-warning "format" } */
+   dump ("%B", s);
  }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wunused-parm-12.C gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wunused-parm-12.C
*** gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wunused-parm-12.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wunused-parm-12.C	Sun Jul 20 22:32:13 2025
***************
*** 0 ****
--- 1,59 ----
+ // PR c/44677
+ // { dg-do compile }
+ // { dg-options "-O2 -Wunused-but-set-parameter" }
+ 
+ void baz (int);
+ 
+ template <int N>
+ void
+ foo (int a,		// { dg-warning "parameter 'a' set but not used" }
+      int b,		// { dg-warning "parameter 'b' set but not used" }
+      int c,		// { dg-warning "parameter 'c' set but not used" }
+      int d,		// { dg-warning "parameter 'd' set but not used" }
+      int e,		// { dg-warning "parameter 'e' set but not used" }
+      int f,		// { dg-warning "parameter 'f' set but not used" }
+      int g,		// { dg-warning "parameter 'g' set but not used" }
+      int h,		// { dg-warning "parameter 'h' set but not used" }
+      int i,		// { dg-warning "parameter 'i' set but not used" }
+      int j,		// { dg-warning "parameter 'j' set but not used" }
+      int k,		// { dg-warning "parameter 'k' set but not used" }
+      int l,		// { dg-warning "parameter 'l' set but not used" }
+      int m)		// { dg-warning "parameter 'm' set but not used" }
+ {
+   a = 1;
+   ++b;
+   c++;
+   --d;
+   e--;
+   f += 2;
+   g |= 2;
+   h -= 2;
+   i &= 2;
+   j ^= 2;
+   k *= 2;
+   l %= 2;
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ template <int N>
+ int
+ bar (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+      int k, int l, int m, int n)
+ {
+   b = ++a;
+   d = --c;
+   f = e--;
+   h = g++;
+   j = i += 42;
+   l = k *= 4;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
+ 
+ void
+ test ()
+ {
+   foo <0> (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+   bar <0> (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wunused-parm-13.C gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wunused-parm-13.C
*** gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wunused-parm-13.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wunused-parm-13.C	Sun Jul 20 22:32:13 2025
***************
*** 0 ****
--- 1,59 ----
+ // PR c/44677
+ // { dg-do compile }
+ // { dg-options "-O2 -Wunused-but-set-parameter" }
+ 
+ void baz (int);
+ 
+ template <typename T>
+ void
+ foo (T a,		// { dg-warning "parameter 'a' set but not used" }
+      T b,		// { dg-warning "parameter 'b' set but not used" }
+      T c,		// { dg-warning "parameter 'c' set but not used" }
+      T d,		// { dg-warning "parameter 'd' set but not used" }
+      T e,		// { dg-warning "parameter 'e' set but not used" }
+      T f,		// { dg-warning "parameter 'f' set but not used" }
+      T g,		// { dg-warning "parameter 'g' set but not used" }
+      T h,		// { dg-warning "parameter 'h' set but not used" }
+      T i,		// { dg-warning "parameter 'i' set but not used" }
+      T j,		// { dg-warning "parameter 'j' set but not used" }
+      T k,		// { dg-warning "parameter 'k' set but not used" }
+      T l,		// { dg-warning "parameter 'l' set but not used" }
+      T m)		// { dg-warning "parameter 'm' set but not used" }
+ {
+   a = 1;
+   ++b;
+   c++;
+   --d;
+   e--;
+   f += 2;
+   g |= 2;
+   h -= 2;
+   i &= 2;
+   j ^= 2;
+   k *= 2;
+   l %= 2;
+   for (T n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ template <typename T>
+ T
+ bar (T a, T b, T c, T d, T e, T f, T g, T h, T i, T j,
+      T k, T l, T m, T n)
+ {
+   b = ++a;
+   d = --c;
+   f = e--;
+   h = g++;
+   j = i += 42;
+   l = k *= 4;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
+ 
+ void
+ test ()
+ {
+   foo <int> (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+   bar <int> (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wunused-var-2.C gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wunused-var-2.C
*** gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wunused-var-2.C	Sun Jul 13 22:32:34 2025
--- gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wunused-var-2.C	Sun Jul 20 22:32:13 2025
*************** f1 ()
*** 18,26 ****
  }
  
  void
! f2 (int x)
  {
!   int a = 0;
    x++;
    ++a;
  }
--- 18,26 ----
  }
  
  void
! f2 (int x)	// { dg-warning "parameter 'x' set but not used" }
  {
!   int a = 0;	// { dg-warning "variable 'a' set but not used" }
    x++;
    ++a;
  }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wunused-var-40.C gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wunused-var-40.C
*** gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wunused-var-40.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wunused-var-40.C	Sun Jul 20 22:32:13 2025
***************
*** 0 ****
--- 1,69 ----
+ // PR c/44677
+ // { dg-do compile }
+ // { dg-options "-O2 -Wunused-but-set-variable" }
+ 
+ void baz (int);
+ 
+ template <int N>
+ void
+ foo (void)
+ {
+   int a = 0;		// { dg-warning "variable 'a' set but not used" }
+   a = 1;
+   int b = 0;		// { dg-warning "variable 'b' set but not used" }
+   ++b;
+   int c = 0;		// { dg-warning "variable 'c' set but not used" }
+   c++;
+   int d = 0;		// { dg-warning "variable 'd' set but not used" }
+   --d;
+   int e = 0;		// { dg-warning "variable 'e' set but not used" }
+   e--;
+   int f = 0;		// { dg-warning "variable 'f' set but not used" }
+   f += 2;
+   int g = 0;		// { dg-warning "variable 'g' set but not used" }
+   g |= 2;
+   int h = 0;		// { dg-warning "variable 'h' set but not used" }
+   h -= 2;
+   int i = 0;		// { dg-warning "variable 'i' set but not used" }
+   i &= 2;
+   int j = 0;		// { dg-warning "variable 'j' set but not used" }
+   j ^= 2;
+   int k = 0;		// { dg-warning "variable 'k' set but not used" }
+   k *= 2;
+   int l = 0;		// { dg-warning "variable 'l' set but not used" }
+   l %= 2;
+   int m = 0;		// { dg-warning "variable 'm' set but not used" }
+   for (int n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ template <int N>
+ int
+ bar (void)
+ {
+   int a = 0;
+   int b = ++a;
+   int c = 0;
+   int d = --c;
+   int e = 0;
+   int f = e--;
+   int g = 0;
+   int h = g++;
+   int i = 0;
+   int j;
+   j = i += 42;
+   int k = 0;
+   int l;
+   l = k *= 4;
+   int m = 0;
+   int n;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
+ 
+ void
+ test ()
+ {
+   foo <0> ();
+   bar <0> ();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wunused-var-41.C gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wunused-var-41.C
*** gcc-16-20250713/gcc/testsuite/g++.dg/warn/Wunused-var-41.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/g++.dg/warn/Wunused-var-41.C	Sun Jul 20 22:32:13 2025
***************
*** 0 ****
--- 1,69 ----
+ // PR c/44677
+ // { dg-do compile }
+ // { dg-options "-O2 -Wunused-but-set-variable" }
+ 
+ void baz (int);
+ 
+ template <typename T>
+ void
+ foo (void)
+ {
+   T a = 0;		// { dg-warning "variable 'a' set but not used" }
+   a = 1;
+   T b = 0;		// { dg-warning "variable 'b' set but not used" }
+   ++b;
+   T c = 0;		// { dg-warning "variable 'c' set but not used" }
+   c++;
+   T d = 0;		// { dg-warning "variable 'd' set but not used" }
+   --d;
+   T e = 0;		// { dg-warning "variable 'e' set but not used" }
+   e--;
+   T f = 0;		// { dg-warning "variable 'f' set but not used" }
+   f += 2;
+   T g = 0;		// { dg-warning "variable 'g' set but not used" }
+   g |= 2;
+   T h = 0;		// { dg-warning "variable 'h' set but not used" }
+   h -= 2;
+   T i = 0;		// { dg-warning "variable 'i' set but not used" }
+   i &= 2;
+   T j = 0;		// { dg-warning "variable 'j' set but not used" }
+   j ^= 2;
+   T k = 0;		// { dg-warning "variable 'k' set but not used" }
+   k *= 2;
+   T l = 0;		// { dg-warning "variable 'l' set but not used" }
+   l %= 2;
+   T m = 0;		// { dg-warning "variable 'm' set but not used" }
+   for (T n = 4; n < 10; n++, m++)
+     baz (n);
+ }
+ 
+ template <typename T>
+ T
+ bar (void)
+ {
+   T a = 0;
+   T b = ++a;
+   T c = 0;
+   T d = --c;
+   T e = 0;
+   T f = e--;
+   T g = 0;
+   T h = g++;
+   T i = 0;
+   T j;
+   j = i += 42;
+   T k = 0;
+   T l;
+   l = k *= 4;
+   T m = 0;
+   T n;
+   n = m |= 2;
+   return b + d + f + h + j + l + n;
+ }
+ 
+ void
+ test ()
+ {
+   foo <int> ();
+   bar <int> ();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.target/aarch64/sme/sme_throw_1.C gcc-16-20250720/gcc/testsuite/g++.target/aarch64/sme/sme_throw_1.C
*** gcc-16-20250713/gcc/testsuite/g++.target/aarch64/sme/sme_throw_1.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/g++.target/aarch64/sme/sme_throw_1.C	Sun Jul 20 22:32:14 2025
***************
*** 0 ****
--- 1,55 ----
+ /* { dg-do run { target { aarch64*-linux-gnu* && aarch64_sme_hw } } } */
+ 
+ #include <signal.h>
+ #include <arm_sme.h>
+ 
+ static bool caught;
+ 
+ [[gnu::noipa]] void thrower(int)
+ {
+   throw 1;
+ }
+ 
+ [[gnu::noipa]] void bar()
+ {
+   *(volatile int *)0 = 0;
+ }
+ 
+ [[gnu::noipa]] void foo()
+ {
+   try
+     {
+       bar();
+     }
+   catch (int)
+     {
+       caught = true;
+     }
+ }
+ 
+ __arm_new("za") __arm_locally_streaming void sme_user()
+ {
+   svbool_t all = svptrue_b8();
+   for (unsigned int i = 0; i < svcntb(); ++i)
+     {
+       svint8_t expected = svindex_s8(i + 1, i);
+       svwrite_hor_za8_m(0, i, all, expected);
+     }
+   foo();
+   for (unsigned int i = 0; i < svcntb(); ++i)
+     {
+       svint8_t expected = svindex_s8(i + 1, i);
+       svint8_t actual = svread_hor_za8_m(svdup_s8(0), all, 0, i);
+       if (svptest_any(all, svcmpne(all, expected, actual)))
+ 	__builtin_abort();
+     }
+   if (!caught)
+     __builtin_abort();
+ }
+ 
+ int main()
+ {
+   signal(SIGSEGV, thrower);
+   sme_user();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C gcc-16-20250720/gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C
*** gcc-16-20250713/gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C	Sun Jul 20 22:32:14 2025
***************
*** 0 ****
--- 1,4 ----
+ /* { dg-do run { target { aarch64*-linux-gnu* && aarch64_sme_hw } } } */
+ /* { dg-options "-O2" } */
+ 
+ #include "sme_throw_1.C"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/20021014-1.c gcc-16-20250720/gcc/testsuite/gcc.dg/20021014-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/20021014-1.c	Sun Jul 13 22:32:36 2025
--- gcc-16-20250720/gcc/testsuite/gcc.dg/20021014-1.c	Sun Jul 20 22:32:15 2025
***************
*** 2,7 ****
--- 2,8 ----
  /* { dg-require-profiling "-p" } */
  /* { dg-options "-O2 -p" } */
  /* { dg-options "-O2 -p -static" { target hppa*-*-hpux* } } */
+ /* { dg-additional-options "-mfentry -fno-pic" { target i?86-*-gnu* x86_64-*-gnu* } } */
  /* { dg-error "profiler" "No profiler support" { target xstormy16-*-* } 0 } */
  /* { dg-message "" "consider using `-pg' instead of `-p' with gprof(1)" { target *-*-freebsd* } 0 } */
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/aru-2.c gcc-16-20250720/gcc/testsuite/gcc.dg/aru-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/aru-2.c	Sun Jul 13 22:32:36 2025
--- gcc-16-20250720/gcc/testsuite/gcc.dg/aru-2.c	Sun Jul 20 22:32:16 2025
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do run } */
  /* { dg-require-profiling "-pg" } */
  /* { dg-options "-O2 -pg" } */
+ /* { dg-additional-options "-mfentry -fno-pic" { target i?86-*-gnu* x86_64-*-gnu* } } */
  
  static int __attribute__((noinline))
  bar (int x)
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/bitint-124.c gcc-16-20250720/gcc/testsuite/gcc.dg/bitint-124.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/bitint-124.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.dg/bitint-124.c	Sun Jul 20 22:32:16 2025
***************
*** 0 ****
--- 1,30 ----
+ /* PR tree-optimization/121131 */
+ /* { dg-do run { target bitint } } */
+ /* { dg-options "-O2" } */
+ 
+ #if __BITINT_MAXWIDTH__ >= 156
+ struct A { _BitInt(156) b : 135; };
+ 
+ static inline _BitInt(156)
+ foo (struct A *x)
+ {
+   return x[1].b;
+ }
+ 
+ __attribute__((noipa)) _BitInt(156)
+ bar (void)
+ {
+   struct A a[] = { 1, 1, -13055525270329736316393717310914023773847wb,
+ 		   1, 1, 1, 1, 1, 1, 1, 1, 1 };
+   return foo (&a[1]);
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __BITINT_MAXWIDTH__ >= 156
+   if (bar () != -13055525270329736316393717310914023773847wb)
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/darwin-minversion-link.c gcc-16-20250720/gcc/testsuite/gcc.dg/darwin-minversion-link.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/darwin-minversion-link.c	Sun Jul 13 22:32:36 2025
--- gcc-16-20250720/gcc/testsuite/gcc.dg/darwin-minversion-link.c	Sun Jul 20 22:32:17 2025
***************
*** 20,25 ****
--- 20,26 ----
  /* { dg-additional-options "-mmacosx-version-min=013.000.00 -DCHECK=130000" { target *-*-darwin22* } } */
  /* { dg-additional-options "-mmacosx-version-min=014.000.00 -DCHECK=140000" { target *-*-darwin23* } } */
  /* { dg-additional-options "-mmacosx-version-min=015.000.00 -DCHECK=150000" { target *-*-darwin24* } } */
+ /* { dg-additional-options "-mmacosx-version-min=026.000.00 -DCHECK=260000" { target *-*-darwin25* } } */
  
  int
  main ()
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/memchr-3.c gcc-16-20250720/gcc/testsuite/gcc.dg/memchr-3.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/memchr-3.c	Sun Jul 13 22:32:36 2025
--- gcc-16-20250720/gcc/testsuite/gcc.dg/memchr-3.c	Sun Jul 20 22:32:18 2025
*************** struct SX
*** 17,25 ****
  const struct SX sx = { 0x1221 };
  const char sx_rep[] = { };
  
! void test_find (void)
  {
    int n = 0, nb = (const char*)&sx.a - (const char*)&sx;
    const char *p = (const char*)&sx, *q = sx_rep;
    n += p + 1 == memchr (p, q[1], nb);
  }
--- 17,26 ----
  const struct SX sx = { 0x1221 };
  const char sx_rep[] = { };
  
! int test_find (void)
  {
    int n = 0, nb = (const char*)&sx.a - (const char*)&sx;
    const char *p = (const char*)&sx, *q = sx_rep;
    n += p + 1 == memchr (p, q[1], nb);
+   return n;
  }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/nest.c gcc-16-20250720/gcc/testsuite/gcc.dg/nest.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/nest.c	Sun Jul 13 22:32:36 2025
--- gcc-16-20250720/gcc/testsuite/gcc.dg/nest.c	Sun Jul 20 22:32:18 2025
***************
*** 3,8 ****
--- 3,9 ----
  /* { dg-require-profiling "-pg" } */
  /* { dg-options "-O2 -pg" } */
  /* { dg-options "-O2 -pg -static" { target hppa*-*-hpux* } } */
+ /* { dg-additional-options "-mfentry -fno-pic" { target i?86-*-gnu* x86_64-*-gnu* } } */
  /* { dg-error "profiler" "No profiler support" { target xstormy16-*-* } 0 } */
  
  extern void abort (void);
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/pr121035.c gcc-16-20250720/gcc/testsuite/gcc.dg/pr121035.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/pr121035.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.dg/pr121035.c	Sun Jul 20 22:32:19 2025
***************
*** 0 ****
--- 1,94 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fgimple" } */
+ 
+ int printf(const char *, ...);
+ int a, b, d;
+ unsigned c;
+ int __GIMPLE (ssa,startwith("pre"))
+ main ()
+ {
+   unsigned int g;
+   int f;
+   unsigned int _1;
+   unsigned int _2;
+   int _3;
+   int _4;
+   int _5;
+   unsigned int _6;
+   unsigned int _7;
+   int _10;
+   unsigned int _11;
+   _Bool _19;
+   _Bool _20;
+   _Bool _22;
+   int _25;
+ 
+   __BB(2):
+   _25 = a;
+   if (_25 != 0)
+     goto __BB11;
+   else
+     goto __BB10;
+ 
+   __BB(11):
+   goto __BB3;
+ 
+   __BB(3):
+   f_26 = __PHI (__BB12: f_18, __BB11: 0);
+   g_15 = c;
+   if (f_26 != 0)
+     goto __BB4;
+   else
+     goto __BB5;
+ 
+   __BB(4):
+   __builtin_putchar (48);
+   goto __BB5;
+ 
+   __BB(5):
+   _1 = c;
+   _2 = _1 << 1;
+   _3 = a;
+   _4 = d;
+   _5 = _3 * _4;
+   if (_5 != 0)
+     goto __BB7;
+   else
+     goto __BB6;
+ 
+   __BB(6):
+   goto __BB7;
+ 
+   __BB(7):
+   _11 = __PHI (__BB5: 0u, __BB6: 4294967295u);
+   _6 = g_15 * 4294967294u;
+   _7 = _6 | _11;
+   _20 = _3 != 0;
+   _19 = _7 != 0u;
+   _22 = _19 & _20;
+   if (_22 != _Literal (_Bool) 0)
+     goto __BB9;
+   else
+     goto __BB8;
+ 
+   __BB(8):
+   goto __BB9;
+ 
+   __BB(9):
+   _10 = __PHI (__BB7: 1, __BB8: 0);
+   b = _10;
+   f_18 = (int) _1;
+   if (_3 != 0)
+     goto __BB12;
+   else
+     goto __BB10;
+ 
+   __BB(12):
+   goto __BB3;
+ 
+   __BB(10):
+   return 0;
+ 
+ }
+ 
+ 
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/pr32450.c gcc-16-20250720/gcc/testsuite/gcc.dg/pr32450.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/pr32450.c	Sun Jul 13 22:32:37 2025
--- gcc-16-20250720/gcc/testsuite/gcc.dg/pr32450.c	Sun Jul 20 22:32:19 2025
***************
*** 4,9 ****
--- 4,10 ----
  /* { dg-require-profiling "-pg" } */
  /* { dg-options "-O2 -pg" } */
  /* { dg-options "-O2 -pg -mtune=core2" { target { i?86-*-* x86_64-*-* } } } */
+ /* { dg-additional-options "-mfentry -fno-pic" { target i?86-*-gnu* x86_64-*-gnu* } } */
  /* { dg-options "-O2 -pg -static" { target hppa*-*-hpux* } } */
  
  extern void abort (void);
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/pr43643.c gcc-16-20250720/gcc/testsuite/gcc.dg/pr43643.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/pr43643.c	Sun Jul 13 22:32:37 2025
--- gcc-16-20250720/gcc/testsuite/gcc.dg/pr43643.c	Sun Jul 20 22:32:19 2025
***************
*** 4,9 ****
--- 4,10 ----
  /* { dg-require-profiling "-pg" } */
  /* { dg-options "-O2 -pg" } */
  /* { dg-options "-O2 -pg -static" { target hppa*-*-hpux* } } */
+ /* { dg-additional-options "-mfentry -fno-pic" { target i?86-*-gnu* x86_64-*-gnu* } } */
  
  extern char *strdup (const char *);
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/torture/pr121116.c gcc-16-20250720/gcc/testsuite/gcc.dg/torture/pr121116.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/torture/pr121116.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.dg/torture/pr121116.c	Sun Jul 20 22:32:21 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do run { target bitint } } */
+ 
+ #include <stdlib.h>
+ #include <stdckdint.h>
+ #include <string.h>
+ typedef _BitInt(16) bit16;
+ [[nodiscard]] static bit16 process_data(bit16 input) {
+     _Static_assert(sizeof(bit16) == 2, "Unexpected size of bit16");
+     return (input << 5) | (input >> 9);
+ }
+ int main(void) {
+     const bit16 data = 0b101'0101'0000'0000;
+     bit16 result = 0;
+     for (bit16 i = 0; i < 0b1000; ++i) {
+         result ^= process_data(data ^ i);
+     }
+     if (ckd_add(&result, result, 0x1234)) {
+         return EXIT_FAILURE;
+     }
+     return (result & 0xFF00) ? 0 : 1;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/tree-prof/afdo-crossmodule-1b.c gcc-16-20250720/gcc/testsuite/gcc.dg/tree-prof/afdo-crossmodule-1b.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/tree-prof/afdo-crossmodule-1b.c	Sun Jul 13 22:32:37 2025
--- gcc-16-20250720/gcc/testsuite/gcc.dg/tree-prof/afdo-crossmodule-1b.c	Sun Jul 20 22:32:21 2025
***************
*** 1,3 ****
--- 1,8 ----
+ /* { dg-require-effective-target lto } */
+ /* { dg-additional-sources "afdo-crossmodule-1.c" } */
+ /* { dg-options "-O3 -flto -fdump-ipa-afdo_offline -fdump-tree-einline-details" } */
+ /* { dg-require-profiling "-fauto-profile" } */
+ 
  extern int foo2 ();
  
  int bar (int (*fooptr) (int (*)()))
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/tree-ssa/pr117423.c gcc-16-20250720/gcc/testsuite/gcc.dg/tree-ssa/pr117423.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/tree-ssa/pr117423.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.dg/tree-ssa/pr117423.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-do run } */
+ /* { dg-options "-O1" } */
+ 
+ struct s4 {
+     int _0;
+ };
+ struct s1 {
+     unsigned char _4;
+     long _1;
+ };
+ struct s2 {
+     union {
+         struct s3 {
+             unsigned char _1;
+             struct s4 _0;
+         } var_0;
+         struct s1 var_1;
+     } DATA;
+ };
+ int f1(int arg0) { return arg0 > 12345; }
+ __attribute__((noinline))
+ struct s4 f2(int arg0) {
+     struct s4 rv = {arg0};
+     return rv;
+ }
+ struct s2 f3(int arg0) {
+     struct s2 rv;
+     struct s1 var6 = {0};
+     struct s4 var7;
+     if (f1(arg0)) {
+         rv.DATA.var_1 = var6;
+         return rv;
+     } else {
+         rv.DATA.var_0._1 = 2;
+         var7 = f2(arg0);
+         rv.DATA.var_0._0 = var7;
+         return rv;
+     }
+ }
+ int main() {
+   if (f3(12345).DATA.var_0._0._0 == 12345)
+     ;
+   else
+     __builtin_abort();
+   if (f3(12344).DATA.var_0._0._0 == 12344)
+     ;
+   else
+     __builtin_abort();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/uninit-pr120924.c gcc-16-20250720/gcc/testsuite/gcc.dg/uninit-pr120924.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/uninit-pr120924.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.dg/uninit-pr120924.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wmaybe-uninitialized" } */
+ 
+ int foo(int);
+ enum {
+   BPF_TRACE_RAW_TP,
+   BPF_MODIFY_RETURN,
+   BPF_LSM_MAC,
+   BPF_TRACE_ITER,
+   BPF_LSM_CGROUP
+ };
+ int btf_get_kernel_prefix_kind_prefix, obj_1, attach_name___trans_tmp_1;
+ char attach_name_fn_name;
+ void attach_name(int attach_type)
+ {
+   int mod_len;
+   char mod_name = attach_name_fn_name;
+   if (attach_name_fn_name)
+     mod_len = mod_name;
+   for (; obj_1;) {
+     if (mod_name && foo(mod_len))
+       continue;
+     switch (attach_type) {
+     case BPF_TRACE_RAW_TP:
+     case BPF_LSM_MAC:
+     case BPF_LSM_CGROUP:
+       btf_get_kernel_prefix_kind_prefix = 1;
+     case BPF_TRACE_ITER:
+       attach_name_fn_name = 2;
+     }
+     if (attach_name___trans_tmp_1)
+       return;
+   }
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/unused-9.c gcc-16-20250720/gcc/testsuite/gcc.dg/unused-9.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/unused-9.c	Sun Jul 13 22:32:37 2025
--- gcc-16-20250720/gcc/testsuite/gcc.dg/unused-9.c	Sun Jul 20 22:32:22 2025
***************
*** 2,13 ****
  /* { dg-do compile } */
  /* { dg-options "-Wunused" } */
  
- 
  void g(void)
  {
!   int i = 0;
!   volatile int x;
!   (x, i++);	/* { dg-bogus "set but not used" } */
  }
- 
- 
--- 2,10 ----
  /* { dg-do compile } */
  /* { dg-options "-Wunused" } */
  
  void g(void)
  {
!   int i = 0;		/* { dg-warning "variable 'i' set but not used" } */
!   volatile int x;	/* { dg-bogus "variable 'x' set but not used" } */
!   (x, i++);
  }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/vect/bb-slp-39.c gcc-16-20250720/gcc/testsuite/gcc.dg/vect/bb-slp-39.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/vect/bb-slp-39.c	Sun Jul 13 22:32:37 2025
--- gcc-16-20250720/gcc/testsuite/gcc.dg/vect/bb-slp-39.c	Sun Jul 20 22:32:22 2025
*************** void foo (double *p)
*** 16,20 ****
  }
  
  /* See that we vectorize three SLP instances.  */
! /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "slp2" { target { ! { s390*-*-* riscv*-*-* } } } } } */
! /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 5 "slp2" { target {   s390*-*-* riscv*-*-* } } } } */
--- 16,19 ----
  }
  
  /* See that we vectorize three SLP instances.  */
! /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "slp2" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/vect/pr121049.c gcc-16-20250720/gcc/testsuite/gcc.dg/vect/pr121049.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/vect/pr121049.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.dg/vect/pr121049.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-additional-options "--param vect-partial-vector-usage=1" } */
+ /* { dg-additional-options "-march=x86-64-v4" { target avx512f_runtime } } */
+ 
+ #include "tree-vect.h"
+ 
+ int mon_lengths[12] = { 1, 10, 100 };
+ 
+ __attribute__ ((noipa)) long
+ transtime (int mon)
+ {
+   long value = 0;
+   for (int i = 0; i < mon; ++i)
+     value += mon_lengths[i] * 2l;
+   return value;
+ }
+ 
+ int
+ main ()
+ {
+   check_vect ();
+   if (transtime (3) != 222)
+     __builtin_abort ();
+   return 0;
+ }
+ 
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/vect/pr121059.c gcc-16-20250720/gcc/testsuite/gcc.dg/vect/pr121059.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/vect/pr121059.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.dg/vect/pr121059.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O3 --param vect-partial-vector-usage=1" } */
+ /* { dg-additional-options "-march=x86-64-v4" { target avx512f } } */
+ 
+ typedef struct {
+   long left, right, top, bottom;
+ } MngBox;
+ typedef struct {
+   MngBox object_clip[6];
+   char exists[256], frozen[];
+ } MngReadInfo;
+ MngReadInfo mng_info;
+ 
+ long ReadMNGImage_i;
+ 
+ void ReadMNGImage(int ReadMNGImage_i)
+ {
+   for (; ReadMNGImage_i < 256; ReadMNGImage_i++)
+     if (mng_info.exists[ReadMNGImage_i] && mng_info.frozen[ReadMNGImage_i])
+       mng_info.object_clip[ReadMNGImage_i].left =
+           mng_info.object_clip[ReadMNGImage_i].right =
+               mng_info.object_clip[ReadMNGImage_i].top =
+                   mng_info.object_clip[ReadMNGImage_i].bottom = 0;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/vect/pr121126.c gcc-16-20250720/gcc/testsuite/gcc.dg/vect/pr121126.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/vect/pr121126.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.dg/vect/pr121126.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-additional-options "--param vect-partial-vector-usage=2" } */
+ 
+ #include "tree-vect.h"
+ 
+ unsigned char a;
+ unsigned b;
+ int r[11];
+ static void __attribute__((noipa))
+ c(int e, unsigned s[][11][11])
+ {
+   for (int u = -(e ? 2000424973 : 0) - 2294542319; u < 7; u += 4)
+     for (int x = 0; x < 300000011; x += 4)
+       for (int y = 0; y < (0 < s[u][4][1]) + 11; y += 3) {
+         a = a ?: 1;
+         b = r[2];
+       }
+ }
+ long long ab;
+ int e = 1;
+ unsigned s[11][11][11];
+ int main()
+ {
+   check_vect ();
+   for (int t = 0; t < 11; ++t)
+     r[t] = 308100;
+   c(e,s);
+   ab = b;
+   if (ab != 308100)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-1.c gcc-16-20250720/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-1.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,60 ----
+ /* { dg-require-effective-target vect_int } */
+ /* { dg-require-effective-target vect_condition } */
+ 
+ #include <stdarg.h>
+ #include "tree-vect.h"
+ 
+ /* PR tree-optimization/119920 */
+ 
+ #define N 32
+ 
+ unsigned int ub[N];
+ 
+ /* Test vectorization of reduction of unsigned-int.  */
+ 
+ __attribute__ ((noinline, noipa))
+ void init(void)
+ {
+   #pragma GCC novector
+   for(int i = 0;i < N; i++)
+     ub[i] = i;
+ }
+ 
+ 
+ __attribute__ ((noinline, noipa))
+ void main1 (unsigned int b, unsigned int c)
+ {
+   int i;
+   unsigned int usum = 0;
+ 
+   init();
+ 
+   /* Summation.  */
+   for (i = 0; i < N; i++) {
+     if ( ub[i] < N/2 )
+     {
+       usum += b;
+     }
+     else
+     {
+       usum += c;
+     }
+   }
+ 
+   /* check results:  */
+  /* __builtin_printf("%d : %d\n", usum, (N/2*b + N/2*c)); */
+   if (usum != N/2*b + N/2*c)
+     abort ();
+ }
+ 
+ int main (void)
+ { 
+   check_vect ();
+   
+   main1 (0, 0);
+   main1 (1, 1);
+   main1 (10, 1);
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_int_add } } } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-2.c gcc-16-20250720/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-2.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,62 ----
+ /* { dg-require-effective-target vect_int } */
+ /* { dg-require-effective-target vect_condition } */
+ /* { dg-additional-options "-fdump-tree-ifcvt-details" } */
+ 
+ #include <stdarg.h>
+ #include "tree-vect.h"
+ 
+ /* PR tree-optimization/119920 */
+ 
+ #define N 32
+ 
+ unsigned int ub[N];
+ unsigned int ua[N];
+ 
+ /* Test vectorization of reduction of unsigned-int.  */
+ 
+ __attribute__ ((noinline, noipa))
+ void init(void)
+ {
+   #pragma GCC novector
+   for(int i = 0;i < N; i++) {
+     ub[i] = i;
+     ua[i] = 1;
+   }
+ }
+ 
+ 
+ __attribute__ ((noinline, noipa))
+ void main1 (unsigned int b, unsigned int c)
+ {
+   int i;
+   unsigned int usum = 0;
+ 
+   init();
+ 
+   /* Summation.  */
+   for (i = 0; i < N; i++) {
+     unsigned t = ua[i];
+     if ( ub[i] < N/2 )
+       usum += b * t;
+     else
+       usum += c * t;
+   }
+ 
+   /* check results:  */
+   /* __builtin_printf("%d : %d\n", usum, (N/2*b*1 + N/2*c*1)); */
+   if (usum != N/2*b + N/2*c)
+     abort ();
+ }
+ 
+ int main (void)
+ { 
+   check_vect ();
+   
+   main1 (0, 0);
+   main1 (1, 1);
+   main1 (10, 1);
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_int_add } } } } */
+ /* { dg-final { scan-tree-dump-times "changed to factor operation out from COND_EXPR" 2 "ifcvt" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-3.c gcc-16-20250720/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-3.c
*** gcc-16-20250713/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.dg/vect/vect-reduc-cond-3.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,56 ----
+ /* { dg-require-effective-target vect_int } */
+ 
+ #include <stdarg.h>
+ #include "tree-vect.h"
+ 
+ /* PR tree-optimization/112324 */
+ /* PR tree-optimization/110015 */
+ 
+ #define N 32
+ 
+ int ub[N];
+ 
+ /* Test vectorization of reduction of int max with some extra code involed.  */
+ 
+ __attribute__ ((noinline, noipa))
+ void init(void)
+ {
+   #pragma GCC novector
+   for(int i = 0;i < N; i++)
+     ub[i] = (i&4) && (i&1) ? -i : i;
+ }
+ 
+ #define MAX(a, b) ((a) > (b) ? (a) : (b)) 
+ 
+ __attribute__ ((noinline, noipa))
+ void main1 (void)
+ {
+   int i;
+   int max = 0;
+ 
+   init();
+ 
+   /* Summation.  */
+   for (i = 0; i < N; i++) {
+     int tmp = ub[i];
+     if (tmp < 0)
+       max = MAX (-tmp, max);
+     else
+       max = MAX (tmp, max);
+   }
+ 
+   /* check results:  */
+   /* __builtin_printf("%d : %d\n", max, N); */
+   if (max != N - 1)
+     abort ();
+ }
+ 
+ int main (void)
+ { 
+   check_vect ();
+   
+   main1 ();
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_int_min_max } } } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-be.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-be.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-be.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-be.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target aarch64_big_endian } */
+ /* { dg-options "-O2 -favoid-store-forwarding" } */
+ 
+ typedef union {
+     char arr[2];
+     short value;
+ } DataUnion;
+ 
+ short __attribute__ ((noinline))
+ ssll (DataUnion *data, char x, char y)
+ {
+   data->arr[0] = x;
+   data->arr[1] = y;
+   return data->value;
+ }
+ 
+ int main () {
+   DataUnion data = {};
+   short value = ssll (&data, 0, 1);
+   if (value != 1)
+     __builtin_abort ();
+ }
\ No newline at end of file
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/ldapr-sext.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/ldapr-sext.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/ldapr-sext.c	Sun Jul 13 22:32:38 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/ldapr-sext.c	Sun Jul 20 22:32:22 2025
*************** TEST(s8_s64, s8, long long)
*** 33,39 ****
  /*
  **test_s16_s64:
  **...
! **	ldapursh	x0, \[x[0-9]+\]
  **	ret
  */
  
--- 33,39 ----
  /*
  **test_s16_s64:
  **...
! **	ldapursh	x0, \[x[0-9]+, [0-9]+\]
  **	ret
  */
  
*************** TEST(s16_s64, s16, long long)
*** 42,48 ****
  /*
  **test_s32_s64:
  **...
! **	ldapursw	x0, \[x[0-9]+\]
  **	ret
  */
  
--- 42,48 ----
  /*
  **test_s32_s64:
  **...
! **	ldapursw	x0, \[x[0-9]+, [0-9]+\]
  **	ret
  */
  
*************** TEST(s8_s32, s8, int)
*** 60,66 ****
  /*
  **test_s16_s32:
  **...
! **	ldapursh	w0, \[x[0-9]+\]
  **	ret
  */
  
--- 60,66 ----
  /*
  **test_s16_s32:
  **...
! **	ldapursh	w0, \[x[0-9]+, [0-9]+\]
  **	ret
  */
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/ldapur.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/ldapur.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/ldapur.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/ldapur.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,77 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -std=c99" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #include <stdatomic.h>
+ #include <stdint.h>
+ 
+ #pragma GCC target "arch=armv8.8-a"
+ 
+ atomic_ullong u64;
+ atomic_uint u32;
+ atomic_ushort u16;
+ atomic_uchar u8[2]; /* Force an offset for u8 */
+ 
+ #define TEST(name, ldsize, rettype)				\
+ rettype								\
+ test_##name (void)						\
+ {								\
+   return atomic_load_explicit (&ldsize, memory_order_acquire);	\
+ }								\
+ 
+ 
+ /*
+ ** test_u8_u64:
+ **	...
+ **	ldapurb	w[0-9]+, \[x[0-9]+, [0-9]+\]
+ **	ret
+ */
+ TEST(u8_u64, u8[1], uint64_t)
+ 
+ /*
+ ** test_u16_u64:
+ **	...
+ **	ldapurh	w[0-9]+, \[x[0-9]+, [0-9]+\]
+ **	ret
+ */
+ TEST(u16_u64, u16, uint64_t)
+ 
+ /*
+ **test_u32_u64:
+ **	...
+ **	ldapur	w[0-9]+, \[x[0-9]+, [0-9]+\]
+ **	ret
+ */
+ TEST(u32_u64, u32, uint64_t)
+ 
+ /*
+ **test_u64_u64:
+ **	...
+ **	ldapur	x[0-9]+, \[x[0-9]+, [0-9]+\]
+ **	ret
+ */
+ TEST(u64_u64, u64, uint64_t)
+ 
+ /*
+ **test_u8_u32:
+ **	...
+ **	ldapurb	w[0-9]+, \[x[0-9]+, [0-9]+\]
+ **	ret
+ */
+ TEST(u8_u32, u8[1], uint32_t)
+ 
+ /*
+ **test_u16_u32:
+ **	...
+ **	ldapurh	w[0-9]+, \[x[0-9]+, [0-9]+\]
+ **	ret
+ */
+ TEST(u16_u32, u16, uint32_t)
+ 
+ /*
+ **test_u32_u32:
+ **	...
+ **	ldapur	w[0-9]+, \[x[0-9]+, [0-9]+\]
+ **	ret
+ */
+ TEST(u32_u32, u32, uint32_t)
\ No newline at end of file
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/ldapur_avoid.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/ldapur_avoid.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/ldapur_avoid.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/ldapur_avoid.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,37 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -std=c99 -moverride=tune=avoid_ldapur" } */
+ 
+ #include <stdatomic.h>
+ #include <stdint.h>
+ 
+ #pragma GCC target "arch=armv8.8-a"
+ /* LDAPUR is only avoided for armv8.4 to armv8.7. This checks for the working
+ of avoid_ldapur flag. */
+ 
+ /* { dg-final { scan-assembler-not "ldapur\t" } } */
+ 
+ atomic_ullong u64;
+ atomic_uint u32;
+ atomic_ushort u16;
+ atomic_uchar u8[2]; /* Force an offset for u8 */
+ 
+ #define TEST(name, ldsize, rettype)				\
+ rettype								\
+ test_##name (void)						\
+ {								\
+   return atomic_load_explicit (&ldsize, memory_order_acquire);	\
+ }								\
+ 
+ TEST(u8_u64, u8[1], uint64_t)
+ TEST(u16_u64, u16, uint64_t)
+ TEST(u32_u64, u32, uint64_t)
+ TEST(u64_u64, u64, uint64_t)
+ TEST(u8_u32, u8[1], uint32_t)
+ TEST(u16_u32, u16, uint32_t)
+ TEST(u32_u32, u32, uint32_t)
+ 
+ /* { dg-final { scan-assembler-times "ldapr\t" 3 } } */
+ /* { dg-final { scan-assembler-times "ldaprh\t" 2 } } */
+ /* { dg-final { scan-assembler-times "ldaprb\t" 2 } } */
+ 
+ 
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/eor3_d.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/eor3_d.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/eor3_d.c	Sun Jul 13 22:32:38 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/eor3_d.c	Sun Jul 20 22:32:22 2025
***************
*** 7,19 ****
  
  #define EOR3(x,y,z)  ((x) ^ (y) ^ (z))
  
- /* Should not use EOR3 when inputs come from GP regs.  */
- uint64_t eor3_d_gp (uint64_t a, uint64_t b, uint64_t c) { return EOR3 (a, b, c); }
- 
- uint64x1_t eor3_d (uint64x1_t a, uint64x1_t b, uint64x1_t c) { return EOR3 (a, b, c); }
  uint32x2_t bcax_s (uint32x2_t a, uint32x2_t b, uint32x2_t c) { return EOR3 (a, b, c); }
  uint16x4_t bcax_h (uint16x4_t a, uint16x4_t b, uint16x4_t c) { return EOR3 (a, b, c); }
  uint8x8_t bcax_b (uint8x8_t a, uint8x8_t b, uint8x8_t c) { return EOR3 (a, b, c); }
  
! /* { dg-final { scan-assembler-times {eor3\tv0.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b} 4 } } */
  
--- 7,15 ----
  
  #define EOR3(x,y,z)  ((x) ^ (y) ^ (z))
  
  uint32x2_t bcax_s (uint32x2_t a, uint32x2_t b, uint32x2_t c) { return EOR3 (a, b, c); }
  uint16x4_t bcax_h (uint16x4_t a, uint16x4_t b, uint16x4_t c) { return EOR3 (a, b, c); }
  uint8x8_t bcax_b (uint8x8_t a, uint8x8_t b, uint8x8_t c) { return EOR3 (a, b, c); }
  
! /* { dg-final { scan-assembler-times {eor3\tv0.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b} 3 } } */
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_1.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_1.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,716 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O -march=armv9-a+bf16" } */
+ 
+ #include <arm_neon.h>
+ 
+ /* We should use the highpart instruction where doing so would avoid data
+    movement instructions.  This case, where all the arguments are non-constant
+    vector highparts, can be handled by either gimple_fold_builtin or combine.  */
+ 
+ #ifndef TEST_UN_HIGHPARTS
+ #define TEST_UN_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF) \
+   RETTYPE test_##FN##_##SUFF (INTYPE a)		     \
+   {                                                  \
+     return FN##_##SUFF (vget_high_##SUFF (a));	     \
+   }
+ #endif
+ 
+ #ifndef TEST_BIN_W_HIGHPARTS
+ #define TEST_BIN_W_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)  \
+   RETTYPE test_##FN##_##SUFF (RETTYPE a, INTYPE b)	 \
+   {                                                      \
+     return FN##_##SUFF (a, vget_high_##SUFF (b));	 \
+   }
+ #endif
+ 
+ #ifndef TEST_BIN_N_HIGHPARTS
+ #define TEST_BIN_N_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)    \
+   RETTYPE test_##FN##_##SUFF (INTYPE a)			   \
+   {                                                        \
+     return FN##_##SUFF (vget_high_##SUFF (a), a[1]);	   \
+   }
+ #endif
+ 
+ #ifndef TEST_TERN_N_HIGHPARTS
+ #define TEST_TERN_N_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)      \
+   RETTYPE test_##FN##_##SUFF (RETTYPE a, INTYPE b)	      \
+   {                                                           \
+     return FN##_##SUFF (a, vget_high_##SUFF (b), b[1]);	      \
+   }
+ #endif
+ 
+ #ifndef TEST_BIN_HIGHPARTS
+ #define TEST_BIN_HIGHPARTS(FN, RETTYPE, INTYPE, H_INTYPE, SUFF) \
+   RETTYPE test_##FN##_##SUFF (INTYPE a, INTYPE b)		\
+   {                                                             \
+     return FN##_##SUFF (vget_high_##SUFF (a),			\
+ 			vget_high_##SUFF (b));			\
+   }
+ #endif
+ 
+ #ifndef TEST_TERN_HIGHPARTS
+ #define TEST_TERN_HIGHPARTS(FN, RETTYPE, INTYPE, H_INTYPE, SUFF)   \
+   RETTYPE test_##FN##_##SUFF (RETTYPE a, INTYPE b, INTYPE c)	   \
+   {                                                                \
+     return FN##_##SUFF(a, vget_high_##SUFF (b),			   \
+ 		       vget_high_##SUFF (c));			   \
+   }
+ #endif
+ 
+ #define TEST_UNOP(FN) \
+   TEST_UN_HIGHPARTS (FN, int16x8_t,  int8x16_t,  s8)  \
+   TEST_UN_HIGHPARTS (FN, uint16x8_t, uint8x16_t, u8)  \
+   TEST_UN_HIGHPARTS (FN, int32x4_t,  int16x8_t,  s16) \
+   TEST_UN_HIGHPARTS (FN, uint32x4_t, uint16x8_t, u16) \
+   TEST_UN_HIGHPARTS (FN, int64x2_t,  int32x4_t,  s32) \
+   TEST_UN_HIGHPARTS (FN, uint64x2_t, uint32x4_t, u32)
+ 
+ #define TEST_BINOP(FN)						   \
+   TEST_BIN_HIGHPARTS (FN, int16x8_t,  int8x16_t,  int8x8_t,   s8)  \
+   TEST_BIN_HIGHPARTS (FN, uint16x8_t, uint8x16_t, uint8x8_t,  u8)  \
+   TEST_BIN_HIGHPARTS (FN, int32x4_t,  int16x8_t,  int16x4_t,  s16) \
+   TEST_BIN_HIGHPARTS (FN, uint32x4_t, uint16x8_t, uint16x4_t, u16) \
+   TEST_BIN_HIGHPARTS (FN, int64x2_t,  int32x4_t,  int32x2_t,  s32) \
+   TEST_BIN_HIGHPARTS (FN, uint64x2_t, uint32x4_t, uint32x2_t, u32)
+ 
+ #define TEST_BINOP_N(FN)				 \
+   TEST_BIN_N_HIGHPARTS (FN, int32x4_t,  int16x8_t,  s16) \
+   TEST_BIN_N_HIGHPARTS (FN, uint32x4_t, uint16x8_t, u16) \
+   TEST_BIN_N_HIGHPARTS (FN, int64x2_t,  int32x4_t,  s32) \
+   TEST_BIN_N_HIGHPARTS (FN, uint64x2_t, uint32x4_t, u32)
+ 
+ #define TEST_BINOP_W(FN)				 \
+   TEST_BIN_W_HIGHPARTS (FN, int16x8_t,  int8x16_t,   s8) \
+   TEST_BIN_W_HIGHPARTS (FN, uint16x8_t, uint8x16_t,  u8) \
+   TEST_BIN_W_HIGHPARTS (FN, int32x4_t,  int16x8_t,  s16) \
+   TEST_BIN_W_HIGHPARTS (FN, uint32x4_t, uint16x8_t, u16) \
+   TEST_BIN_W_HIGHPARTS (FN, int64x2_t,  int32x4_t,  s32) \
+   TEST_BIN_W_HIGHPARTS (FN, uint64x2_t, uint32x4_t, u32)
+ 
+ #define TEST_TERNOP_N(FN)				  \
+   TEST_TERN_N_HIGHPARTS (FN, int32x4_t,  int16x8_t,  s16) \
+   TEST_TERN_N_HIGHPARTS (FN, uint32x4_t, uint16x8_t, u16) \
+   TEST_TERN_N_HIGHPARTS (FN, int64x2_t,  int32x4_t,  s32) \
+   TEST_TERN_N_HIGHPARTS (FN, uint64x2_t, uint32x4_t, u32)
+ 
+ #define TEST_TERNOP(FN)                                           \
+   TEST_TERN_HIGHPARTS (FN, int16x8_t,  int8x16_t,  int8x8_t,   s8)  \
+   TEST_TERN_HIGHPARTS (FN, uint16x8_t, uint8x16_t, uint8x8_t,  u8)  \
+   TEST_TERN_HIGHPARTS (FN, int32x4_t,  int16x8_t,  int16x4_t,  s16) \
+   TEST_TERN_HIGHPARTS (FN, uint32x4_t, uint16x8_t, uint16x4_t, u16) \
+   TEST_TERN_HIGHPARTS (FN, int64x2_t,  int32x4_t,  int32x2_t,  s32) \
+   TEST_TERN_HIGHPARTS (FN, uint64x2_t, uint32x4_t, uint32x2_t, u32)
+ 
+ #define TEST_VQDMULL                                                 \
+   TEST_BIN_HIGHPARTS (vqdmull, int32x4_t, int16x8_t, int16x4_t, s16) \
+   TEST_BIN_HIGHPARTS (vqdmull, int64x2_t, int32x4_t, int32x2_t, s32)
+ 
+ #define TEST_VQDMULL_N                                        \
+   TEST_BIN_N_HIGHPARTS (vqdmull_n, int32x4_t, int16x8_t, s16) \
+   TEST_BIN_N_HIGHPARTS (vqdmull_n, int64x2_t, int32x4_t, s32)
+ 
+ #define TEST_VQMLAL                                                   \
+   TEST_TERN_HIGHPARTS (vqdmlal, int32x4_t, int16x8_t, int16x4_t, s16) \
+   TEST_TERN_HIGHPARTS (vqdmlal, int64x2_t, int32x4_t, int32x2_t, s32)
+ 
+ #define TEST_VQMLAL_N                                          \
+   TEST_TERN_N_HIGHPARTS (vqdmlal_n, int32x4_t, int16x8_t, s16) \
+   TEST_TERN_N_HIGHPARTS (vqdmlal_n, int64x2_t, int32x4_t, s32)
+ 
+ #define TEST_VQMLSL                                                   \
+   TEST_TERN_HIGHPARTS (vqdmlsl, int32x4_t, int16x8_t, int16x4_t, s16) \
+   TEST_TERN_HIGHPARTS (vqdmlsl, int64x2_t, int32x4_t, int32x2_t, s32)
+ 
+ #define TEST_VQMLSL_N                                          \
+   TEST_TERN_N_HIGHPARTS (vqdmlsl_n, int32x4_t, int16x8_t, s16) \
+   TEST_TERN_N_HIGHPARTS (vqdmlsl_n, int64x2_t, int32x4_t, s32)
+ 
+ #define TEST_VMOVL \
+   TEST_UNOP (vmovl)
+ 
+ #define TEST_VMULL \
+   TEST_BINOP (vmull) \
+   TEST_BIN_HIGHPARTS (vmull, poly16x8_t, poly8x16_t, poly8x8_t, p8)
+ 
+ #define TEST_VMULL_N \
+   TEST_BINOP_N (vmull_n)
+ 
+ #define TEST_VADDL \
+   TEST_BINOP (vaddl)
+ 
+ #define TEST_VSUBL \
+   TEST_BINOP (vsubl)
+ 
+ #define TEST_VMLAL \
+   TEST_TERNOP (vmlal)
+ 
+ #define TEST_VMLAL_N \
+   TEST_TERNOP_N (vmlal_n)
+ 
+ #define TEST_VMLSL \
+   TEST_TERNOP (vmlsl)
+ 
+ #define TEST_VMLSL_N \
+   TEST_TERNOP_N (vmlsl_n)
+ 
+ #define TEST_VABDL \
+   TEST_BINOP (vabdl)
+ 
+ #define TEST_VABAL \
+   TEST_TERNOP (vabal)
+ 
+ #define TEST_VSUBW \
+   TEST_BINOP_W (vsubw)
+ 
+ #define TEST_VADDW \
+   TEST_BINOP_W (vaddw)
+ 
+ /*
+ ** test_vmovl_s8:
+ **	sxtl2	v0\.8h, v0\.16b
+ **	ret
+ */
+ 
+ /*
+ ** test_vmovl_u8:
+ **	uxtl2	v0\.8h, v0\.16b
+ **	ret
+ */
+ 
+ /*
+ ** test_vmovl_s16:
+ **	sxtl2	v0\.4s, v0\.8h
+ **	ret
+ */
+ 
+ /*
+ ** test_vmovl_u16:
+ **	uxtl2	v0\.4s, v0\.8h
+ **	ret
+ */
+ 
+ /*
+ ** test_vmovl_s32:
+ **	sxtl2	v0\.2d, v0\.4s
+ **	ret
+ */
+ 
+ /*
+ ** test_vmovl_u32:
+ **	uxtl2	v0\.2d, v0\.4s
+ **	ret
+ */
+ 
+ TEST_VMOVL
+ 
+ /*
+ ** test_vmull_s8:
+ **	smull2	v0\.8h, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ **	ret
+ */
+ 
+ /*
+ ** test_vmull_u8:
+ **	umull2	v0\.8h, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ **	ret
+ */
+ 
+ /*
+ ** test_vmull_s16:
+ **	smull2	v0\.4s, (v0\.8h, v1\.8h|v1\.8h, v0\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vmull_u16:
+ **	umull2	v0\.4s, (v0\.8h, v1\.8h|v1\.8h, v0\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vmull_s32:
+ **	smull2	v0\.2d, (v0\.4s, v1\.4s|v1\.4s, v0\.4s)
+ **	ret
+ */
+ 
+ /*
+ ** test_vmull_u32:
+ **	umull2	v0\.2d, (v0\.4s, v1\.4s|v1\.4s, v0\.4s)
+ **	ret
+ */
+ 
+ /*
+ ** test_vmull_p8:
+ **	pmull2	v0\.8h, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ **	ret
+ */
+ 
+ TEST_VMULL
+ 
+ /*
+ ** test_vmull_n_s16:
+ **	smull2	v0\.4s, v0\.8h, v0\.h\[[0-7]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vmull_n_u16:
+ **	umull2	v0\.4s, v0\.8h, v0\.h\[[0-7]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vmull_n_s32:
+ **	smull2	v0\.2d, v0\.4s, v0\.s\[[0-3]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vmull_n_u32:
+ **	umull2	v0\.2d, v0\.4s, v0\.s\[[0-3]\]
+ **	ret
+ */
+ 
+ TEST_VMULL_N
+ 
+ /*
+ ** test_vaddl_s8:
+ **	saddl2	v0\.8h, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ **	ret
+ */
+ 
+ /*
+ ** test_vaddl_u8:
+ **	uaddl2	v0\.8h, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ **	ret
+ */
+ 
+ /*
+ ** test_vaddl_s16:
+ **	saddl2	v0\.4s, (v0\.8h, v1\.8h|v1\.8h, v0\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vaddl_u16:
+ **	uaddl2	v0\.4s, (v0\.8h, v1\.8h|v1\.8h, v0\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vaddl_s32:
+ **	saddl2	v0\.2d, (v0\.4s, v1\.4s|v1\.4s, v0\.4s)
+ **	ret
+ */
+ 
+ /*
+ ** test_vaddl_u32:
+ **	uaddl2	v0\.2d, (v0\.4s, v1\.4s|v1\.4s, v0\.4s)
+ **	ret
+ */
+ 
+ TEST_VADDL
+ 
+ /*
+ ** test_vsubl_s8:
+ **	ssubl2	v0\.8h, v0\.16b, v1\.16b
+ **	ret
+ */
+ 
+ /*
+ ** test_vsubl_u8:
+ **	usubl2	v0\.8h, v0\.16b, v1\.16b
+ **	ret
+ */
+ 
+ /*
+ ** test_vsubl_s16:
+ **	ssubl2	v0\.4s, v0\.8h, v1\.8h
+ **	ret
+ */
+ 
+ /*
+ ** test_vsubl_u16:
+ **	usubl2	v0\.4s, v0\.8h, v1\.8h
+ **	ret
+ */
+ 
+ /*
+ ** test_vsubl_s32:
+ **	ssubl2	v0\.2d, v0\.4s, v1\.4s
+ **	ret
+ */
+ 
+ /*
+ ** test_vsubl_u32:
+ **	usubl2	v0\.2d, v0\.4s, v1\.4s
+ **	ret
+ */
+ 
+ TEST_VSUBL
+ 
+ /*
+ ** test_vabal_s8:
+ **	sabal2	v0\.8h, (v1\.16b, v2\.16b|v2\.16b, v1\.16b)
+ **	ret
+ */
+ 
+ /*
+ ** test_vabal_u8:
+ **	uabal2	v0\.8h, (v1\.16b, v2\.16b|v2\.16b, v1\.16b)
+ **	ret
+ */
+ 
+ /*
+ ** test_vabal_s16:
+ **	sabal2	v0\.4s, (v1\.8h, v2\.8h|v2\.8h, v1\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vabal_u16:
+ **	uabal2	v0\.4s, (v1\.8h, v2\.8h|v2\.8h, v1\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vabal_s32:
+ **	sabal2	v0\.2d, (v1\.4s, v2\.4s|v2\.4s, v1\.4s)
+ **	ret
+ */
+ 
+ /*
+ ** test_vabal_u32:
+ **	uabal2	v0\.2d, (v1\.4s, v2\.4s|v2\.4s, v1\.4s)
+ **	ret
+ */
+ 
+ TEST_VABAL
+ 
+ /*
+ ** test_vsubw_s8:
+ **	ssubw2	v0\.8h, v0\.8h, v1\.16b
+ **	ret
+ */
+ 
+ /*
+ ** test_vsubw_u8:
+ **	usubw2	v0\.8h, v0\.8h, v1\.16b
+ **	ret
+ */
+ 
+ /*
+ ** test_vsubw_s16:
+ **	ssubw2	v0\.4s, v0\.4s, v1\.8h
+ **	ret
+ */
+ 
+ /*
+ ** test_vsubw_u16:
+ **	usubw2	v0\.4s, v0\.4s, v1\.8h
+ **	ret
+ */
+ 
+ /*
+ ** test_vsubw_s32:
+ **	ssubw2	v0\.2d, v0\.2d, v1\.4s
+ **	ret
+ */
+ 
+ /*
+ ** test_vsubw_u32:
+ **	usubw2	v0\.2d, v0\.2d, v1\.4s
+ **	ret
+ */
+ 
+ TEST_VSUBW
+ 
+ /*
+ ** test_vaddw_s8:
+ **	saddw2	v0\.8h, v0\.8h, v1\.16b
+ **	ret
+ */
+ 
+ /*
+ ** test_vaddw_u8:
+ **	uaddw2	v0\.8h, v0\.8h, v1\.16b
+ **	ret
+ */
+ 
+ /*
+ ** test_vaddw_s16:
+ **	saddw2	v0\.4s, v0\.4s, v1\.8h
+ **	ret
+ */
+ 
+ /*
+ ** test_vaddw_u16:
+ **	uaddw2	v0\.4s, v0\.4s, v1\.8h
+ **	ret
+ */
+ 
+ /*
+ ** test_vaddw_s32:
+ **	saddw2	v0\.2d, v0\.2d, v1\.4s
+ **	ret
+ */
+ 
+ /*
+ ** test_vaddw_u32:
+ **	uaddw2	v0\.2d, v0\.2d, v1\.4s
+ **	ret
+ */
+ 
+ TEST_VADDW
+ 
+ /*
+ ** test_vabdl_s8:
+ **	sabdl2	v0\.8h, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ **	ret
+ */
+ 
+ /*
+ ** test_vabdl_u8:
+ **	uabdl2	v0\.8h, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ **	ret
+ */
+ 
+ /*
+ ** test_vabdl_s16:
+ **	sabdl2	v0\.4s, (v0\.8h, v1\.8h|v1\.8h, v0\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vabdl_u16:
+ **	uabdl2	v0\.4s, (v0\.8h, v1\.8h|v1\.8h, v0\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vabdl_s32:
+ **	sabdl2	v0\.2d, (v0\.4s, v1\.4s|v1\.4s, v0\.4s)
+ **	ret
+ */
+ 
+ /*
+ ** test_vabdl_u32:
+ **	uabdl2	v0\.2d, (v0\.4s, v1\.4s|v1\.4s, v0\.4s)
+ **	ret
+ */
+ 
+ TEST_VABDL
+ 
+ /*
+ ** test_vmlal_s8:
+ **	smlal2	v0\.8h, (v1\.16b, v2\.16b|v2\.16b, v1\.16b)
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlal_u8:
+ **	umlal2	v0\.8h, (v1\.16b, v2\.16b|v2\.16b, v1\.16b)
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlal_s16:
+ **	smlal2	v0\.4s, (v1\.8h, v2\.8h|v2\.8h, v1\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlal_u16:
+ **	umlal2	v0\.4s, (v1\.8h, v2\.8h|v2\.8h, v1\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlal_s32:
+ **	smlal2	v0\.2d, (v1\.4s, v2\.4s|v2\.4s, v1\.4s)
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlal_u32:
+ **	umlal2	v0\.2d, (v1\.4s, v2\.4s|v2\.4s, v1\.4s)
+ **	ret
+ */
+ 
+ TEST_VMLAL
+ 
+ /*
+ ** test_vmlal_n_s16:
+ **	smlal2	v0\.4s, v1\.8h, v1\.h\[[0-7]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlal_n_u16:
+ **	umlal2	v0\.4s, v1\.8h, v1\.h\[[0-7]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlal_n_s32:
+ **	smlal2	v0\.2d, v1\.4s, v1\.s\[[0-3]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlal_n_u32:
+ **	umlal2	v0\.2d, v1\.4s, v1\.s\[[0-3]\]
+ **	ret
+ */
+ 
+ TEST_VMLAL_N
+ 
+ /*
+ ** test_vmlsl_s8:
+ **	smlsl2	v0\.8h, v1\.16b, v2\.16b
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlsl_u8:
+ **	umlsl2	v0\.8h, v1\.16b, v2\.16b
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlsl_s16:
+ **	smlsl2	v0\.4s, v1\.8h, v2\.8h
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlsl_u16:
+ **	umlsl2	v0\.4s, v1\.8h, v2\.8h
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlsl_s32:
+ **	smlsl2	v0\.2d, v1\.4s, v2\.4s
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlsl_u32:
+ **	umlsl2	v0\.2d, v1\.4s, v2\.4s
+ **	ret
+ */
+ 
+ TEST_VMLSL
+ 
+ /*
+ ** test_vmlsl_n_s16:
+ **	smlsl2	v0\.4s, v1\.8h, v1\.h\[[0-7]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlsl_n_u16:
+ **	umlsl2	v0\.4s, v1\.8h, v1\.h\[[0-7]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlsl_n_s32:
+ **	smlsl2	v0\.2d, v1\.4s, v1\.s\[[0-3]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vmlsl_n_u32:
+ **	umlsl2	v0\.2d, v1\.4s, v1\.s\[[0-3]\]
+ **	ret
+ */
+ 
+ TEST_VMLSL_N
+ 
+ /*
+ ** test_vqdmull_s16:
+ **	sqdmull2	v0\.4s, (v0\.8h, v1\.8h|v1\.8h, v0\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vqdmull_s32:
+ **	sqdmull2	v0\.2d, (v0\.4s, v1\.4s|v1\.4s, v0\.4s)
+ **	ret
+ */
+ 
+ TEST_VQDMULL
+ 
+ /*
+ ** test_vqdmull_n_s16:
+ **	sqdmull2	v0\.4s, v0\.8h, v0\.h\[[0-7]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vqdmull_n_s32:
+ **	sqdmull2	v0\.2d, v0\.4s, v0\.s\[[0-3]\]
+ **	ret
+ */
+ 
+ TEST_VQDMULL_N
+ 
+ /*
+ ** test_vqdmlal_s16:
+ **	sqdmlal2	v0\.4s, (v1\.8h, v2\.8h|v2\.8h, v1\.8h)
+ **	ret
+ */
+ 
+ /*
+ ** test_vqdmlal_s32:
+ **	sqdmlal2	v0\.2d, (v1\.4s, v2\.4s|v2\.4s, v1\.4s)
+ **	ret
+ */
+ 
+ TEST_VQMLAL
+ 
+ /*
+ ** test_vqdmlal_n_s16:
+ **	sqdmlal2	v0\.4s, v1\.8h, v1\.h\[[0-7]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vqdmlal_n_s32:
+ **	sqdmlal2	v0\.2d, v1\.4s, v1\.s\[[0-3]\]
+ **	ret
+ */
+ 
+ TEST_VQMLAL_N
+ 
+ /*
+ ** test_vqdmlsl_s16:
+ **	sqdmlsl2	v0\.4s, v1\.8h, v2\.8h
+ **	ret
+ */
+ 
+ /*
+ ** test_vqdmlsl_s32:
+ **	sqdmlsl2	v0\.2d, v1\.4s, v2\.4s
+ **	ret
+ */
+ 
+ TEST_VQMLSL
+ 
+ /*
+ ** test_vqdmlsl_n_s16:
+ **	sqdmlsl2	v0\.4s, v1\.8h, v1\.h\[[0-7]\]
+ **	ret
+ */
+ 
+ /*
+ ** test_vqdmlsl_n_s32:
+ **	sqdmlsl2	v0\.2d, v1\.4s, v1\.s\[[0-3]\]
+ **	ret
+ */
+ 
+ TEST_VQMLSL_N
+ 
+ /* { dg-final { check-function-bodies "**" ""} } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_2.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_2.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,88 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O -march=armv9-a+bf16" } */
+ 
+ /* We should not use the highpart instruction unless doing so would avoid
+    data movement instructions.  That is, unless at least one argument is a
+    reference to the highpart of a non-constant vector.  */
+ 
+ #define TEST_UN_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF) \
+   RETTYPE test_##FN##_## SUFF ()		     \
+   {                                                  \
+     INTYPE a = vdupq_n_##SUFF (0x1A);		     \
+     return FN##_##SUFF (vget_high_##SUFF (a));	     \
+   }
+ 
+ #define TEST_BIN_W_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF) \
+   RETTYPE test_##FN##_##SUFF (RETTYPE a)		\
+   {                                                     \
+     INTYPE b = vdupq_n_##SUFF (0x1A);			\
+     return FN##_##SUFF (a, vget_high_##SUFF (b));	\
+   }
+ 
+ #define TEST_BIN_N_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)     \
+   RETTYPE test_##FN##_##SUFF (INTYPE c)			    \
+   {							    \
+     INTYPE a = vdupq_n_##SUFF (0x1A);			    \
+     return FN##_##SUFF (vget_high_##SUFF (a), c[1]);	    \
+   }
+ 
+ #define TEST_TERN_N_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)      \
+   RETTYPE test_##FN##_##SUFF (RETTYPE a)		      \
+   {                                                           \
+     INTYPE b = vdupq_n_##SUFF (0x1A);			      \
+     return FN##_##SUFF (a, vget_high_##SUFF (b), b[1]);      \
+   }
+ 
+ #define TEST_BIN_HIGHPARTS(FN, RETTYPE, INTYPE, H_INTYPE, SUFF) \
+   RETTYPE test_##FN##_## SUFF (H_INTYPE b)			\
+   {                                                             \
+     INTYPE a = vdupq_n_##SUFF (0x1A);				\
+     return FN##_##SUFF (vget_high_##SUFF (a), b);		\
+   }
+ 
+ #define TEST_TERN_HIGHPARTS(FN, RETTYPE, INTYPE, H_INTYPE, SUFF) \
+   RETTYPE test_##FN##_##SUFF (RETTYPE a, H_INTYPE b)		 \
+   {                                                              \
+     INTYPE c = vdupq_n_##SUFF (0x1A);				 \
+     return FN##_##SUFF (a, vget_high_##SUFF (c), b);		 \
+   }
+ 
+ #include "fold_to_highpart_1.c"
+ 
+ 
+ /* { dg-final { scan-assembler-not {uxtl2\t} } } */
+ /* { dg-final { scan-assembler-not {sxtl2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {umull2\t} } } */
+ /* { dg-final { scan-assembler-not {smull2\t} } } */
+ /* { dg-final { scan-assembler-not {pmull2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {uaddl2\t} } } */
+ /* { dg-final { scan-assembler-not {saddl2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {usubl2\t} } } */
+ /* { dg-final { scan-assembler-not {ssubl2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {uabal2\t} } } */
+ /* { dg-final { scan-assembler-not {sabal2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {uabdl2\t} } } */
+ /* { dg-final { scan-assembler-not {sabdl2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {usubw2\t} } } */
+ /* { dg-final { scan-assembler-not {ssubw2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {uaddw2\t} } } */
+ /* { dg-final { scan-assembler-not {saddw2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {umlal2\t} } } */
+ /* { dg-final { scan-assembler-not {smlal2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {umlsl2\t} } } */
+ /* { dg-final { scan-assembler-not {smlsl2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {sqdmull2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {sqdmlal2\t} } } */
+ 
+ /* { dg-final { scan-assembler-not {sqdmlsl2\t} } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_3.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_3.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_3.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,83 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O" } */
+ 
+ /* PR117850 */
+ 
+ /* We should use the highpart instruction where doing so would avoid data
+    movement instructions.  We avoid a DUP here after extending the
+    VECTOR_CSTs to 128-bits.  */
+ 
+ #define TEST_UN_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)
+ #define TEST_BIN_W_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)
+ #define TEST_BIN_N_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)
+ #define TEST_TERN_N_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)
+ 
+ #define TEST_BIN_HIGHPART_A1(FN, RETTYPE, INTYPE, SUFF) \
+   RETTYPE test_a1_##FN##_##SUFF (INTYPE a)		\
+   {                                                     \
+     INTYPE b = vdupq_n_##SUFF (0x1A);			\
+     return FN##_##SUFF (vget_high_##SUFF (a),		\
+ 			vget_high_##SUFF (b));		\
+   }
+ 
+ #define TEST_BIN_HIGHPART_A2(FN, RETTYPE, INTYPE, SUFF) \
+   RETTYPE test_a2_##FN##_##SUFF (INTYPE a)		\
+   {                                                     \
+     INTYPE b = vdupq_n_##SUFF (0x1A);			\
+     return FN##_##SUFF (vget_high_##SUFF (b),		\
+ 			vget_high_##SUFF (a));		\
+   }
+ 
+ #define TEST_TERN_HIGHPART_A1(FN, RETTYPE, INTYPE, SUFF)    \
+   RETTYPE test_a1_##FN##_##SUFF (RETTYPE a, INTYPE b)	    \
+   {                                                         \
+     INTYPE c = vdupq_n_##SUFF (0x1A);			    \
+     return FN##_##SUFF (a, vget_high_##SUFF (b),	    \
+ 			vget_high_##SUFF (c));		    \
+   }
+ 
+ #define TEST_TERN_HIGHPART_A2(FN, RETTYPE, INTYPE, SUFF)    \
+   RETTYPE test_a2_##FN##_##SUFF (RETTYPE a, INTYPE b)	    \
+   {                                                         \
+     INTYPE c = vdupq_n_##SUFF (0x1A);			    \
+     return FN##_##SUFF (a, vget_high_##SUFF (c),	    \
+ 			vget_high_##SUFF (b));		    \
+   }
+ 
+ #define TEST_BIN_HIGHPARTS(FN, RETTYPE, INTYPE, H_INTYPE, SUFF) \
+   TEST_BIN_HIGHPART_A1 (FN, RETTYPE, INTYPE, SUFF)              \
+   TEST_BIN_HIGHPART_A2 (FN, RETTYPE, INTYPE, SUFF)
+ 
+ #define TEST_TERN_HIGHPARTS(FN, RETTYPE, INTYPE, H_INTYPE, SUFF) \
+   TEST_TERN_HIGHPART_A1 (FN, RETTYPE, INTYPE, SUFF)              \
+   TEST_TERN_HIGHPART_A2 (FN, RETTYPE, INTYPE, SUFF)
+ 
+ 
+ #include "fold_to_highpart_1.c"
+ 
+ /* { dg-final { scan-assembler-not {dup\t} } } */
+ 
+ /* { dg-final { scan-assembler-times {smull2\t} 6} } */
+ /* { dg-final { scan-assembler-times {umull2\t} 6} } */
+ /* { dg-final { scan-assembler-times {pmull2\t} 2} } */
+ 
+ /* { dg-final { scan-assembler-times {saddl2\t} 6} } */
+ /* { dg-final { scan-assembler-times {uaddl2\t} 6} } */
+ 
+ /* { dg-final { scan-assembler-times {ssubl2\t} 6} } */
+ /* { dg-final { scan-assembler-times {usubl2\t} 6} } */
+ 
+ /* { dg-final { scan-assembler-times {sabdl2\t} 6} } */
+ /* { dg-final { scan-assembler-times {uabdl2\t} 6} } */
+ 
+ /* { dg-final { scan-assembler-times {smlal2\t} 6} } */
+ /* { dg-final { scan-assembler-times {umlal2\t} 6} } */
+ 
+ /* { dg-final { scan-assembler-times {smlsl2\t} 6} } */
+ /* { dg-final { scan-assembler-times {umlsl2\t} 6} } */
+ 
+ /* { dg-final { scan-assembler-times {sqdmull2\t} 4} } */
+ 
+ /* { dg-final { scan-assembler-times {sqdmlal2\t} 4} } */
+ 
+ /* { dg-final { scan-assembler-times {sqdmlsl2\t} 4} } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_4.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_4.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,38 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target aarch64_little_endian } */
+ /* { dg-options "-O -fdump-tree-optimized" } */
+ 
+ #include "arm_neon.h"
+ 
+ #define VEC_CST_u8  0x0102030405060708
+ #define VEC_CST_u16 0x0001000200030004
+ #define VEC_CST_u32 0x0000000100000002
+ 
+ /* Extend the 64b VECTOR_CST to the type required by the hi builtin.  */
+ 
+ uint16x8_t
+ test_u8 (uint8x16_t a)
+ {
+   const uint8x8_t b = vcreate_u8 (VEC_CST_u8);
+   return vmull_u8 (vget_high_u8 (a), b);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\{ 8, 7, 6, 5, 4, 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, 1 \}" 1 "optimized" } } */
+ 
+ uint32x4_t
+ test_u16 (uint16x8_t a)
+ {
+   const uint16x4_t b = vcreate_u16 (VEC_CST_u16);
+   return vmull_u16 (vget_high_u16 (a), b);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\{ 4, 3, 2, 1, 4, 3, 2, 1 \}" 1 "optimized" } } */
+ 
+ uint64x2_t
+ test_u32 (uint32x4_t a)
+ {
+   const uint32x2_t b = vcreate_u32 (VEC_CST_u32);
+   return vmull_u32 (vget_high_u32 (a), b);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\{ 2, 1, 2, 1 \}" 1 "optimized" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,93 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O -march=armv9-a+bf16" } */
+ 
+ /* Test that we can still fold when the base type of the vector who's
+    highpart we are referring to is incompatible with that of the hi
+    builtin.
+ 
+    Use float64x2_t as it is never INTYPE.  */
+ 
+ #define TEST_UN_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF) \
+   RETTYPE test_##FN##_##SUFF (float64x2_t a)	     \
+   {                                                  \
+     INTYPE x = vreinterpretq_##SUFF##_f64 (a);	     \
+     return FN##_##SUFF(vget_high_##SUFF (x));	     \
+   }
+ 
+ #define TEST_BIN_W_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)       \
+   RETTYPE test_##FN##_##SUFF (RETTYPE a, float64x2_t b)	      \
+   {                                                           \
+     INTYPE x = vreinterpretq_##SUFF##_f64 (b);		      \
+     return FN##_##SUFF (a, vget_high_##SUFF (x));	      \
+   }
+ 
+ #define TEST_BIN_N_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)    \
+   RETTYPE test_##FN##_##SUFF (float64x2_t a)		   \
+   {                                                        \
+     INTYPE x = vreinterpretq_##SUFF##_f64 (a);		   \
+     return FN##_##SUFF (vget_high_##SUFF (x), x[1]);	   \
+   }
+ 
+ #define TEST_TERN_N_HIGHPARTS(FN, RETTYPE, INTYPE, SUFF)         \
+   RETTYPE test_##FN##_##SUFF (RETTYPE a, float64x2_t b)		 \
+   {                                                              \
+     INTYPE x = vreinterpretq_##SUFF##_f64 (b);			 \
+     return FN##_##SUFF (a, vget_high_##SUFF (x), x[1]);	 \
+   }
+ 
+ #define TEST_BIN_HIGHPARTS(FN, RETTYPE, INTYPE, H_INTYPE, SUFF)   \
+   RETTYPE test_##FN##_##SUFF (float64x2_t a, float64x2_t b)	  \
+   {                                                               \
+     INTYPE x = vreinterpretq_##SUFF##_f64 (a);			  \
+     INTYPE y = vreinterpretq_##SUFF##_f64 (b);			  \
+     return FN##_##SUFF (vget_high_##SUFF (x),			  \
+ 			vget_high_##SUFF (y));			  \
+   }
+ 
+ #define TEST_TERN_HIGHPARTS(FN, RETTYPE, INTYPE, H_INTYPE, SUFF)	\
+   RETTYPE test_##FN##_##SUFF (RETTYPE a, float64x2_t b, float64x2_t c)	\
+   {									\
+     INTYPE x = vreinterpretq_##SUFF##_f64 (b);				\
+     INTYPE y = vreinterpretq_##SUFF##_f64 (c);				\
+     return FN##_##SUFF (a, vget_high_## SUFF (x),                       \
+ 			vget_high_## SUFF (y));				\
+   }
+ 
+ #include "fold_to_highpart_1.c"
+ 
+ /* { dg-final { scan-assembler-times {sxtl2\t} 3} } */
+ /* { dg-final { scan-assembler-times {uxtl2\t} 3} } */
+ 
+ /* { dg-final { scan-assembler-times {smull2\t} 5} } */
+ /* { dg-final { scan-assembler-times {umull2\t} 5} } */
+ /* { dg-final { scan-assembler-times {pmull2\t} 1} } */
+ 
+ /* { dg-final { scan-assembler-times {saddl2\t} 3} } */
+ /* { dg-final { scan-assembler-times {uaddl2\t} 3} } */
+ 
+ /* { dg-final { scan-assembler-times {ssubl2\t} 3} } */
+ /* { dg-final { scan-assembler-times {usubl2\t} 3} } */
+ 
+ /* { dg-final { scan-assembler-times {sabdl2\t} 3} } */
+ /* { dg-final { scan-assembler-times {uabdl2\t} 3} } */
+ 
+ /* { dg-final { scan-assembler-times {saddw2\t} 3} } */
+ /* { dg-final { scan-assembler-times {uaddw2\t} 3} } */
+ 
+ /* { dg-final { scan-assembler-times {ssubw2\t} 3} } */
+ /* { dg-final { scan-assembler-times {usubw2\t} 3} } */
+ 
+ /* { dg-final { scan-assembler-times {sabdl2\t} 3} } */
+ /* { dg-final { scan-assembler-times {uabdl2\t} 3} } */
+ 
+ /* { dg-final { scan-assembler-times {smlal2\t} 5} } */
+ /* { dg-final { scan-assembler-times {umlal2\t} 5} } */
+ 
+ /* { dg-final { scan-assembler-times {smlsl2\t} 5} } */
+ /* { dg-final { scan-assembler-times {umlsl2\t} 5} } */
+ 
+ /* { dg-final { scan-assembler-times {sqdmull2\t} 4} } */
+ 
+ /* { dg-final { scan-assembler-times {sqdmlal2\t} 4} } */
+ 
+ /* { dg-final { scan-assembler-times {sqdmlsl2\t} 4} } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,37 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target aarch64_little_endian } */
+ /* { dg-options "-O2 -march=armv8-a+sve" } */
+ 
+ #include <arm_neon_sve_bridge.h>
+ 
+ typedef int16_t int16x16_t __attribute__ ((vector_size (32)));
+ 
+ /* Edge cases where we don't/can't fold, reject these gracefully.  */
+ 
+ int8x16_t z;
+ 
+ int16x8_t
+ test_addressable ()
+ {
+   return vmovl_s8 (vget_high_s8 (z));
+ }
+ 
+ int16x8_t
+ test_scalable_type (svint8_t scalable)
+ {
+   return vmovl_s8 (vget_high_s8 (svget_neonq_s8 (scalable)));
+ }
+ 
+ int16x8_t
+ test_scalar_type (__int128_t foo)
+ {
+   return vmovl_s8 (vget_high_s8 (vreinterpretq_s8_p128 (foo)));
+ }
+ 
+ int32x4_t
+ test_256b_type (int16x16_t foo)
+ {
+   return vmovl_s16 ((int16x4_t) { foo[4], foo[5], foo[6], foo[7] });
+ }
+ 
+ /* { dg-final { scan-assembler-not {sxtl2\t} } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/vabal_combine.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/vabal_combine.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/simd/vabal_combine.c	Sun Jul 13 22:32:38 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/simd/vabal_combine.c	Thu Jan  1 00:00:00 1970
***************
*** 1,72 ****
- /* { dg-do compile } */
- /* { dg-options "-O" } */
- /* { dg-final { check-function-bodies "**" "" "" } } */
- 
- #include <arm_neon.h>
- 
- /*
- ** test_vabal_s8:
- **      sabal2	v0.8h, v2.16b, v1.16b
- **      ret
- */
- int16x8_t
- test_vabal_s8 (int16x8_t sadv, int8x16_t pv, int8x16_t sv)
- {
-   return vabal_s8 (sadv, vget_high_s8 (pv), vget_high_s8 (sv));
- }
- 
- /*
- ** test_vabal_u8:
- **      uabal2	v0.8h, v2.16b, v1.16b
- **      ret
- */
- uint16x8_t
- test_vabal_u8 (uint16x8_t sadv, uint8x16_t pv, uint8x16_t sv)
- {
-   return vabal_u8 (sadv, vget_high_u8 (pv), vget_high_u8 (sv));
- }
- 
- /*
- ** test_vabal_s16:
- **      sabal2	v0.4s, v2.8h, v1.8h
- **      ret
- */
- int32x4_t
- test_vabal_s16 (int32x4_t sadv, int16x8_t pv, int16x8_t sv)
- {
-   return vabal_s16 (sadv, vget_high_s16 (pv), vget_high_s16 (sv));
- }
- 
- /*
- ** test_vabal_u16:
- **      uabal2	v0.4s, v2.8h, v1.8h
- **      ret
- */
- uint32x4_t
- test_vabal_u16 (uint32x4_t sadv, uint16x8_t pv, uint16x8_t sv)
- {
-   return vabal_u16 (sadv, vget_high_u16 (pv), vget_high_u16 (sv));
- }
- 
- /*
- ** test_vabal_s32:
- **      sabal2	v0.2d, v2.4s, v1.4s
- **      ret
- */
- int64x2_t
- test_vabal_s32 (int64x2_t sadv, int32x4_t pv, int32x4_t sv)
- {
-   return vabal_s32 (sadv, vget_high_s32 (pv), vget_high_s32 (sv));
- }
- 
- /*
- ** test_vabal_u32:
- **      uabal2	v0.2d, v2.4s, v1.4s
- **      ret
- */
- uint64x2_t
- test_vabal_u32 (uint64x2_t sadv, uint32x4_t pv, uint32x4_t sv)
- {
-   return vabal_u32 (sadv, vget_high_u32 (pv), vget_high_u32 (sv));
- }
- 
--- 0 ----
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,97 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amax_z0_z0_z4:
+ **	famax	{z0\.h - z1\.h}, {z0\.h - z1\.h}, {z4\.h - z5\.h}
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z4, svfloat16x2_t, z0,
+ 	 svamax_f16_x2 (z0, z4),
+ 	 svamax (z0, z4))
+ 
+ /*
+ ** amax_z0_z4_z0:
+ **	famax	{z0\.h - z1\.h}, {z0\.h - z1\.h}, {z4\.h - z5\.h}
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z0, svfloat16x2_t, z0,
+ 	 svamax_f16_x2 (z4, z0),
+ 	 svamax (z4, z0))
+ 
+ /*
+ ** amax_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z28\.h - z29\.h}
+ ** |
+ **	famax	[^\n]+, {z28\.h - z29\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z28, svfloat16x2_t, z0,
+ 	 svamax_f16_x2 (z4, z28),
+ 	 svamax (z4, z28))
+ 
+ /*
+ ** amax_z18_z18_z4:
+ **	famax	{z18\.h - z19\.h}, {z18\.h - z19\.h}, {z4\.h - z5\.h}
+ **	ret
+ */
+ TEST_XN (amax_z18_z18_z4, svfloat16x2_t, z18,
+ 	 svamax_f16_x2 (z18, z4),
+ 	 svamax (z18, z4))
+ 
+ /*
+ ** amax_z23_z23_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z18\.h - z19\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amax_z23_z23_z18, svfloat16x2_t, z23,
+ 	 svamax_f16_x2 (z23, z18),
+ 	 svamax (z23, z18))
+ 
+ /*
+ ** amax_z28_z28_z0:
+ **	famax	{z28\.h - z29\.h}, {z28\.h - z29\.h}, {z0\.h - z1\.h}
+ **	ret
+ */
+ TEST_XN (amax_z28_z28_z0, svfloat16x2_t, z28,
+ 	 svamax_f16_x2 (z28, z0),
+ 	 svamax (z28, z0))
+ 
+ /*
+ ** amax_z0_z0_z18:
+ **	famax	{z0\.h - z1\.h}, {z0\.h - z1\.h}, {z18\.h - z19\.h}
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z18, svfloat16x2_t, z0,
+ 	 svamax_f16_x2 (z0, z18),
+ 	 svamax (z0, z18))
+ 
+ /*
+ ** amax_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	{z4\.h - z5\.h}, {z4\.h - z5\.h}, [^\n]+
+ ** |
+ **	famax	{z4\.h - z5\.h}, {z4\.h - z5\.h}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z4_z4_z23, svfloat16x2_t, z4,
+ 	 svamax_f16_x2 (z4, z23),
+ 	 svamax (z4, z23))
+ 
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,128 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amax_z0_z0_z4:
+ **	famax	{z0\.h - z3\.h}, {z0\.h - z3\.h}, {z4\.h - z7\.h}
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z4, svfloat16x4_t, z0,
+ 	 svamax_f16_x4 (z0, z4),
+ 	 svamax (z0, z4))
+ 
+ /*
+ ** amax_z0_z4_z0:
+ **	famax	{z0\.h - z3\.h}, {z0\.h - z3\.h}, {z4\.h - z7\.h}
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z0, svfloat16x4_t, z0,
+ 	 svamax_f16_x4 (z4, z0),
+ 	 svamax (z4, z0))
+ 
+ /*
+ ** amax_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z28\.h - z31\.h}
+ ** |
+ **	famax	[^\n]+, {z28\.h - z31\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z28, svfloat16x4_t, z0,
+ 	 svamax_f16_x4 (z4, z28),
+ 	 svamax (z4, z28))
+ 
+ /*
+ ** amax_z18_z18_z4:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z4\.h - z7\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amax_z18_z18_z4, svfloat16x4_t, z18,
+ 	 svamax_f16_x4 (z18, z4),
+ 	 svamax (z18, z4))
+ 
+ /*
+ ** amax_z23_z23_z28:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z28\.h - z31\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amax_z23_z23_z28, svfloat16x4_t, z23,
+ 	 svamax_f16_x4 (z23, z28),
+ 	 svamax (z23, z28))
+ 
+ /*
+ ** amax_z28_z28_z0:
+ **	famax	{z28\.h - z31\.h}, {z28\.h - z31\.h}, {z0\.h - z3\.h}
+ **	ret
+ */
+ TEST_XN (amax_z28_z28_z0, svfloat16x4_t, z28,
+ 	 svamax_f16_x4 (z28, z0),
+ 	 svamax (z28, z0))
+ 
+ /*
+ ** amax_z0_z0_z18:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	{z0\.h - z3\.h}, {z0\.h - z3\.h}, [^\n]+
+ ** |
+ **	famax	{z0\.h - z3\.h}, {z0\.h - z3\.h}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z18, svfloat16x4_t, z0,
+ 	 svamax_f16_x4 (z0, z18),
+ 	 svamax (z0, z18))
+ 
+ /*
+ ** amax_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	{z4\.h - z7\.h}, {z4\.h - z7\.h}, [^\n]+
+ ** |
+ **	famax	{z4\.h - z7\.h}, {z4\.h - z7\.h}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z4_z4_z23, svfloat16x4_t, z4,
+ 	 svamax_f16_x4 (z4, z23),
+ 	 svamax (z4, z23))
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amax_z0_z0_z4:
+ **	famax	{z0\.s - z1\.s}, {z0\.s - z1\.s}, {z4\.s - z5\.s}
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z4, svfloat32x2_t, z0,
+ 	 svamax_f32_x2 (z0, z4),
+ 	 svamax (z0, z4))
+ 
+ /*
+ ** amax_z0_z4_z0:
+ **	famax	{z0\.s - z1\.s}, {z0\.s - z1\.s}, {z4\.s - z5\.s}
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z0, svfloat32x2_t, z0,
+ 	 svamax_f32_x2 (z4, z0),
+ 	 svamax (z4, z0))
+ 
+ /*
+ ** amax_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z28\.s - z29\.s}
+ ** |
+ **	famax	[^\n]+, {z28\.s - z29\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z28, svfloat32x2_t, z0,
+ 	 svamax_f32_x2 (z4, z28),
+ 	 svamax (z4, z28))
+ 
+ /*
+ ** amax_z18_z18_z4:
+ **	famax	{z18\.s - z19\.s}, {z18\.s - z19\.s}, {z4\.s - z5\.s}
+ **	ret
+ */
+ TEST_XN (amax_z18_z18_z4, svfloat32x2_t, z18,
+ 	 svamax_f32_x2 (z18, z4),
+ 	 svamax (z18, z4))
+ 
+ /*
+ ** amax_z23_z23_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z18\.s - z19\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amax_z23_z23_z18, svfloat32x2_t, z23,
+ 	 svamax_f32_x2 (z23, z18),
+ 	 svamax (z23, z18))
+ 
+ /*
+ ** amax_z28_z28_z0:
+ **	famax	{z28\.s - z29\.s}, {z28\.s - z29\.s}, {z0\.s - z1\.s}
+ **	ret
+ */
+ TEST_XN (amax_z28_z28_z0, svfloat32x2_t, z28,
+ 	 svamax_f32_x2 (z28, z0),
+ 	 svamax (z28, z0))
+ 
+ /*
+ ** amax_z0_z0_z18:
+ **	famax	{z0\.s - z1\.s}, {z0\.s - z1\.s}, {z18\.s - z19\.s}
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z18, svfloat32x2_t, z0,
+ 	 svamax_f32_x2 (z0, z18),
+ 	 svamax (z0, z18))
+ 
+ /*
+ ** amax_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	{z4\.s - z5\.s}, {z4\.s - z5\.s}, [^\n]+
+ ** |
+ **	famax	{z4\.s - z5\.s}, {z4\.s - z5\.s}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z4_z4_z23, svfloat32x2_t, z4,
+ 	 svamax_f32_x2 (z4, z23),
+ 	 svamax (z4, z23))
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,129 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amax_z0_z0_z4:
+ **	famax	{z0\.s - z3\.s}, {z0\.s - z3\.s}, {z4\.s - z7\.s}
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z4, svfloat32x4_t, z0,
+ 	 svamax_f32_x4 (z0, z4),
+ 	 svamax (z0, z4))
+ 
+ /*
+ ** amax_z0_z4_z0:
+ **	famax	{z0\.s - z3\.s}, {z0\.s - z3\.s}, {z4\.s - z7\.s}
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z0, svfloat32x4_t, z0,
+ 	 svamax_f32_x4 (z4, z0),
+ 	 svamax (z4, z0))
+ 
+ /*
+ ** amax_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z28\.s - z31\.s}
+ ** |
+ **	famax	[^\n]+, {z28\.s - z31\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z28, svfloat32x4_t, z0,
+ 	 svamax_f32_x4 (z4, z28),
+ 	 svamax (z4, z28))
+ 
+ /*
+ ** amax_z18_z18_z4:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z4\.s - z7\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amax_z18_z18_z4, svfloat32x4_t, z18,
+ 	 svamax_f32_x4 (z18, z4),
+ 	 svamax (z18, z4))
+ 
+ /*
+ ** amax_z23_z23_z28:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z28\.s - z31\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amax_z23_z23_z28, svfloat32x4_t, z23,
+ 	 svamax_f32_x4 (z23, z28),
+ 	 svamax (z23, z28))
+ 
+ /*
+ ** amax_z28_z28_z0:
+ **	famax	{z28\.s - z31\.s}, {z28\.s - z31\.s}, {z0\.s - z3\.s}
+ **	ret
+ */
+ TEST_XN (amax_z28_z28_z0, svfloat32x4_t, z28,
+ 	 svamax_f32_x4 (z28, z0),
+ 	 svamax (z28, z0))
+ 
+ /*
+ ** amax_z0_z0_z18:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	{z0\.s - z3\.s}, {z0\.s - z3\.s}, [^\n]+
+ ** |
+ **	famax	{z0\.s - z3\.s}, {z0\.s - z3\.s}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z18, svfloat32x4_t, z0,
+ 	 svamax_f32_x4 (z0, z18),
+ 	 svamax (z0, z18))
+ 
+ /*
+ ** amax_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	{z4\.s - z7\.s}, {z4\.s - z7\.s}, [^\n]+
+ ** |
+ **	famax	{z4\.s - z7\.s}, {z4\.s - z7\.s}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z4_z4_z23, svfloat32x4_t, z4,
+ 	 svamax_f32_x4 (z4, z23),
+ 	 svamax (z4, z23))
+ 
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amax_z0_z0_z4:
+ **	famax	{z0\.d - z1\.d}, {z0\.d - z1\.d}, {z4\.d - z5\.d}
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z4, svfloat64x2_t, z0,
+ 	 svamax_f64_x2 (z0, z4),
+ 	 svamax (z0, z4))
+ 
+ /*
+ ** amax_z0_z4_z0:
+ **	famax	{z0\.d - z1\.d}, {z0\.d - z1\.d}, {z4\.d - z5\.d}
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z0, svfloat64x2_t, z0,
+ 	 svamax_f64_x2 (z4, z0),
+ 	 svamax (z4, z0))
+ 
+ /*
+ ** amax_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z28\.d - z29\.d}
+ ** |
+ **	famax	[^\n]+, {z28\.d - z29\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z28, svfloat64x2_t, z0,
+ 	 svamax_f64_x2 (z4, z28),
+ 	 svamax (z4, z28))
+ 
+ /*
+ ** amax_z18_z18_z4:
+ **	famax	{z18\.d - z19\.d}, {z18\.d - z19\.d}, {z4\.d - z5\.d}
+ **	ret
+ */
+ TEST_XN (amax_z18_z18_z4, svfloat64x2_t, z18,
+ 	 svamax_f64_x2 (z18, z4),
+ 	 svamax (z18, z4))
+ 
+ /*
+ ** amax_z23_z23_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z18\.d - z19\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amax_z23_z23_z18, svfloat64x2_t, z23,
+ 	 svamax_f64_x2 (z23, z18),
+ 	 svamax (z23, z18))
+ 
+ /*
+ ** amax_z28_z28_z0:
+ **	famax	{z28\.d - z29\.d}, {z28\.d - z29\.d}, {z0\.d - z1\.d}
+ **	ret
+ */
+ TEST_XN (amax_z28_z28_z0, svfloat64x2_t, z28,
+ 	 svamax_f64_x2 (z28, z0),
+ 	 svamax (z28, z0))
+ 
+ /*
+ ** amax_z0_z0_z18:
+ **	famax	{z0\.d - z1\.d}, {z0\.d - z1\.d}, {z18\.d - z19\.d}
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z18, svfloat64x2_t, z0,
+ 	 svamax_f64_x2 (z0, z18),
+ 	 svamax (z0, z18))
+ 
+ /*
+ ** amax_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	{z4\.d - z5\.d}, {z4\.d - z5\.d}, [^\n]+
+ ** |
+ **	famax	{z4\.d - z5\.d}, {z4\.d - z5\.d}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z4_z4_z23, svfloat64x2_t, z4,
+ 	 svamax_f64_x2 (z4, z23),
+ 	 svamax (z4, z23))
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,128 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amax_z0_z0_z4:
+ **	famax	{z0\.d - z3\.d}, {z0\.d - z3\.d}, {z4\.d - z7\.d}
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z4, svfloat64x4_t, z0,
+ 	 svamax_f64_x4 (z0, z4),
+ 	 svamax (z0, z4))
+ 
+ /*
+ ** amax_z0_z4_z0:
+ **	famax	{z0\.d - z3\.d}, {z0\.d - z3\.d}, {z4\.d - z7\.d}
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z0, svfloat64x4_t, z0,
+ 	 svamax_f64_x4 (z4, z0),
+ 	 svamax (z4, z0))
+ 
+ /*
+ ** amax_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z28\.d - z31\.d}
+ ** |
+ **	famax	[^\n]+, {z28\.d - z31\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z0_z4_z28, svfloat64x4_t, z0,
+ 	 svamax_f64_x4 (z4, z28),
+ 	 svamax (z4, z28))
+ 
+ /*
+ ** amax_z18_z18_z4:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z4\.d - z7\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amax_z18_z18_z4, svfloat64x4_t, z18,
+ 	 svamax_f64_x4 (z18, z4),
+ 	 svamax (z18, z4))
+ 
+ /*
+ ** amax_z23_z23_z28:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	[^\n]+, {z28\.d - z31\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amax_z23_z23_z28, svfloat64x4_t, z23,
+ 	 svamax_f64_x4 (z23, z28),
+ 	 svamax (z23, z28))
+ 
+ /*
+ ** amax_z28_z28_z0:
+ **	famax	{z28\.d - z31\.d}, {z28\.d - z31\.d}, {z0\.d - z3\.d}
+ **	ret
+ */
+ TEST_XN (amax_z28_z28_z0, svfloat64x4_t, z28,
+ 	 svamax_f64_x4 (z28, z0),
+ 	 svamax (z28, z0))
+ 
+ /*
+ ** amax_z0_z0_z18:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	{z0\.d - z3\.d}, {z0\.d - z3\.d}, [^\n]+
+ ** |
+ **	famax	{z0\.d - z3\.d}, {z0\.d - z3\.d}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z0_z0_z18, svfloat64x4_t, z0,
+ 	 svamax_f64_x4 (z0, z18),
+ 	 svamax (z0, z18))
+ 
+ /*
+ ** amax_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famax	{z4\.d - z7\.d}, {z4\.d - z7\.d}, [^\n]+
+ ** |
+ **	famax	{z4\.d - z7\.d}, {z4\.d - z7\.d}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amax_z4_z4_z23, svfloat64x4_t, z4,
+ 	 svamax_f64_x4 (z4, z23),
+ 	 svamax (z4, z23))
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amin_z0_z0_z4:
+ **	famin	{z0\.h - z1\.h}, {z0\.h - z1\.h}, {z4\.h - z5\.h}
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z4, svfloat16x2_t, z0,
+ 	 svamin_f16_x2 (z0, z4),
+ 	 svamin (z0, z4))
+ 
+ /*
+ ** amin_z0_z4_z0:
+ **	famin	{z0\.h - z1\.h}, {z0\.h - z1\.h}, {z4\.h - z5\.h}
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z0, svfloat16x2_t, z0,
+ 	 svamin_f16_x2 (z4, z0),
+ 	 svamin (z4, z0))
+ 
+ /*
+ ** amin_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z28\.h - z29\.h}
+ ** |
+ **	famin	[^\n]+, {z28\.h - z29\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z28, svfloat16x2_t, z0,
+ 	 svamin_f16_x2 (z4, z28),
+ 	 svamin (z4, z28))
+ 
+ /*
+ ** amin_z18_z18_z4:
+ **	famin	{z18\.h - z19\.h}, {z18\.h - z19\.h}, {z4\.h - z5\.h}
+ **	ret
+ */
+ TEST_XN (amin_z18_z18_z4, svfloat16x2_t, z18,
+ 	 svamin_f16_x2 (z18, z4),
+ 	 svamin (z18, z4))
+ 
+ /*
+ ** amin_z23_z23_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z18\.h - z19\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amin_z23_z23_z18, svfloat16x2_t, z23,
+ 	 svamin_f16_x2 (z23, z18),
+ 	 svamin (z23, z18))
+ 
+ /*
+ ** amin_z28_z28_z0:
+ **	famin	{z28\.h - z29\.h}, {z28\.h - z29\.h}, {z0\.h - z1\.h}
+ **	ret
+ */
+ TEST_XN (amin_z28_z28_z0, svfloat16x2_t, z28,
+ 	 svamin_f16_x2 (z28, z0),
+ 	 svamin (z28, z0))
+ 
+ /*
+ ** amin_z0_z0_z18:
+ **	famin	{z0\.h - z1\.h}, {z0\.h - z1\.h}, {z18\.h - z19\.h}
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z18, svfloat16x2_t, z0,
+ 	 svamin_f16_x2 (z0, z18),
+ 	 svamin (z0, z18))
+ 
+ /*
+ ** amin_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	{z4\.h - z5\.h}, {z4\.h - z5\.h}, [^\n]+
+ ** |
+ **	famin	{z4\.h - z5\.h}, {z4\.h - z5\.h}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z4_z4_z23, svfloat16x2_t, z4,
+ 	 svamin_f16_x2 (z4, z23),
+ 	 svamin (z4, z23))
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,128 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amin_z0_z0_z4:
+ **	famin	{z0\.h - z3\.h}, {z0\.h - z3\.h}, {z4\.h - z7\.h}
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z4, svfloat16x4_t, z0,
+ 	 svamin_f16_x4 (z0, z4),
+ 	 svamin (z0, z4))
+ 
+ /*
+ ** amin_z0_z4_z0:
+ **	famin	{z0\.h - z3\.h}, {z0\.h - z3\.h}, {z4\.h - z7\.h}
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z0, svfloat16x4_t, z0,
+ 	 svamin_f16_x4 (z4, z0),
+ 	 svamin (z4, z0))
+ 
+ /*
+ ** amin_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z28\.h - z31\.h}
+ ** |
+ **	famin	[^\n]+, {z28\.h - z31\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z28, svfloat16x4_t, z0,
+ 	 svamin_f16_x4 (z4, z28),
+ 	 svamin (z4, z28))
+ 
+ /*
+ ** amin_z18_z18_z4:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z4\.h - z7\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amin_z18_z18_z4, svfloat16x4_t, z18,
+ 	 svamin_f16_x4 (z18, z4),
+ 	 svamin (z18, z4))
+ 
+ /*
+ ** amin_z23_z23_z28:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z28\.h - z31\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amin_z23_z23_z28, svfloat16x4_t, z23,
+ 	 svamin_f16_x4 (z23, z28),
+ 	 svamin (z23, z28))
+ 
+ /*
+ ** amin_z28_z28_z0:
+ **	famin	{z28\.h - z31\.h}, {z28\.h - z31\.h}, {z0\.h - z3\.h}
+ **	ret
+ */
+ TEST_XN (amin_z28_z28_z0, svfloat16x4_t, z28,
+ 	 svamin_f16_x4 (z28, z0),
+ 	 svamin (z28, z0))
+ 
+ /*
+ ** amin_z0_z0_z18:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	{z0\.h - z3\.h}, {z0\.h - z3\.h}, [^\n]+
+ ** |
+ **	famin	{z0\.h - z3\.h}, {z0\.h - z3\.h}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z18, svfloat16x4_t, z0,
+ 	 svamin_f16_x4 (z0, z18),
+ 	 svamin (z0, z18))
+ 
+ /*
+ ** amin_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	{z4\.h - z7\.h}, {z4\.h - z7\.h}, [^\n]+
+ ** |
+ **	famin	{z4\.h - z7\.h}, {z4\.h - z7\.h}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z4_z4_z23, svfloat16x4_t, z4,
+ 	 svamin_f16_x4 (z4, z23),
+ 	 svamin (z4, z23))
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amin_z0_z0_z4:
+ **	famin	{z0\.s - z1\.s}, {z0\.s - z1\.s}, {z4\.s - z5\.s}
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z4, svfloat32x2_t, z0,
+  svamin_f32_x2 (z0, z4),
+  svamin (z0, z4))
+ 
+ /*
+ ** amin_z0_z4_z0:
+ **	famin	{z0\.s - z1\.s}, {z0\.s - z1\.s}, {z4\.s - z5\.s}
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z0, svfloat32x2_t, z0,
+  svamin_f32_x2 (z4, z0),
+  svamin (z4, z0))
+ 
+ /*
+ ** amin_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z28\.s - z29\.s}
+ ** |
+ **	famin	[^\n]+, {z28\.s - z29\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z28, svfloat32x2_t, z0,
+  svamin_f32_x2 (z4, z28),
+  svamin (z4, z28))
+ 
+ /*
+ ** amin_z18_z18_z4:
+ **	famin	{z18\.s - z19\.s}, {z18\.s - z19\.s}, {z4\.s - z5\.s}
+ **	ret
+ */
+ TEST_XN (amin_z18_z18_z4, svfloat32x2_t, z18,
+  svamin_f32_x2 (z18, z4),
+  svamin (z18, z4))
+ 
+ /*
+ ** amin_z23_z23_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z18\.s - z19\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amin_z23_z23_z18, svfloat32x2_t, z23,
+  svamin_f32_x2 (z23, z18),
+  svamin (z23, z18))
+ 
+ /*
+ ** amin_z28_z28_z0:
+ **	famin	{z28\.s - z29\.s}, {z28\.s - z29\.s}, {z0\.s - z1\.s}
+ **	ret
+ */
+ TEST_XN (amin_z28_z28_z0, svfloat32x2_t, z28,
+  svamin_f32_x2 (z28, z0),
+  svamin (z28, z0))
+ 
+ /*
+ ** amin_z0_z0_z18:
+ **	famin	{z0\.s - z1\.s}, {z0\.s - z1\.s}, {z18\.s - z19\.s}
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z18, svfloat32x2_t, z0,
+  svamin_f32_x2 (z0, z18),
+  svamin (z0, z18))
+ 
+ /*
+ ** amin_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	{z4\.s - z5\.s}, {z4\.s - z5\.s}, [^\n]+
+ ** |
+ **	famin	{z4\.s - z5\.s}, {z4\.s - z5\.s}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z4_z4_z23, svfloat32x2_t, z4,
+  svamin_f32_x2 (z4, z23),
+  svamin (z4, z23))
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,128 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amin_z0_z0_z4:
+ **	famin	{z0\.s - z3\.s}, {z0\.s - z3\.s}, {z4\.s - z7\.s}
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z4, svfloat32x4_t, z0,
+ 	 svamin_f32_x4 (z0, z4),
+ 	 svamin (z0, z4))
+ 
+ /*
+ ** amin_z0_z4_z0:
+ **	famin	{z0\.s - z3\.s}, {z0\.s - z3\.s}, {z4\.s - z7\.s}
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z0, svfloat32x4_t, z0,
+ 	 svamin_f32_x4 (z4, z0),
+ 	 svamin (z4, z0))
+ 
+ /*
+ ** amin_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z28\.s - z31\.s}
+ ** |
+ **	famin	[^\n]+, {z28\.s - z31\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z28, svfloat32x4_t, z0,
+ 	 svamin_f32_x4 (z4, z28),
+ 	 svamin (z4, z28))
+ 
+ /*
+ ** amin_z18_z18_z4:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z4\.s - z7\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amin_z18_z18_z4, svfloat32x4_t, z18,
+ 	 svamin_f32_x4 (z18, z4),
+ 	 svamin (z18, z4))
+ 
+ /*
+ ** amin_z23_z23_z28:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z28\.s - z31\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amin_z23_z23_z28, svfloat32x4_t, z23,
+ 	 svamin_f32_x4 (z23, z28),
+ 	 svamin (z23, z28))
+ 
+ /*
+ ** amin_z28_z28_z0:
+ **	famin	{z28\.s - z31\.s}, {z28\.s - z31\.s}, {z0\.s - z3\.s}
+ **	ret
+ */
+ TEST_XN (amin_z28_z28_z0, svfloat32x4_t, z28,
+ 	 svamin_f32_x4 (z28, z0),
+ 	 svamin (z28, z0))
+ 
+ /*
+ ** amin_z0_z0_z18:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	{z0\.s - z3\.s}, {z0\.s - z3\.s}, [^\n]+
+ ** |
+ **	famin	{z0\.s - z3\.s}, {z0\.s - z3\.s}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z18, svfloat32x4_t, z0,
+ 	 svamin_f32_x4 (z0, z18),
+ 	 svamin (z0, z18))
+ 
+ /*
+ ** amin_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	{z4\.s - z7\.s}, {z4\.s - z7\.s}, [^\n]+
+ ** |
+ **	famin	{z4\.s - z7\.s}, {z4\.s - z7\.s}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z4_z4_z23, svfloat32x4_t, z4,
+ 	 svamin_f32_x4 (z4, z23),
+ 	 svamin (z4, z23))
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amin_z0_z0_z4:
+ **	famin	{z0\.d - z1\.d}, {z0\.d - z1\.d}, {z4\.d - z5\.d}
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z4, svfloat64x2_t, z0,
+ 	 svamin_f64_x2 (z0, z4),
+ 	 svamin (z0, z4))
+ 
+ /*
+ ** amin_z0_z4_z0:
+ **	famin	{z0\.d - z1\.d}, {z0\.d - z1\.d}, {z4\.d - z5\.d}
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z0, svfloat64x2_t, z0,
+ 	 svamin_f64_x2 (z4, z0),
+ 	 svamin (z4, z0))
+ 
+ /*
+ ** amin_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z28\.d - z29\.d}
+ ** |
+ **	famin	[^\n]+, {z28\.d - z29\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z28, svfloat64x2_t, z0,
+ 	 svamin_f64_x2 (z4, z28),
+ 	 svamin (z4, z28))
+ 
+ /*
+ ** amin_z18_z18_z4:
+ **	famin	{z18\.d - z19\.d}, {z18\.d - z19\.d}, {z4\.d - z5\.d}
+ **	ret
+ */
+ TEST_XN (amin_z18_z18_z4, svfloat64x2_t, z18,
+ 	 svamin_f64_x2 (z18, z4),
+ 	 svamin (z18, z4))
+ 
+ /*
+ ** amin_z23_z23_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z18\.d - z19\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amin_z23_z23_z18, svfloat64x2_t, z23,
+ 	 svamin_f64_x2 (z23, z18),
+ 	 svamin (z23, z18))
+ 
+ /*
+ ** amin_z28_z28_z0:
+ **	famin	{z28\.d - z29\.d}, {z28\.d - z29\.d}, {z0\.d - z1\.d}
+ **	ret
+ */
+ TEST_XN (amin_z28_z28_z0, svfloat64x2_t, z28,
+ 	 svamin_f64_x2 (z28, z0),
+ 	 svamin (z28, z0))
+ 
+ /*
+ ** amin_z0_z0_z18:
+ **	famin	{z0\.d - z1\.d}, {z0\.d - z1\.d}, {z18\.d - z19\.d}
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z18, svfloat64x2_t, z0,
+ 	 svamin_f64_x2 (z0, z18),
+ 	 svamin (z0, z18))
+ 
+ /*
+ ** amin_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	{z4\.d - z5\.d}, {z4\.d - z5\.d}, [^\n]+
+ ** |
+ **	famin	{z4\.d - z5\.d}, {z4\.d - z5\.d}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z4_z4_z23, svfloat64x2_t, z4,
+ 	 svamin_f64_x2 (z4, z23),
+ 	 svamin (z4, z23))
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c	Sun Jul 20 22:32:22 2025
***************
*** 0 ****
--- 1,128 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+faminmax"
+ 
+ /*
+ ** amin_z0_z0_z4:
+ **	famin	{z0\.d - z3\.d}, {z0\.d - z3\.d}, {z4\.d - z7\.d}
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z4, svfloat64x4_t, z0,
+ 	 svamin_f64_x4 (z0, z4),
+ 	 svamin (z0, z4))
+ 
+ /*
+ ** amin_z0_z4_z0:
+ **	famin	{z0\.d - z3\.d}, {z0\.d - z3\.d}, {z4\.d - z7\.d}
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z0, svfloat64x4_t, z0,
+ 	 svamin_f64_x4 (z4, z0),
+ 	 svamin (z4, z0))
+ 
+ /*
+ ** amin_z0_z4_z28:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z28\.d - z31\.d}
+ ** |
+ **	famin	[^\n]+, {z28\.d - z31\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z0_z4_z28, svfloat64x4_t, z0,
+ 	 svamin_f64_x4 (z4, z28),
+ 	 svamin (z4, z28))
+ 
+ /*
+ ** amin_z18_z18_z4:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z4\.d - z7\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amin_z18_z18_z4, svfloat64x4_t, z18,
+ 	 svamin_f64_x4 (z18, z4),
+ 	 svamin (z18, z4))
+ 
+ /*
+ ** amin_z23_z23_z28:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	[^\n]+, {z28\.d - z31\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (amin_z23_z23_z28, svfloat64x4_t, z23,
+ 	 svamin_f64_x4 (z23, z28),
+ 	 svamin (z23, z28))
+ 
+ /*
+ ** amin_z28_z28_z0:
+ **	famin	{z28\.d - z31\.d}, {z28\.d - z31\.d}, {z0\.d - z3\.d}
+ **	ret
+ */
+ TEST_XN (amin_z28_z28_z0, svfloat64x4_t, z28,
+ 	 svamin_f64_x4 (z28, z0),
+ 	 svamin (z28, z0))
+ 
+ /*
+ ** amin_z0_z0_z18:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	{z0\.d - z3\.d}, {z0\.d - z3\.d}, [^\n]+
+ ** |
+ **	famin	{z0\.d - z3\.d}, {z0\.d - z3\.d}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z0_z0_z18, svfloat64x4_t, z0,
+ 	 svamin_f64_x4 (z0, z18),
+ 	 svamin (z0, z18))
+ 
+ /*
+ ** amin_z4_z4_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	famin	{z4\.d - z7\.d}, {z4\.d - z7\.d}, [^\n]+
+ ** |
+ **	famin	{z4\.d - z7\.d}, {z4\.d - z7\.d}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN (amin_z4_z4_z23, svfloat64x4_t, z4,
+ 	 svamin_f64_x4 (z4, z23),
+ 	 svamin (z4, z23))
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_combines_1.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_combines_1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_combines_1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_combines_1.c	Sun Jul 20 22:32:23 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ftree-vectorize -moverride=sve_width=2048 --param=aarch64-autovec-preference=sve-only -fno-trapping-math" } */
+ 
+ #include "unpacked_fcm_1.c"
+ 
+ /* { dg-final { scan-assembler-times {\tld1w\tz[0-9]+\.d} 32 } } */
+ /* { dg-final { scan-assembler-times {\tld1h\tz[0-9]+\.s} 32 } } */
+ /* { dg-final { scan-assembler-times {\tld1h\tz[0-9]+\.d} 32 } } */
+ 
+ /* Drop a PTRUE predicated AND with the loop mask and comparison result in
+    favour of predicating the comparison with the loop mask.  */
+ /* { dg-final { scan-assembler-not {\tand\t} } } */
+ 
+ /* Similarly, for codes that are implemented via an inversion, prefer
+    NOT (predicated with the loop mask) over BIC+PTRUE.  */
+ /* { dg-final { scan-assembler-not {\tbic\t} } } */
+ /* { dg-final { scan-assembler-times {\tnot\t} 15 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_combines_2.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_combines_2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_combines_2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sve/unpacked_fcm_combines_2.c	Sun Jul 20 22:32:23 2025
***************
*** 0 ****
--- 1,35 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ftree-vectorize -moverride=sve_width=2048 --param=aarch64-autovec-preference=sve-only -fno-trapping-math" } */
+ 
+ #include <stdint.h>
+ 
+ /* Ensure that we still emit NOR here, rather than two NOTs.  */
+ 
+ #define TEST_FCM_NOR(TYPE0, TYPE1, CMP, COUNT)		\
+   void							\
+   f_##TYPE0##_##TYPE1##_##CMP (TYPE0 *__restrict out,	\
+ 			       TYPE1 *__restrict a,	\
+ 			       TYPE1 *__restrict b,	\
+ 			       TYPE1 *__restrict c)	\
+   {								    \
+     for (unsigned int i = 0; i < COUNT; i++)			    \
+       out[i] = !(CMP (a[i], c[i]) | CMP (b[i], c[i])) ? 3 : out[i]; \
+   }
+ 
+ #define GT(A, B) ((A) > (B))
+ 
+ TEST_FCM_NOR (uint64_t, float, GT, 32)
+ TEST_FCM_NOR (uint64_t, _Float16, GT, 32)
+ TEST_FCM_NOR (uint32_t, _Float16, GT, 64)
+ 
+ TEST_FCM_NOR (uint64_t, float, __builtin_isunordered, 32)
+ TEST_FCM_NOR (uint64_t, _Float16, __builtin_isunordered, 32)
+ TEST_FCM_NOR (uint32_t, _Float16, __builtin_isunordered, 64)
+ 
+ /* { dg-final { scan-assembler-times {\tld1w\tz[0-9]+\.d} 6 } } */
+ /* { dg-final { scan-assembler-times {\tld1h\tz[0-9]+\.s} 6 } } */
+ /* { dg-final { scan-assembler-times {\tld1h\tz[0-9]+\.d} 6 } } */
+ 
+ /* { dg-final { scan-assembler-not {\tbic\t} } } */
+ /* { dg-final { scan-assembler-not {\tnot\t} } } */
+ /* { dg-final { scan-assembler-times {\tnor\tp[0-9]+\.b, p[0-9]+/z, p[0-9]+\.b, p[0-9]+\.b\n} 6 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sve2/eon_bsl2n.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sve2/eon_bsl2n.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sve2/eon_bsl2n.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sve2/eon_bsl2n.c	Sun Jul 20 22:32:23 2025
***************
*** 0 ****
--- 1,52 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #include <arm_neon.h>
+ #include <arm_sve.h>
+ 
+ #define EON(x, y)   (~((x) ^ (y)))
+ 
+ /*
+ ** eon_d:
+ ** 	bsl2n	z0.d, z0.d, z0.d, z1.d
+ ** 	ret
+ */
+ uint32x2_t eon_d(uint32x2_t a, uint32x2_t b) { return EON(a, b); }
+ 
+ /*
+ ** eon_d_mp:
+ **	movprfx	z0, z1
+ ** 	bsl2n	z0.d, z0.d, z1.d, z2.d
+ ** 	ret
+ */
+ uint32x2_t eon_d_mp(uint32x2_t c, uint32x2_t a, uint32x2_t b) { return EON(a, b); }
+ 
+ /*
+ ** eon_q:
+ ** 	bsl2n	z0.d, z0.d, z0.d, z1.d
+ ** 	ret
+ */
+ uint64x2_t eon_q(uint64x2_t a, uint64x2_t b) { return EON(a, b); }
+ 
+ /*
+ ** eon_q_mp:
+ **	movprfx	z0, z1
+ ** 	bsl2n	z0.d, z0.d, z1.d, z2.d
+ ** 	ret
+ */
+ uint64x2_t eon_q_mp(uint64x2_t c, uint64x2_t a, uint64x2_t b) { return EON(a, b); }
+ 
+ /*
+ ** eon_z:
+ ** 	bsl2n	z0.d, z0.d, z0.d, z1.d
+ ** 	ret
+ */
+ svuint64_t eon_z(svuint64_t a, svuint64_t b) { return EON(a, b); }
+ 
+ /*
+ ** eon_z_mp:
+ **	movprfx	z0, z1
+ ** 	bsl2n	z0.d, z0.d, z1.d, z2.d
+ ** 	ret
+ */
+ svuint64_t eon_z_mp(svuint64_t c, svuint64_t a, svuint64_t b) { return EON(a, b); }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sve2/nbsl_nor_nand_neon.c gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sve2/nbsl_nor_nand_neon.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/aarch64/sve2/nbsl_nor_nand_neon.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/aarch64/sve2/nbsl_nor_nand_neon.c	Sun Jul 20 22:32:23 2025
***************
*** 0 ****
--- 1,68 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #include <arm_neon.h>
+ 
+ #define NAND(x, y)  (~((x) & (y)))
+ #define NOR(x, y)   (~((x) | (y)))
+ 
+ /*
+ ** nand_d:
+ ** 	nbsl	z0.d, z0.d, z1.d, z1.d
+ ** 	ret
+ */
+ uint32x2_t nand_d(uint32x2_t a, uint32x2_t b) { return NAND(a, b); }
+ 
+ /*
+ ** nand_d_mp:
+ ** 	movprfx	z0, z1
+ ** 	nbsl	z0.d, z0.d, z2.d, z2.d
+ ** 	ret
+ */
+ uint32x2_t nand_d_mp(uint32x2_t c, uint32x2_t a, uint32x2_t b) { return NAND(a, b); }
+ 
+ /*
+ ** nor_d:
+ ** 	nbsl	z0.d, z0.d, z1.d, z0.d
+ ** 	ret
+ */
+ uint32x2_t nor_d(uint32x2_t a, uint32x2_t b) { return NOR(a, b); }
+ 
+ /*
+ ** nor_d_mp:
+ ** 	movprfx	z0, z1
+ ** 	nbsl	z0.d, z0.d, z2.d, z1.d
+ ** 	ret
+ */
+ uint32x2_t nor_d_mp(uint32x2_t c, uint32x2_t a, uint32x2_t b) { return NOR(a, b); }
+ 
+ /*
+ ** nand_q:
+ ** 	nbsl	z0.d, z0.d, z1.d, z1.d
+ ** 	ret
+ */
+ uint64x2_t nand_q(uint64x2_t a, uint64x2_t b) { return NAND(a, b); }
+ 
+ /*
+ ** nand_q_mp:
+ ** 	movprfx	z0, z1
+ ** 	nbsl	z0.d, z0.d, z2.d, z2.d
+ ** 	ret
+ */
+ uint32x4_t nand_q_mp(uint32x4_t c, uint32x4_t a, uint32x4_t b) { return NAND(a, b); }
+ 
+ /*
+ ** nor_q:
+ ** 	nbsl	z0.d, z0.d, z1.d, z0.d
+ ** 	ret
+ */
+ uint64x2_t nor_q(uint64x2_t a, uint64x2_t b) { return NOR(a, b); }
+ 
+ /*
+ ** nor_q_mp:
+ ** 	movprfx	z0, z1
+ ** 	nbsl	z0.d, z0.d, z2.d, z1.d
+ ** 	ret
+ */
+ uint32x4_t nor_q_mp(uint32x4_t c, uint32x4_t a, uint32x4_t b) { return NOR(a, b); }
+ 
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/arm/pr121065.c gcc-16-20250720/gcc/testsuite/gcc.target/arm/pr121065.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/arm/pr121065.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/arm/pr121065.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mcpu=cortex-m55" } */
+ 
+ _Accum sa;
+ char c;
+ 
+ void
+ div_csa ()
+ {
+   c /= sa;
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c	Sun Jul 13 22:32:39 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c	Sun Jul 20 22:32:24 2025
***************
*** 1,6 ****
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowd2ps
  void test_amx_avx512_cvtrowd2ps();
--- 1,6 ----
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowd2ps
  void test_amx_avx512_cvtrowd2ps();
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c	Sun Jul 13 22:32:39 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c	Sun Jul 20 22:32:24 2025
***************
*** 1,6 ****
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowps2bf16
  void test_amx_avx512_cvtrowps2bf16();
--- 1,6 ----
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowps2bf16
  void test_amx_avx512_cvtrowps2bf16();
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c	Sun Jul 13 22:32:39 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c	Sun Jul 20 22:32:24 2025
***************
*** 1,6 ****
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowps2ph
  void test_amx_avx512_cvtrowps2ph();
--- 1,6 ----
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowps2ph
  void test_amx_avx512_cvtrowps2ph();
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c	Sun Jul 13 22:32:39 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c	Sun Jul 20 22:32:24 2025
***************
*** 1,6 ****
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_movrow
  void test_amx_avx512_movrow();
--- 1,6 ----
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_movrow
  void test_amx_avx512_movrow();
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr104447.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr104447.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr104447.c	Sun Jul 13 22:32:39 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr104447.c	Sun Jul 20 22:32:24 2025
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-require-profiling "-pg" } */
  /* { dg-options "-O2 -pg" } */
+ /* { dg-additional-options "-mfentry -fno-pic" { target *-*-gnu* } } */
  
  int
  bar (int x)
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr113122-3.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr113122-3.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr113122-3.c	Sun Jul 13 22:32:39 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr113122-3.c	Sun Jul 20 22:32:24 2025
***************
*** 2,7 ****
--- 2,8 ----
  /* { dg-do assemble { target *-*-linux* } } */
  /* { dg-require-effective-target masm_intel } */
  /* { dg-options "-fprofile -O2 -masm=intel" } */
+ /* { dg-additional-options "-mfentry -fno-pic" { target *-*-gnu* } } */
  
  void
  func (void)
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr119386-1.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr119386-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr119386-1.c	Sun Jul 13 22:32:39 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr119386-1.c	Sun Jul 20 22:32:24 2025
***************
*** 1,7 ****
  /* PR target/119386 */
  /* { dg-do compile { target *-*-linux* } } */
  /* { dg-options "-O2 -fpic -pg" } */
! /* { dg-final { scan-assembler "call\[ \t\]+mcount@PLT" } } */
  
  int
  main ()
--- 1,9 ----
  /* PR target/119386 */
  /* { dg-do compile { target *-*-linux* } } */
  /* { dg-options "-O2 -fpic -pg" } */
! /* { dg-additional-options "-mfentry" { target { *-*-gnu* && { ! ia32 } } } } */
! /* { dg-final { scan-assembler "call\[ \t\]+mcount@PLT" { target ia32 } } } */
! /* { dg-final { scan-assembler "call\[ \t\]+__fentry__@PLT" { target { *-*-gnu* && { ! ia32 } } } } } */
  
  int
  main ()
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr119386-2.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr119386-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr119386-2.c	Sun Jul 13 22:32:39 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr119386-2.c	Sun Jul 20 22:32:24 2025
***************
*** 1,7 ****
  /* PR target/119386 */
  /* { dg-do compile { target *-*-linux* } } */
  /* { dg-options "-O2 -fpic -fno-plt -pg" } */
! /* { dg-final { scan-assembler "call\[ \t\]+\\*mcount@GOTPCREL\\(" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler "call\[ \t\]+\\*mcount@GOT\\(" { target ia32 } } } */
  
  
--- 1,8 ----
  /* PR target/119386 */
  /* { dg-do compile { target *-*-linux* } } */
  /* { dg-options "-O2 -fpic -fno-plt -pg" } */
! /* { dg-additional-options "-mfentry" { target { *-*-gnu* && { ! ia32 } } } } */
! /* { dg-final { scan-assembler "call\[ \t\]+\\*__fentry__@GOTPCREL" { target { *-*-gnu* && { ! ia32 } } } } } */
  /* { dg-final { scan-assembler "call\[ \t\]+\\*mcount@GOT\\(" { target ia32 } } } */
  
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-1a.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-1a.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-1a.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,4 ----
+ /* { dg-do compile { target fpic } } */
+ /* { dg-require-profiling "-pg" } */
+ /* { dg-options "-O2 -pg -mno-fentry -fno-pic" } */
+ /* { dg-message "'-pg' without '-mfentry' may be unreliable with shrink wrapping" "" { target *-*-* } 0 } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-1b.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-1b.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-1b.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,4 ----
+ /* { dg-do compile { target { fpic && { ! ia32 } } } } */
+ /* { dg-require-profiling "-pg" } */
+ /* { dg-options "-O2 -pg -mno-fentry -fpic" } */
+ /* { dg-message "'-pg' without '-mfentry' may be unreliable with shrink wrapping" "" { target *-*-* } 0 } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-1c.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-1c.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-1c.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-1c.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,3 ----
+ /* { dg-do compile { target { fpic && ia32 } } } */
+ /* { dg-require-profiling "-pg" } */
+ /* { dg-options "-O2 -pg -mno-fentry -fpic" } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-1d.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-1d.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-1d.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-1d.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,3 ----
+ /* { dg-do compile { target { fpic && ia32 } } } */
+ /* { dg-require-profiling "-pg" } */
+ /* { dg-options "-O2 -pg -mno-fentry -fno-shrink-wrap -fno-pic" } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-2a.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-2a.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-2a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-2a.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile { target fentry } } */
+ /* { dg-options "-O2 -pg" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */
+ 
+ /*
+ **f2:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	call	__fentry__
+ **...
+ */
+ 
+ extern void f1 (void);
+ 
+ void
+ f2 (int count)
+ {
+   for (int i = 0; i < count; ++i)
+     f1 ();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-2b.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-2b.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr120881-2b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr120881-2b.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-rtl-pro_and_epilogue -march=x86-64" } */
+ /* { dg-final { scan-rtl-dump "Now spread 1 times" "pro_and_epilogue" } } */
+ 
+ #include "pr120881-2a.c"
+ 
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121015.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121015.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121015.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121015.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3" } */
+ 
+ extern union {
+   int i;
+   float f;
+ } int_as_float_u;
+ 
+ extern int render_result_from_bake_w;
+ extern int render_result_from_bake_h_seed_pass;
+ extern float *render_result_from_bake_h_primitive;
+ extern float *render_result_from_bake_h_seed;
+ 
+ float
+ int_as_float(int i)
+ {
+   int_as_float_u.i = i;
+   return int_as_float_u.f;
+ }
+ 
+ void
+ render_result_from_bake_h(int tx)
+ {
+   while (render_result_from_bake_w) {
+     for (; tx < render_result_from_bake_w; tx++)
+       render_result_from_bake_h_primitive[1] =
+           render_result_from_bake_h_primitive[2] = int_as_float(-1);
+     if (render_result_from_bake_h_seed_pass) {
+       *render_result_from_bake_h_seed = 0;
+     }
+   }
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-1.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-1.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3" } */
+ 
+ extern union {
+   int i;
+   float f;
+ } int_as_float_u;
+ 
+ extern int render_result_from_bake_w;
+ extern int render_result_from_bake_h_seed_pass;
+ extern float *render_result_from_bake_h_primitive;
+ extern float *render_result_from_bake_h_seed;
+ 
+ float
+ int_as_float(int i)
+ {
+   int_as_float_u.i = i;
+   return int_as_float_u.f;
+ }
+ 
+ void
+ render_result_from_bake_h(int tx)
+ {
+   while (render_result_from_bake_w) {
+     for (; tx < render_result_from_bake_w; tx++)
+       render_result_from_bake_h_primitive[1] =
+           render_result_from_bake_h_primitive[2] = int_as_float(-1);
+     if (render_result_from_bake_h_seed_pass) {
+       *render_result_from_bake_h_seed = 0;
+     }
+   }
+ }
+ 
+ /* { dg-final { scan-assembler-times "movq\[ \\t\]+\\\$-1, %r\[a-z0-9\]+" 2 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-2.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-2.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Og -fno-dce -mtune=generic" } */
+ 
+ typedef int __attribute__((__vector_size__ (4))) S;
+ extern void bar (S);
+ 
+ void
+ foo ()
+ {
+   bar ((S){-1});
+ }
+ 
+ /* { dg-final { scan-assembler-times "movl\[ \\t\]+\\\$-1, \\(%esp\\)" 1 { target ia32 } } } */
+ /* { dg-final { scan-assembler-times "movl\[ \\t\]+\\\$-1, %edi" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-3a.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-3a.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-3a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-3a.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile { target fpic } } */
+ /* { dg-options "-O2 -march=x86-64 -fpic" } */
+ 
+ typedef struct {
+   struct {
+     unsigned short lo4;
+     unsigned short lo3;
+     unsigned short lo2;
+     unsigned short lo1;
+   } i;
+ } BID_BINARY80LDOUBLE;
+ extern BID_BINARY80LDOUBLE __bid64_to_binary80_x_out;
+ void
+ __bid64_to_binary80 (void)
+ {
+   __bid64_to_binary80_x_out.i.lo4
+     = __bid64_to_binary80_x_out.i.lo3
+     = __bid64_to_binary80_x_out.i.lo2
+     = __bid64_to_binary80_x_out.i.lo1 = 65535;
+ }
+ 
+ /* { dg-final { scan-assembler-times "movq\[ \\t\]+%xmm\[0-9\]+, " 1 { target ia32 } } } */
+ /* { dg-final { scan-assembler-times "movq\[ \\t\]+\\\$-1, \\(%(e|r)\[a-z0-9\]+\\)" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-3b.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-3b.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-3b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-3b.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile { target { fpic && lp64 } } } */
+ /* { dg-options "-O2 -march=x86-64 -fno-pic -mcmodel=large" } */
+ 
+ #include "pr121062-3a.c"
+ 
+ /* { dg-final { scan-assembler-times "movq\[ \\t\]+\\\$-1, \\(%r\[a-z0-9\]+\\)" 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-3c.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-3c.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-3c.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-3c.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile { target { fpic && lp64 } } } */
+ /* { dg-options "-O2 -march=x86-64 -fpic -mcmodel=large" } */
+ 
+ #include "pr121062-3a.c"
+ 
+ /* { dg-final { scan-assembler-times "movq\[ \\t\]+\\\$-1, \\(%r\[a-z0-9\]+\\)" 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-4.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-4.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64" } */
+ 
+ typedef long long int __attribute__((__vector_size__ (8))) S;
+ 
+ void
+ foo (S *c)
+ {
+   *c = (S){0x12345678badbeefULL};
+ }
+ 
+ 
+ /* { dg-final { scan-assembler-times "movq\[ \\t\]+%xmm\[0-9\]+, " 1 { target ia32 } } } */
+ /* { dg-final { scan-assembler-times "movabsq\[ \\t\]+\\\$81985529250168559, %r\[a-z0-9\]+" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-5.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-5.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-5.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64" } */
+ 
+ typedef int __attribute__((__vector_size__ (4))) S;
+ 
+ void
+ foo (S *c)
+ {
+   *c = (S){0x12345678};
+ }
+ 
+ 
+ /* { dg-final { scan-assembler-times "movl\[ \\t\]+\\\$305419896, \\(%(e|r)\[a-z0-9\]+\\)" 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-6.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-6.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-6.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Og -fno-dce -mtune=generic" } */
+ 
+ typedef int __attribute__((__vector_size__ (8))) S;
+ 
+ void
+ foo (S *c)
+ {
+   *c = (S){0x12345678,0xbadbeefULL};
+ }
+ 
+ /* { dg-final { scan-assembler-times "movq\[ \\t\]+%xmm\[0-9\]+, " 1 { target ia32 } } } */
+ /* { dg-final { scan-assembler-times "movabsq\[ \\t\]+\\\$841538639400031864, %r\[a-z0-9\]+" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-7.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-7.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr121062-7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr121062-7.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64" } */
+ 
+ typedef __bf16 __attribute__((__vector_size__ (4))) S;
+ 
+ void
+ foo (S *c)
+ {
+   *c = (S){-0.1, 2.1};
+ }
+ 
+ 
+ /* { dg-final { scan-assembler-times "movl\[ \\t\]+\\\$1074183629, \\(%(e|r)\[a-z0-9\]+\\)" 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr82699-1.c gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr82699-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/i386/pr82699-1.c	Sun Jul 13 22:32:39 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/i386/pr82699-1.c	Sun Jul 20 22:32:24 2025
***************
*** 1,5 ****
  /* { dg-do compile { target *-*-linux* } } */
! /* { dg-options "-O2 -fno-pic -fcf-protection -pg -fasynchronous-unwind-tables" } */
  /* { dg-final { scan-assembler-times {\t\.cfi_startproc\n\tendbr} 1 } } */
  
  extern int bar (int);
--- 1,5 ----
  /* { dg-do compile { target *-*-linux* } } */
! /* { dg-options "-O2 -mfentry -fno-pic -fcf-protection -pg -fasynchronous-unwind-tables" } */
  /* { dg-final { scan-assembler-times {\t\.cfi_startproc\n\tendbr} 1 } } */
  
  extern int bar (int);
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/loongarch/pr121064.c gcc-16-20250720/gcc/testsuite/gcc.target/loongarch/pr121064.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/loongarch/pr121064.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/loongarch/pr121064.c	Sun Jul 20 22:32:24 2025
***************
*** 0 ****
--- 1,38 ----
+ /* { dg-require-effective-target loongarch_sx_hw } */
+ /* { dg-do run } */
+ /* { dg-options "-march=loongarch64 -mfpu=64 -mlsx -O3" } */
+ 
+ typedef __INT32_TYPE__ int32_t;
+ typedef unsigned __INT32_TYPE__ uint32_t;
+ 
+ __attribute__ ((noipa)) static int32_t
+ long_filter_ehigh_3830_1 (int32_t *buffer, int length)
+ {
+   int i, j;
+   int32_t dotprod = 0;
+   int32_t delay[4] = { 0 };
+   uint32_t coeffs[4] = { 0 };
+ 
+   for (i = 0; i < length; i++)
+     {
+       dotprod = 0;
+       for (j = 3; j >= 0; j--)
+         {
+           dotprod += delay[j] * coeffs[j];
+           coeffs[j] += ((delay[j] >> 31) | 1);
+         }
+       for (j = 3; j > 0; j--)
+         delay[j] = delay[j - 1];
+       delay[0] = buffer[i];
+     }
+ 
+   return dotprod;
+ }
+ 
+ int
+ main ()
+ {
+   int32_t buffer[] = { -1, 1 };
+   if (long_filter_ehigh_3830_1 (buffer, 2) != -1)
+     __builtin_trap ();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/pru/pragma-ctable_entry-2.c gcc-16-20250720/gcc/testsuite/gcc.target/pru/pragma-ctable_entry-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/pru/pragma-ctable_entry-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/pru/pragma-ctable_entry-2.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,22 ----
+ /* Test for base addresses with bit 31 set (PR121124).  */
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-O1" } */
+ 
+ /* -O1 in the options is significant.  Without it LBCO/SBCO operations may
+    not be optimized to the respective instructions.  */
+ 
+ 
+ #pragma ctable_entry 12 0x80beef00
+ 
+ unsigned int
+ test_ctable (unsigned int val1, unsigned int val2)
+ {
+   ((volatile unsigned short int *)0x80beef00)[0] = val2;
+   ((volatile unsigned int *)0x80beef00)[val1] = val2;
+   return ((volatile unsigned int *)0x80beef00)[5];
+ }
+ 
+ /* { dg-final { scan-assembler "sbco\\tr15.b\[012\]?, 12, 0, 2" } } */
+ /* { dg-final { scan-assembler "sbco\\tr15.b0, 12, r14, 4" } } */
+ /* { dg-final { scan-assembler "lbco\\tr14.b0, 12, 20, 4" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/mipscondmov.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/mipscondmov.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/mipscondmov.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/mipscondmov.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,29 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32imafd_xmipscmov" { target { rv32 } } } */
+ /* { dg-options "-march=rv64imafd_xmipscmov -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } } */
+ 
+ #define MYTEST(name, mytype) \
+ mytype test1_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a == b) ? c : d; } \
+ mytype test2_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a != b) ? c : d; } \
+ mytype test3_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a > b) ? c : d; } \
+ mytype test4_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a >= b) ? c : d; } \
+ mytype test5_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a < b) ? c : d; } \
+ mytype test6_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a <= b) ? c : d; } \
+ mytype test7_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a == 1) ? c : d; } \
+ mytype test8_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a != 1) ? c : d; } \
+ mytype test9_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a > 1) ? c : d; } \
+ mytype test10_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a >= 1) ? c : d; } \
+ mytype test11_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a < 1) ? c : d; } \
+ mytype test12_ ## name (mytype a, mytype b, mytype c, mytype d) { return (a <= 1) ? c : d; }
+ 
+ MYTEST(1, long)
+ MYTEST(2, unsigned long)
+ MYTEST(3, int)
+ MYTEST(4, unsigned int)
+ MYTEST(5, short)
+ MYTEST(6, unsigned short)
+ MYTEST(7, signed char)
+ MYTEST(8, unsigned char)
+ 
+ /* { dg-final { scan-assembler-times "mips.ccmov" 96 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg.h gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg.h
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg.h	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg.h	Sun Jul 20 22:32:25 2025
***************
*** 3,8 ****
--- 3,13 ----
  
  #include <stdint.h>
  
+ #if __riscv_xlen == 64
+ typedef unsigned __int128 uint128_t;
+ typedef signed __int128 int128_t;
+ #endif
+ 
  #define DEF_AVG_0(NT, WT, NAME)                                 \
  __attribute__((noinline))                                       \
  void                                                            \
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int16_t
  #define WT int32_t
  
! DEF_AVG_1(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int16_t
  #define WT int32_t
  
! DEF_AVG_1_WRAP(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i16-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int16_t
  #define WT int64_t
  
! DEF_AVG_1(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int16_t
  #define WT int64_t
  
! DEF_AVG_1_WRAP(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i32-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i32-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i32-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i32-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int32_t
  #define WT int64_t
  
! DEF_AVG_1(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int32_t
  #define WT int64_t
  
! DEF_AVG_1_WRAP(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i64-from-i128.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i64-from-i128.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i64-from-i128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i64-from-i128.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "avg.h"
+ 
+ #define NT int64_t
+ #define WT int128_t
+ 
+ DEF_AVG_1_WRAP(NT, WT, avg_ceil)
+ 
+ /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
+ /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int8_t
  #define WT int16_t
  
! DEF_AVG_1(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int8_t
  #define WT int16_t
  
! DEF_AVG_1_WRAP(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int8_t
  #define WT int32_t
  
! DEF_AVG_1(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int8_t
  #define WT int32_t
  
! DEF_AVG_1_WRAP(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-1-i8-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int8_t
  #define WT int64_t
  
! DEF_AVG_1(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int8_t
  #define WT int64_t
  
! DEF_AVG_1_WRAP(NT, WT, avg_ceil)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i16-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i32-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i32-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i32-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i32-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i64-from-i128.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i64-from-i128.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i64-from-i128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i64-from-i128.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { riscv_v && rv64 } } } */
+ /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
+ 
+ #include "avg.h"
+ #include "avg_data.h"
+ 
+ #define WT   int128_t
+ #define NT   int64_t
+ #define NAME avg_ceil
+ 
+ DEF_AVG_1_WRAP(NT, WT, NAME)
+ 
+ #define TEST_DATA                            TEST_AVG_DATA_WRAP(NT, NAME)
+ #define TEST_RUN(NT, WT, NAME, a, b, out, n) RUN_AVG_1_WRAP(NT, WT, NAME, a, b, out, n)
+ 
+ #include "avg_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_ceil-run-1-i8-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_data.h gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_data.h
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_data.h	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_data.h	Sun Jul 20 22:32:25 2025
*************** int64_t TEST_AVG_DATA(int64_t, avg_floor
*** 169,176 ****
      },
      {
         9223372036854775806ull,  9223372036854775806ull,  9223372036854775806ull,  9223372036854775806ull,
-        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
                          -2ull,                   -2ull,                   -2ull,                   -2ull,
        -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull,
      },
      {
--- 169,176 ----
      },
      {
         9223372036854775806ull,  9223372036854775806ull,  9223372036854775806ull,  9223372036854775806ull,
                          -2ull,                   -2ull,                   -2ull,                   -2ull,
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
        -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull,
      },
      {
*************** int64_t TEST_AVG_DATA(int64_t, avg_ceil)
*** 345,352 ****
      },
      {
         9223372036854775806ull,  9223372036854775806ull,  9223372036854775806ull,  9223372036854775806ull,
-        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
                          -2ull,                   -2ull,                   -2ull,                   -2ull,
        -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull,
      },
      {
--- 345,352 ----
      },
      {
         9223372036854775806ull,  9223372036854775806ull,  9223372036854775806ull,  9223372036854775806ull,
                          -2ull,                   -2ull,                   -2ull,                   -2ull,
+        9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,  9223372036854775807ull,
        -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull,
      },
      {
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int16_t
  #define WT int32_t
  
! DEF_AVG_0(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int16_t
  #define WT int32_t
  
! DEF_AVG_0_WRAP(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int16_t
  #define WT int64_t
  
! DEF_AVG_0(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int16_t
  #define WT int64_t
  
! DEF_AVG_0_WRAP(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int32_t
  #define WT int64_t
  
! DEF_AVG_0(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int32_t
  #define WT int64_t
  
! DEF_AVG_0_WRAP(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i64-from-i128.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i64-from-i128.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i64-from-i128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i64-from-i128.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "avg.h"
+ 
+ #define NT int64_t
+ #define WT int128_t
+ 
+ DEF_AVG_0_WRAP(NT, WT, avg_floor)
+ 
+ /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
+ /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int8_t
  #define WT int16_t
  
! DEF_AVG_0(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int8_t
  #define WT int16_t
  
! DEF_AVG_0_WRAP(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int8_t
  #define WT int32_t
  
! DEF_AVG_0(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int8_t
  #define WT int32_t
  
! DEF_AVG_0_WRAP(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 6,12 ****
  #define NT int8_t
  #define WT int64_t
  
! DEF_AVG_0(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
--- 6,12 ----
  #define NT int8_t
  #define WT int64_t
  
! DEF_AVG_0_WRAP(NT, WT, avg_floor)
  
  /* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
  /* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i64-from-i128.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i64-from-i128.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i64-from-i128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i64-from-i128.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { riscv_v && rv64 } } } */
+ /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
+ 
+ #include "avg.h"
+ #include "avg_data.h"
+ 
+ #define WT   int128_t
+ #define NT   int64_t
+ #define NAME avg_floor
+ 
+ DEF_AVG_0_WRAP(NT, WT, NAME)
+ 
+ #define TEST_DATA                            TEST_AVG_DATA_WRAP(NT, NAME)
+ #define TEST_RUN(NT, WT, NAME, a, b, out, n) RUN_AVG_0_WRAP(NT, WT, NAME, a, b, out, n)
+ 
+ #include "avg_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,5 ****
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3" } */
  
  #include "avg.h"
  #include "avg_data.h"
--- 1,5 ----
  /* { dg-do run { target { riscv_v } } } */
! /* { dg-additional-options "-std=c99 -O3 -Wno-pedantic" } */
  
  #include "avg.h"
  #include "avg_data.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h	Sun Jul 20 22:32:25 2025
*************** vec_sat_u_sub_##T##_fmt_10 (T *out, T *o
*** 531,536 ****
--- 531,570 ----
  #define DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T) \
    DEF_VEC_SAT_U_SUB_FMT_10(T)
  
+ #define DEF_VEC_SAT_U_SUB_FMT_11(T)                                   \
+ void __attribute__((noinline))                                       \
+ vec_sat_u_sub_##T##_fmt_11 (T *out, T *op_1, T *op_2, unsigned limit) \
+ {                                                                    \
+   unsigned i;                                                        \
+   for (i = 0; i < limit; i++)                                        \
+     {                                                                \
+       T x = op_1[i];                                                 \
+       T y = op_2[i];                                                 \
+       T ret;                                                         \
+       T overflow = __builtin_sub_overflow (x, y, &ret);           \
+       out[i] = overflow ? 0 : ret;                                   \
+     }                                                                \
+ }
+ #define DEF_VEC_SAT_U_SUB_FMT_11_WRAP(T) \
+   DEF_VEC_SAT_U_SUB_FMT_11(T)
+ 
+ #define DEF_VEC_SAT_U_SUB_FMT_12(T)                                   \
+ void __attribute__((noinline))                                        \
+ vec_sat_u_sub_##T##_fmt_12 (T *out, T *op_1, T *op_2, unsigned limit) \
+ {                                                                     \
+   unsigned i;                                                         \
+   for (i = 0; i < limit; i++)                                         \
+     {                                                                 \
+       T x = op_1[i];                                                  \
+       T y = op_2[i];                                                  \
+       T ret;                                                          \
+       T overflow = __builtin_sub_overflow (x, y, &ret);            \
+       out[i] = !overflow ? ret : 0;                                   \
+     }                                                                 \
+ }
+ #define DEF_VEC_SAT_U_SUB_FMT_12_WRAP(T) \
+   DEF_VEC_SAT_U_SUB_FMT_12(T)
+ 
  #define DEF_VEC_SAT_U_SUB_ZIP(T1, T2)                             \
  void __attribute__((noinline))                                    \
  vec_sat_u_sub_##T1##_##T2##_fmt_zip (T1 *x, T2 b, unsigned limit) \
*************** vec_sat_s_sub_##T##_fmt_4 (T *out, T *op
*** 737,742 ****
--- 771,786 ----
  #define RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_10(T, out, op_1, op_2, N)
  
+ #define RUN_VEC_SAT_U_SUB_FMT_11(T, out, op_1, op_2, N) \
+   vec_sat_u_sub_##T##_fmt_11(out, op_1, op_2, N)
+ #define RUN_VEC_SAT_U_SUB_FMT_11_WRAP(T, out, op_1, op_2, N) \
+   RUN_VEC_SAT_U_SUB_FMT_11(T, out, op_1, op_2, N)
+ 
+ #define RUN_VEC_SAT_U_SUB_FMT_12(T, out, op_1, op_2, N) \
+   vec_sat_u_sub_##T##_fmt_12(out, op_1, op_2, N)
+ #define RUN_VEC_SAT_U_SUB_FMT_12_WRAP(T, out, op_1, op_2, N) \
+   RUN_VEC_SAT_U_SUB_FMT_12(T, out, op_1, op_2, N)
+ 
  #define RUN_VEC_SAT_U_SUB_FMT_ZIP(T1, T2, x, b, N) \
    vec_sat_u_sub_##T1##_##T2##_fmt_zip(x, b, N)
  #define RUN_VEC_SAT_U_SUB_FMT_ZIP_WRAP(T1, T2, x, b, N) \
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h	Sun Jul 20 22:32:25 2025
*************** uint64_t TEST_UNARY_DATA(uint64_t, sat_u
*** 744,750 ****
    },
  };
  
! uint8_t TEST_UNARY_DATA(uint8_t, usub)[][3][N] = {
    {
      {
        0, 0, 0, 0,
--- 744,750 ----
    },
  };
  
! uint8_t TEST_UNARY_DATA(uint8_t, ussub)[][3][N] = {
    {
      {
        0, 0, 0, 0,
*************** uint8_t TEST_UNARY_DATA(uint8_t, usub)[]
*** 807,813 ****
    },
  };
  
! uint16_t TEST_UNARY_DATA(uint16_t, usub)[][3][N] = {
    {
      {
        0, 0, 0, 0,
--- 807,813 ----
    },
  };
  
! uint16_t TEST_UNARY_DATA(uint16_t, ussub)[][3][N] = {
    {
      {
        0, 0, 0, 0,
*************** uint16_t TEST_UNARY_DATA(uint16_t, usub)
*** 870,876 ****
    },
  };
  
! uint32_t TEST_UNARY_DATA(uint32_t, usub)[][3][N] = {
    {
      {
        0, 0, 4, 0,
--- 870,876 ----
    },
  };
  
! uint32_t TEST_UNARY_DATA(uint32_t, ussub)[][3][N] = {
    {
      {
        0, 0, 4, 0,
*************** uint32_t TEST_UNARY_DATA(uint32_t, usub)
*** 933,939 ****
    },
  };
  
! uint64_t TEST_UNARY_DATA(uint64_t, usub)[][3][N] = {
    {
      {
        0, 9, 0, 0,
--- 933,939 ----
    },
  };
  
! uint64_t TEST_UNARY_DATA(uint64_t, ussub)[][3][N] = {
    {
      {
        0, 9, 0, 0,
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ #include "vec_sat_arith.h"
+ 
+ DEF_VEC_SAT_U_SUB_FMT_11(uint16_t)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_SUB " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-times {vssubu\.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ #include "vec_sat_arith.h"
+ 
+ DEF_VEC_SAT_U_SUB_FMT_11(uint32_t)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_SUB " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-times {vssubu\.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ #include "vec_sat_arith.h"
+ 
+ DEF_VEC_SAT_U_SUB_FMT_11(uint64_t)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_SUB " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-times {vssubu\.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-11-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ #include "vec_sat_arith.h"
+ 
+ DEF_VEC_SAT_U_SUB_FMT_11(uint8_t)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_SUB " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-times {vssubu\.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ #include "vec_sat_arith.h"
+ 
+ DEF_VEC_SAT_U_SUB_FMT_12(uint16_t)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_SUB " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-times {vssubu\.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ #include "vec_sat_arith.h"
+ 
+ DEF_VEC_SAT_U_SUB_FMT_12(uint32_t)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_SUB " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-times {vssubu\.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ #include "vec_sat_arith.h"
+ 
+ DEF_VEC_SAT_U_SUB_FMT_12(uint64_t)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_SUB " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-times {vssubu\.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-12-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ #include "vec_sat_arith.h"
+ 
+ DEF_VEC_SAT_U_SUB_FMT_12(uint8_t)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_SUB " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-times {vssubu\.vv} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "vec_sat_arith.h"
+ #include "vec_sat_data.h"
+ 
+ #define T                  uint16_t
+ 
+ DEF_VEC_SAT_U_SUB_FMT_11_WRAP(T)
+ 
+ #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
+ #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
+   RUN_VEC_SAT_U_SUB_FMT_11_WRAP(T, out, op_1, op_2, N)
+ 
+ #include "vec_sat_binary_vvv_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "vec_sat_arith.h"
+ #include "vec_sat_data.h"
+ 
+ #define T                  uint32_t
+ 
+ DEF_VEC_SAT_U_SUB_FMT_11_WRAP(T)
+ 
+ #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
+ #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
+   RUN_VEC_SAT_U_SUB_FMT_11_WRAP(T, out, op_1, op_2, N)
+ 
+ #include "vec_sat_binary_vvv_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "vec_sat_arith.h"
+ #include "vec_sat_data.h"
+ 
+ #define T                  uint64_t
+ 
+ DEF_VEC_SAT_U_SUB_FMT_11_WRAP(T)
+ 
+ #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
+ #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
+   RUN_VEC_SAT_U_SUB_FMT_11_WRAP(T, out, op_1, op_2, N)
+ 
+ #include "vec_sat_binary_vvv_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-11-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "vec_sat_arith.h"
+ #include "vec_sat_data.h"
+ 
+ #define T                  uint8_t
+ 
+ DEF_VEC_SAT_U_SUB_FMT_11_WRAP(T)
+ 
+ #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
+ #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
+   RUN_VEC_SAT_U_SUB_FMT_11_WRAP(T, out, op_1, op_2, N)
+ 
+ #include "vec_sat_binary_vvv_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "vec_sat_arith.h"
+ #include "vec_sat_data.h"
+ 
+ #define T                  uint16_t
+ 
+ DEF_VEC_SAT_U_SUB_FMT_12_WRAP(T)
+ 
+ #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
+ #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
+   RUN_VEC_SAT_U_SUB_FMT_12_WRAP(T, out, op_1, op_2, N)
+ 
+ #include "vec_sat_binary_vvv_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "vec_sat_arith.h"
+ #include "vec_sat_data.h"
+ 
+ #define T                  uint32_t
+ 
+ DEF_VEC_SAT_U_SUB_FMT_12_WRAP(T)
+ 
+ #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
+ #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
+   RUN_VEC_SAT_U_SUB_FMT_12_WRAP(T, out, op_1, op_2, N)
+ 
+ #include "vec_sat_binary_vvv_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "vec_sat_arith.h"
+ #include "vec_sat_data.h"
+ 
+ #define T                  uint64_t
+ 
+ DEF_VEC_SAT_U_SUB_FMT_12_WRAP(T)
+ 
+ #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
+ #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
+   RUN_VEC_SAT_U_SUB_FMT_12_WRAP(T, out, op_1, op_2, N)
+ 
+ #include "vec_sat_binary_vvv_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-12-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "vec_sat_arith.h"
+ #include "vec_sat_data.h"
+ 
+ #define T                  uint8_t
+ 
+ DEF_VEC_SAT_U_SUB_FMT_12_WRAP(T)
+ 
+ #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
+ #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
+   RUN_VEC_SAT_U_SUB_FMT_12_WRAP(T, out, op_1, op_2, N)
+ 
+ #include "vec_sat_binary_vvv_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 8,14 ****
  
  DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, usub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
  
--- 8,14 ----
  
  DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
  
! #define test_data          TEST_UNARY_DATA_WRAP(T, ussub)
  #define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
    RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c	Sun Jul 20 22:32:25 2025
*************** DEF_VF_MULOP_ACC_CASE_0 (_Float16, +, +,
*** 11,16 ****
--- 11,20 ----
  DEF_VF_MULOP_ACC_CASE_0 (_Float16, -, +, sac)
  DEF_VF_MULOP_ACC_CASE_0 (_Float16, +, -, nacc)
  DEF_VF_MULOP_ACC_CASE_0 (_Float16, -, -, nsac)
+ DEF_VF_MULOP_WIDEN_CASE_0 (_Float16, float, +, +, acc)
+ DEF_VF_MULOP_WIDEN_CASE_0 (_Float16, float, -, +, sac)
+ DEF_VF_MULOP_WIDEN_CASE_0 (_Float16, float, +, -, nacc)
+ DEF_VF_MULOP_WIDEN_CASE_0 (_Float16, float, -, -, nsac)
  
  /* { dg-final { scan-assembler-times {vfmadd.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfmsub.vf} 1 } } */
*************** DEF_VF_MULOP_ACC_CASE_0 (_Float16, -, -,
*** 20,22 ****
--- 24,30 ----
  /* { dg-final { scan-assembler-times {vfmsac.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfnmacc.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfnmsac.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfwmacc.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfwmsac.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfwnmacc.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfwnmsac.vf} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c	Sun Jul 20 22:32:25 2025
*************** DEF_VF_MULOP_ACC_CASE_0 (float, +, +, ac
*** 11,16 ****
--- 11,20 ----
  DEF_VF_MULOP_ACC_CASE_0 (float, -, +, sac)
  DEF_VF_MULOP_ACC_CASE_0 (float, +, -, nacc)
  DEF_VF_MULOP_ACC_CASE_0 (float, -, -, nsac)
+ DEF_VF_MULOP_WIDEN_CASE_0 (float, double, +, +, acc)
+ DEF_VF_MULOP_WIDEN_CASE_0 (float, double, -, +, sac)
+ DEF_VF_MULOP_WIDEN_CASE_0 (float, double, +, -, nacc)
+ DEF_VF_MULOP_WIDEN_CASE_0 (float, double, -, -, nsac)
  
  /* { dg-final { scan-assembler-times {vfmadd.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfmsub.vf} 1 } } */
*************** DEF_VF_MULOP_ACC_CASE_0 (float, -, -, ns
*** 20,22 ****
--- 24,30 ----
  /* { dg-final { scan-assembler-times {vfmsac.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfnmacc.vf} 1 } } */
  /* { dg-final { scan-assembler-times {vfnmsac.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfwmacc.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfwmsac.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfwnmacc.vf} 1 } } */
+ /* { dg-final { scan-assembler-times {vfwnmsac.vf} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c	Sun Jul 20 22:32:25 2025
***************
*** 11,13 ****
--- 11,19 ----
  /* { dg-final { scan-assembler-not {vfmsac.vf} } } */
  /* { dg-final { scan-assembler-not {vfnmacc.vf} } } */
  /* { dg-final { scan-assembler-not {vfnmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwnmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwnmsac.vf} } } */
+ /* { dg-final { scan-assembler-times {fcvt.s.h} 4 } } */
+ /* { dg-final { scan-assembler-times {vfmv.v.f} 12 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c	Sun Jul 20 22:32:25 2025
***************
*** 11,13 ****
--- 11,19 ----
  /* { dg-final { scan-assembler-not {vfmsac.vf} } } */
  /* { dg-final { scan-assembler-not {vfnmacc.vf} } } */
  /* { dg-final { scan-assembler-not {vfnmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwnmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwnmsac.vf} } } */
+ /* { dg-final { scan-assembler-times {fcvt.d.s} 4 } } */
+ /* { dg-final { scan-assembler-times {vfmv.v.f} 12 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c	Sun Jul 20 22:32:25 2025
*************** DEF_VF_MULOP_ACC_CASE_1 (_Float16, +, +,
*** 11,16 ****
--- 11,20 ----
  DEF_VF_MULOP_ACC_CASE_1 (_Float16, -, +, sac, VF_MULOP_ACC_BODY_X128)
  DEF_VF_MULOP_ACC_CASE_1 (_Float16, +, -, nacc, VF_MULOP_ACC_BODY_X128)
  DEF_VF_MULOP_ACC_CASE_1 (_Float16, -, -, nsac, VF_MULOP_ACC_BODY_X128)
+ DEF_VF_MULOP_WIDEN_CASE_1 (_Float16, float, +, +, acc)
+ DEF_VF_MULOP_WIDEN_CASE_1 (_Float16, float, -, +, sac)
+ DEF_VF_MULOP_WIDEN_CASE_1 (_Float16, float, +, -, nacc)
+ DEF_VF_MULOP_WIDEN_CASE_1 (_Float16, float, -, -, nsac)
  
  /* { dg-final { scan-assembler {vfmadd.vf} } } */
  /* { dg-final { scan-assembler {vfmsub.vf} } } */
*************** DEF_VF_MULOP_ACC_CASE_1 (_Float16, -, -,
*** 20,22 ****
--- 24,30 ----
  /* { dg-final { scan-assembler {vfmsac.vf} } } */
  /* { dg-final { scan-assembler {vfnmacc.vf} } } */
  /* { dg-final { scan-assembler {vfnmsac.vf} } } */
+ /* { dg-final { scan-assembler {vfwmacc.vf} } } */
+ /* { dg-final { scan-assembler {vfwmsac.vf} } } */
+ /* { dg-final { scan-assembler {vfwnmacc.vf} } } */
+ /* { dg-final { scan-assembler {vfwnmsac.vf} } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c	Sun Jul 20 22:32:25 2025
*************** DEF_VF_MULOP_ACC_CASE_1 (float, +, +, ac
*** 11,16 ****
--- 11,20 ----
  DEF_VF_MULOP_ACC_CASE_1 (float, -, +, sac, VF_MULOP_ACC_BODY_X128)
  DEF_VF_MULOP_ACC_CASE_1 (float, +, -, nacc, VF_MULOP_ACC_BODY_X128)
  DEF_VF_MULOP_ACC_CASE_1 (float, -, -, nsac, VF_MULOP_ACC_BODY_X128)
+ DEF_VF_MULOP_WIDEN_CASE_1 (float, double, +, +, acc)
+ DEF_VF_MULOP_WIDEN_CASE_1 (float, double, -, +, sac)
+ DEF_VF_MULOP_WIDEN_CASE_1 (float, double, +, -, nacc)
+ DEF_VF_MULOP_WIDEN_CASE_1 (float, double, -, -, nsac)
  
  /* { dg-final { scan-assembler {vfmadd.vf} } } */
  /* { dg-final { scan-assembler {vfmsub.vf} } } */
*************** DEF_VF_MULOP_ACC_CASE_1 (float, -, -, ns
*** 20,22 ****
--- 24,30 ----
  /* { dg-final { scan-assembler {vfmsac.vf} } } */
  /* { dg-final { scan-assembler {vfnmacc.vf} } } */
  /* { dg-final { scan-assembler {vfnmsac.vf} } } */
+ /* { dg-final { scan-assembler {vfwmacc.vf} } } */
+ /* { dg-final { scan-assembler {vfwmsac.vf} } } */
+ /* { dg-final { scan-assembler {vfwnmacc.vf} } } */
+ /* { dg-final { scan-assembler {vfwnmsac.vf} } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c	Sun Jul 20 22:32:25 2025
***************
*** 11,13 ****
--- 11,18 ----
  /* { dg-final { scan-assembler-not {vfmsac.vf} } } */
  /* { dg-final { scan-assembler-not {vfnmacc.vf} } } */
  /* { dg-final { scan-assembler-not {vfnmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwnmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwnmsac.vf} } } */
+ /* { dg-final { scan-assembler {fcvt.s.h} } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c	Sun Jul 20 22:32:25 2025
***************
*** 11,13 ****
--- 11,18 ----
  /* { dg-final { scan-assembler-not {vfmsac.vf} } } */
  /* { dg-final { scan-assembler-not {vfnmacc.vf} } } */
  /* { dg-final { scan-assembler-not {vfnmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwmsac.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwnmacc.vf} } } */
+ /* { dg-final { scan-assembler-not {vfwnmsac.vf} } } */
+ /* { dg-final { scan-assembler {fcvt.d.s} } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h	Sun Jul 13 22:32:40 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h	Sun Jul 20 22:32:25 2025
***************
*** 34,39 ****
--- 34,54 ----
  #define RUN_VF_MULOP_ACC_CASE_0_WRAP(T, NAME, out, in, x, n)                   \
    RUN_VF_MULOP_ACC_CASE_0 (T, NAME, out, in, x, n)
  
+ #define DEF_VF_MULOP_WIDEN_CASE_0(T1, T2, OP, NEG, NAME)                       \
+   void test_vf_mulop_widen_##NAME##_##T1##_case_0 (T2 *restrict out,           \
+ 						   T1 *restrict in,            \
+ 						   T1 *restrict f, unsigned n) \
+   {                                                                            \
+     for (unsigned i = 0; i < n; i++)                                           \
+       out[i] = NEG ((T2) * f * (T2) in[i] OP out[i]);                          \
+   }
+ #define DEF_VF_MULOP_WIDEN_CASE_0_WRAP(T1, T2, OP, NEG, NAME)                  \
+   DEF_VF_MULOP_WIDEN_CASE_0 (T1, T2, OP, NEG, NAME)
+ #define RUN_VF_MULOP_WIDEN_CASE_0(T1, T2, NAME, out, in, x, n)                 \
+   test_vf_mulop_widen_##NAME##_##T1##_case_0 (out, in, x, n)
+ #define RUN_VF_MULOP_WIDEN_CASE_0_WRAP(T1, T2, NAME, out, in, x, n)            \
+   RUN_VF_MULOP_WIDEN_CASE_0 (T1, T2, NAME, out, in, x, n)
+ 
  #define VF_MULOP_BODY(op, neg)                                                 \
    out[k + 0] = neg (tmp * out[k + 0] op in[k + 0]);                            \
    out[k + 1] = neg (tmp * out[k + 1] op in[k + 1]);                            \
***************
*** 129,132 ****
--- 144,162 ----
  #define DEF_VF_MULOP_ACC_CASE_1_WRAP(T, OP, NEG, NAME, BODY)                   \
    DEF_VF_MULOP_ACC_CASE_1 (T, OP, NEG, NAME, BODY)
  
+ #define DEF_VF_MULOP_WIDEN_CASE_1(TYPE1, TYPE2, OP, NEG, NAME)                 \
+   void test_vf_mulop_widen_##NAME##_##TYPE1##_##TYPE2##_case_1 (               \
+     TYPE2 *__restrict dst, TYPE2 *__restrict dst2, TYPE2 *__restrict dst3,     \
+     TYPE2 *__restrict dst4, TYPE1 *__restrict a, TYPE1 *__restrict b,          \
+     TYPE1 *__restrict a2, TYPE1 *__restrict b2, int n)                         \
+   {                                                                            \
+     for (int i = 0; i < n; i++)                                                \
+       {                                                                        \
+ 	dst[i] = NEG ((TYPE2) * a * (TYPE2) b[i] OP dst[i]);                   \
+ 	dst2[i] = NEG ((TYPE2) * a2 * (TYPE2) b[i] OP dst2[i]);                \
+ 	dst3[i] = NEG ((TYPE2) * a2 * (TYPE2) a[i] OP dst3[i]);                \
+ 	dst4[i] = NEG ((TYPE2) * a * (TYPE2) b2[i] OP dst4[i]);                \
+       }                                                                        \
+   }
+ 
  #endif
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_widen_run.h gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_widen_run.h
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_widen_run.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_widen_run.h	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,32 ----
+ #ifndef HAVE_DEFINED_VF_MULOP_WIDEN_RUN_H
+ #define HAVE_DEFINED_VF_MULOP_WIDEN_RUN_H
+ 
+ #include <assert.h>
+ 
+ #define N 512
+ 
+ int main ()
+ {
+   T1 f[N];
+   T1 in[N];
+   T2 out[N];
+   T2 out2[N];
+ 
+   for (int i = 0; i < N; i++) 
+     {
+       f[i] = LIMIT + i % 8723;
+       in[i] = LIMIT + i & 1964;
+       out[i] = LIMIT + i & 628;
+       out2[i] = LIMIT + i & 628;
+       asm volatile ("" ::: "memory");
+     }
+ 
+   TEST_RUN (T1, T2, NAME, out, in, f, N);
+ 
+   for (int i = 0; i < N; i++)
+     assert (out[i] == NEG(((T2) *f * (T2) in[i]) OP out2[i]));
+ 
+   return 0;
+ }
+ 
+ #endif
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-march=rv64gcv_zvfh --param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ 
+ #define T1    _Float16
+ #define T2    float
+ #define NAME acc
+ #define OP +
+ #define NEG +
+ 
+ DEF_VF_MULOP_WIDEN_CASE_0_WRAP (T1, T2, OP, NEG, NAME)
+ 
+ #define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_MULOP_WIDEN_CASE_0_WRAP(T1, T2, NAME, out, in, f, n)
+ #define LIMIT -32768
+ 
+ #include "vf_mulop_widen_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f32.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "--param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ 
+ #define T1    float
+ #define T2    double
+ #define NAME acc
+ #define OP +
+ #define NEG +
+ 
+ DEF_VF_MULOP_WIDEN_CASE_0_WRAP (T1, T2, OP, NEG, NAME)
+ 
+ #define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_MULOP_WIDEN_CASE_0_WRAP(T1, T2, NAME, out, in, f, n)
+ #define LIMIT -2147483648
+ 
+ #include "vf_mulop_widen_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-march=rv64gcv_zvfh --param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ 
+ #define T1    _Float16
+ #define T2    float
+ #define NAME sac
+ #define OP -
+ #define NEG +
+ 
+ DEF_VF_MULOP_WIDEN_CASE_0_WRAP (T1, T2, OP, NEG, NAME)
+ 
+ #define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_MULOP_WIDEN_CASE_0_WRAP(T1, T2, NAME, out, in, f, n)
+ #define LIMIT -32768
+ 
+ #include "vf_mulop_widen_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f32.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "--param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ 
+ #define T1    float
+ #define T2    double
+ #define NAME sac
+ #define OP -
+ #define NEG +
+ 
+ DEF_VF_MULOP_WIDEN_CASE_0_WRAP (T1, T2, OP, NEG, NAME)
+ 
+ #define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_MULOP_WIDEN_CASE_0_WRAP(T1, T2, NAME, out, in, f, n)
+ #define LIMIT -2147483648
+ 
+ #include "vf_mulop_widen_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-march=rv64gcv_zvfh --param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ 
+ #define T1    _Float16
+ #define T2    float
+ #define NAME nacc
+ #define OP +
+ #define NEG -
+ 
+ DEF_VF_MULOP_WIDEN_CASE_0_WRAP (T1, T2, OP, NEG, NAME)
+ 
+ #define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_MULOP_WIDEN_CASE_0_WRAP(T1, T2, NAME, out, in, f, n)
+ #define LIMIT -32768
+ 
+ #include "vf_mulop_widen_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f32.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "--param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ 
+ #define T1    float
+ #define T2    double
+ #define NAME nacc
+ #define OP +
+ #define NEG -
+ 
+ DEF_VF_MULOP_WIDEN_CASE_0_WRAP (T1, T2, OP, NEG, NAME)
+ 
+ #define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_MULOP_WIDEN_CASE_0_WRAP(T1, T2, NAME, out, in, f, n)
+ #define LIMIT -2147483648
+ 
+ #include "vf_mulop_widen_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-march=rv64gcv_zvfh --param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ 
+ #define T1    _Float16
+ #define T2    float
+ #define NAME nsac
+ #define OP -
+ #define NEG -
+ 
+ DEF_VF_MULOP_WIDEN_CASE_0_WRAP (T1, T2, OP, NEG, NAME)
+ 
+ #define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_MULOP_WIDEN_CASE_0_WRAP(T1, T2, NAME, out, in, f, n)
+ #define LIMIT -32768
+ 
+ #include "vf_mulop_widen_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f32.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "--param=fpr2vr-cost=0" } */
+ 
+ #include "vf_mulop.h"
+ 
+ #define T1    float
+ #define T2    double
+ #define NAME nsac
+ #define OP -
+ #define NEG -
+ 
+ DEF_VF_MULOP_WIDEN_CASE_0_WRAP (T1, T2, OP, NEG, NAME)
+ 
+ #define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_MULOP_WIDEN_CASE_0_WRAP(T1, T2, NAME, out, in, f, n)
+ #define LIMIT -2147483648
+ 
+ #include "vf_mulop_widen_run.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/pr120297.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/pr120297.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/rvv/pr120297.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/rvv/pr120297.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -fwhole-program" } */
+ 
+ unsigned a;
+ short c;
+ char d;
+ unsigned long e;
+ _Bool f[10][10];
+ unsigned g[10];
+ long long ak;
+ char i = 7;
+ long long t[10];
+ short x[10][10][10][10];
+ short y[10][10][10][10];
+ 
+ void
+ h (char i, long long t[], short x[][10][10][10], short y[][10][10][10],
+    _Bool aa)
+ {
+   for (int j = 2; j < 8; j += 2)
+     {
+       for (short k = 0; k < 10; k++)
+ 	{
+ 	  for (int l = 3; l < 8; l += 2)
+ 	    a = x[1][j][k][l];
+ 	  c = x[c][1][1][c];
+ 	}
+       for (int k = 0; k < 10; k++)
+ 	{
+ 	  f[2][k] |= (_Bool) t[c];
+ 	  g[c] = t[c + 1];
+ 	  d += y[j][1][k][k];
+ 	  e = e > i ? e : i;
+ 	}
+     }
+ }
+ 
+ int
+ main ()
+ {
+   t[c] = 1;
+   h (i, t, x, y, a);
+   for (int j = 0; j < 10; ++j)
+     for (int k = 0; k < 10; ++k)
+       ak ^= f[j][k] + 238516665 + (ak >> 2);
+   ak ^= g[c] + 238516665 + (ak >> 2);
+   if (ak != 234635118ull)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,32 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int16_t_fmt_1:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_ADD_FMT_1(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_1(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,31 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int32_t_fmt_1:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_ADD_FMT_1(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_1(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,29 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int64_t_fmt_1:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_ADD_FMT_1(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_1(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,30 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int8_t_fmt_1:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_ADD_FMT_1(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_1(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,32 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int16_t_fmt_2:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_ADD_FMT_2(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_2(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,31 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int32_t_fmt_2:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_ADD_FMT_2(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_2(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,29 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int64_t_fmt_2:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_ADD_FMT_2(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_2(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,30 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int8_t_fmt_2:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_ADD_FMT_2(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_2(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,32 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int16_t_fmt_3:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_ADD_FMT_3(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_3(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,31 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int32_t_fmt_3:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_ADD_FMT_3(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_3(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,29 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int64_t_fmt_3:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_ADD_FMT_3(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_3(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,30 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int8_t_fmt_3:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_ADD_FMT_3(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_3(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,32 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int16_t_fmt_4:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_ADD_FMT_4(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_4(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,31 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int32_t_fmt_4:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_ADD_FMT_4(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_4(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,29 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int64_t_fmt_4:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_ADD_FMT_4(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_4(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,30 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_int8_t_fmt_4:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_ADD_FMT_4(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_FMT_4(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,57 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_imm_int16_t_fmt_1_0:
- **	addi\s+[atx][0-9]+,\s*a0,\s*-7
- **	xori\s+[atx][0-9]+,\s*a0,\s*-7
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	srai\s+a0,\s*a0,\s*63
- **	li\s+[atx][0-9]+,\s*32768
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	neg\s+a0,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,\s*a0,\s*[atx][0-9]+
- **	slliw\s+a0,\s*a0,\s*16
- **	sraiw\s+a0,\s*a0,\s*16
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_1(0, int16_t, uint16_t, -7, INT16_MIN, INT16_MAX)
- 
- /*
- ** sat_s_add_imm_int16_t_fmt_1_1:
- ** 	addi\s+[atx][0-9]+,\s*a0,\s*-1
- ** 	not\s+[atx][0-9]+,\s*a0
- ** 	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** 	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** 	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** 	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** 	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** 	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** 	srai\s+a0,\s*a0,\s*63
- ** 	li\s+[atx][0-9]+,\s*32768
- ** 	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** 	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** 	neg\s+a0,\s*[atx][0-9]+
- ** 	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** 	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** 	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** 	or\s+a0,\s*a0,\s*[atx][0-9]+
- ** 	slliw\s+a0,\s*a0,\s*16
- ** 	sraiw\s+a0,\s*a0,\s*16
- ** 	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_1(1, int16_t, uint16_t, -1, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_IMM_FMT_1(0, int16_t, uint16_t, -7, INT16_MIN, INT16_MAX)
  DEF_SAT_S_ADD_IMM_FMT_1(1, int16_t, uint16_t, -1, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,54 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_imm_int32_t_fmt_1_0:
- **	addi\s+[atx][0-9]+,\s*a0,\s*10
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- **	srli\s+[atx][0-9]+,\s*a0,\s*31
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	srai\s+a0,\s*a0,\s*63
- **	li\s+[atx][0-9]+,\s*-2147483648
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	neg\s+a0,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,a0,\s*[atx][0-9]+
- **	sext.w\s+a0,\s*a0
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_1(0, int32_t, uint32_t, 10, INT32_MIN, INT32_MAX)
  
- /*
- ** sat_s_add_imm_int32_t_fmt_1_1:
- **	addi\s+[atx][0-9]+,\s*a0,\s*-1
- **	not\s+[atx][0-9]+,\s*a0
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	srai\s+a0,\s*a0,\s*63
- **	li\s+[atx][0-9]+,\s*-2147483648
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	neg\s+a0,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,\s*a0,\s*[atx][0-9]+
- **	sext.w\s+a0,\s*a0
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_1(1, int32_t, uint32_t, -1, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
--- 1,11 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_IMM_FMT_1(0, int32_t, uint32_t, 10, INT32_MIN, INT32_MAX)
  
  DEF_SAT_S_ADD_IMM_FMT_1(1, int32_t, uint32_t, -1, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,48 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_imm_int64_t_fmt_1_0:
- **	addi\s+[atx][0-9]+,\s*a0,\s*10
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- **	srli\s+[atx][0-9]+,\s*a0,\s*63
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	srai\s+[atx][0-9]+,\s*a0,\s*63
- **	li\s+[atx][0-9]+,\s*-1
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	neg\s+[atx][0-9]+,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,\s*a0,\s*[atx][0-9]+
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_1(0, int64_t, uint64_t, 10, INT64_MIN, INT64_MAX)
  
- /*
- ** sat_s_add_imm_int64_t_fmt_1_1:
- **	addi\s+[atx][0-9]+,\s*a0,\s*-1
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- **	slti\s+[atx][0-9]+,\s*a0,\s*0
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	srai\s+[atx][0-9]+,\s*a0,\s*63
- **	li\s+[atx][0-9]+,\s*-1
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	neg\s+[atx][0-9]+,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,\s*a0,\s*[atx][0-9]+
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_1(1, int64_t, uint64_t, -1, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
--- 1,11 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_IMM_FMT_1(0, int64_t, uint64_t, 10, INT64_MIN, INT64_MAX)
  
  DEF_SAT_S_ADD_IMM_FMT_1(1, int64_t, uint64_t, -1, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,49 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_imm_int8_t_fmt_1_0:
- **	addi\s+[atx][0-9]+,\s*a0,\s*9
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- **	srli\s+[atx][0-9]+,\s*a0,\s*7
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	srai\s+a0,\s*a0,\s*63
- **	xori\s+[atx][0-9]+,\s*a0,\s*127
- **	neg\s+a0,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,\s*a0,\s*[atx][0-9]+
- **	slliw\s+a0,\s*a0,\s*24
- **	sraiw\s+a0,\s*a0,\s*24
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_1(0, int8_t, uint8_t, 9, INT8_MIN, INT8_MAX)
  
- /*
- ** sat_s_add_imm_int8_t_fmt_1_1:
- ** 	addi\s+[atx][0-9]+,\s*a0,\s*-1
- ** 	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** 	and\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** 	slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*56
- ** 	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** 	srai\s+a0,\s*a0,\s*63
- ** 	xori\s+[atx][0-9]+,\s*a0,\s*127
- ** 	neg\s+a0,\s*a5
- ** 	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** 	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** 	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** 	or\s+a0,\s*a0,\s*[atx][0-9]+
- ** 	slliw\s+a0,\s*a0,\s*24
- ** 	sraiw\s+a0,\s*a0,\s*24
- ** 	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_1(1, int8_t, uint8_t, -1, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
--- 1,11 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_IMM_FMT_1(0, int8_t, uint8_t, 9, INT8_MIN, INT8_MAX)
  
  DEF_SAT_S_ADD_IMM_FMT_1(1, int8_t, uint8_t, -1, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,57 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_imm_int16_t_fmt_2_0:
- **	addi\s+[atx][0-9]+,\s*a0,\s*-7
- **	xori\s+[atx][0-9]+,\s*a0,\s*-7
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	srai\s+a0,\s*a0,\s*63
- **	li\s+[atx][0-9]+,\s*32768
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	neg\s+a0,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,\s*a0,\s*[atx][0-9]+
- **	slliw\s+a0,\s*a0,\s*16
- **	sraiw\s+a0,\s*a0,\s*16
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_2(0, int16_t, uint16_t, -7, INT16_MIN, INT16_MAX)
  
- /*
- ** sat_s_add_imm_int16_t_fmt_2_1:
- ** 	addi\s+[atx][0-9]+,\s*a0,\s*-1
- ** 	not\s+[atx][0-9]+,\s*a0
- ** 	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** 	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** 	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** 	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** 	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** 	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** 	srai\s+a0,\s*a0,\s*63
- ** 	li\s+[atx][0-9]+,\s*32768
- ** 	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** 	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** 	neg\s+a0,\s*[atx][0-9]+
- ** 	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** 	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** 	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** 	or\s+a0,\s*a0,\s*[atx][0-9]+
- ** 	slliw\s+a0,\s*a0,\s*16
- ** 	sraiw\s+a0,\s*a0,\s*16
- ** 	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_2(1, int16_t, uint16_t, -1, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
--- 1,11 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_IMM_FMT_2(0, int16_t, uint16_t, -7, INT16_MIN, INT16_MAX)
  
  DEF_SAT_S_ADD_IMM_FMT_2(1, int16_t, uint16_t, -1, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,54 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_imm_int32_t_fmt_2_0:
- **	addi\s+[atx][0-9]+,\s*a0,\s*10
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- **	srli\s+[atx][0-9]+,\s*a0,\s*31
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	srai\s+a0,\s*a0,\s*63
- **	li\s+[atx][0-9]+,\s*-2147483648
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	neg\s+a0,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,a0,\s*[atx][0-9]+
- **	sext.w\s+a0,\s*a0
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_2(0, int32_t, uint32_t, 10, INT32_MIN, INT32_MAX)
  
- /*
- ** sat_s_add_imm_int32_t_fmt_2_1:
- **	addi\s+[atx][0-9]+,\s*a0,\s*-1
- **	not\s+[atx][0-9]+,\s*a0
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	srai\s+a0,\s*a0,\s*63
- **	li\s+[atx][0-9]+,\s*-2147483648
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	neg\s+a0,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,\s*a0,\s*[atx][0-9]+
- **	sext.w\s+a0,\s*a0
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_2(1, int32_t, uint32_t, -1, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
--- 1,11 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_IMM_FMT_2(0, int32_t, uint32_t, 10, INT32_MIN, INT32_MAX)
  
  DEF_SAT_S_ADD_IMM_FMT_2(1, int32_t, uint32_t, -1, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,48 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_imm_int64_t_fmt_2_0:
- **	addi\s+[atx][0-9]+,\s*a0,\s*10
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- **	srli\s+[atx][0-9]+,\s*a0,\s*63
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	srai\s+[atx][0-9]+,\s*a0,\s*63
- **	li\s+[atx][0-9]+,\s*-1
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	neg\s+[atx][0-9]+,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,\s*a0,\s*[atx][0-9]+
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_2(0, int64_t, uint64_t, 10, INT64_MIN, INT64_MAX)
  
- /*
- ** sat_s_add_imm_int64_t_fmt_2_1:
- **	addi\s+[atx][0-9]+,\s*a0,\s*-1
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- **	slti\s+[atx][0-9]+,\s*a0,\s*0
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	srai\s+[atx][0-9]+,\s*a0,\s*63
- **	li\s+[atx][0-9]+,\s*-1
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	neg\s+[atx][0-9]+,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,\s*a0,\s*[atx][0-9]+
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_2(1, int64_t, uint64_t, -1, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
--- 1,11 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_IMM_FMT_2(0, int64_t, uint64_t, 10, INT64_MIN, INT64_MAX)
  
  DEF_SAT_S_ADD_IMM_FMT_2(1, int64_t, uint64_t, -1, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,49 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_add_imm_int8_t_fmt_2_0:
- **	addi\s+[atx][0-9]+,\s*a0,\s*9
- **	xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **	srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- **	srli\s+[atx][0-9]+,\s*a0,\s*7
- **	xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- **	srai\s+a0,\s*a0,\s*63
- **	xori\s+[atx][0-9]+,\s*a0,\s*127
- **	neg\s+a0,\s*[atx][0-9]+
- **	and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **	addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **	and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **	or\s+a0,\s*a0,\s*[atx][0-9]+
- **	slliw\s+a0,\s*a0,\s*24
- **	sraiw\s+a0,\s*a0,\s*24
- **	ret
- */
  DEF_SAT_S_ADD_IMM_FMT_2(0, int8_t, uint8_t, 9, INT8_MIN, INT8_MAX)
  
- /*
- ** sat_s_add_imm_int8_t_fmt_2_1:
- **      addi\s+[atx][0-9]+,\s*a0,\s*-1
- **      xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- **      srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- **      srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- **      and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- **      srai\s+a0,\s*a0,\s*63
- **      xori\s+[atx][0-9]+,\s*a0,\s*127
- **      neg\s+a0,\s*a4
- **      and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- **      addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- **      and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- **      or\s+a0,\s*a0,\s*[atx][0-9]+
- **      slliw\s+a0,\s*a0,\s*24
- **      sraiw\s+a0,\s*a0,\s*24
- **      ret
- */
  DEF_SAT_S_ADD_IMM_FMT_2(1, int8_t, uint8_t, -1, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
--- 1,11 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_ADD_IMM_FMT_2(0, int8_t, uint8_t, 9, INT8_MIN, INT8_MAX)
  
  DEF_SAT_S_ADD_IMM_FMT_2(1, int8_t, uint8_t, -1, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,30 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int16_t_fmt_1:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_SUB_FMT_1(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_1(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int32_t_fmt_1:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srliw\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-7]
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_SUB_FMT_1(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_1(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,27 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int64_t_fmt_1:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_SUB_FMT_1(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_1(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int8_t_fmt_1:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_SUB_FMT_1(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_1(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,30 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int16_t_fmt_2:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_SUB_FMT_2(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_2(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int32_t_fmt_2:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srliw\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-7]
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_SUB_FMT_2(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_2(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,27 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int64_t_fmt_2:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_SUB_FMT_2(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_2(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int8_t_fmt_2:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_SUB_FMT_2(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_2(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,30 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int16_t_fmt_3:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_SUB_FMT_3(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_3(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int32_t_fmt_3:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srliw\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-7]
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_SUB_FMT_3(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_3(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,27 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int64_t_fmt_3:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_SUB_FMT_3(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_3(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int8_t_fmt_3:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_SUB_FMT_3(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_3(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,30 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int16_t_fmt_4:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_SUB_FMT_4(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_4(int16_t, uint16_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int32_t_fmt_4:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srliw\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-7]
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_SUB_FMT_4(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_4(int32_t, uint32_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,27 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int64_t_fmt_4:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_S_SUB_FMT_4(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_4(int64_t, uint64_t, INT64_MIN, INT64_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_sub_int8_t_fmt_4:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*a1
- ** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_SUB_FMT_4(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_SUB_FMT_4(int8_t, uint8_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i16-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i16-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i16-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i16-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int16_t_to_int8_t_fmt_1:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_1(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_1(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int16_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_1(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_1(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i32-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int8_t_fmt_1:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_1(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_1(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int16_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_1(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_1(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int32_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_1(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_1(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-1-i64-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int8_t_fmt_1:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_1(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_1(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i16-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i16-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i16-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i16-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int16_t_to_int8_t_fmt_2:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_2(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_2(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int16_t_fmt_2:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_2(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_2(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i32-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int8_t_fmt_2:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_2(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_2(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int16_t_fmt_2:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_2(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_2(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int32_t_fmt_2:
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_2(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_2(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-2-i64-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int8_t_fmt_2:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_2(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_2(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i16-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i16-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i16-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i16-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int16_t_to_int8_t_fmt_3:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_3(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_3(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int16_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_3(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_3(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i32-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int8_t_fmt_3:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_3(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_3(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int16_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_3(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_3(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int32_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_3(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_3(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-3-i64-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int8_t_fmt_3:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_3(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_3(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i16-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i16-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i16-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i16-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int16_t_to_int8_t_fmt_4:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_4(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_4(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int16_t_fmt_4:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_4(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_4(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i32-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int8_t_fmt_4:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_4(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_4(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int16_t_fmt_4:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_4(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_4(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int32_t_fmt_4:
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_4(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_4(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-4-i64-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int8_t_fmt_4:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_4(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_4(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i16-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i16-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i16-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i16-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int16_t_to_int8_t_fmt_5:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_5(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_5(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int16_t_fmt_5:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_5(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_5(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i32-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int8_t_fmt_5:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_5(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_5(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int16_t_fmt_5:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_5(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_5(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int32_t_fmt_5:
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_5(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_5(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-5-i64-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int8_t_fmt_5:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_5(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_5(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i16-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i16-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i16-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i16-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int16_t_to_int8_t_fmt_6:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_6(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_6(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int16_t_fmt_6:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_6(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_6(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i32-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int8_t_fmt_6:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_6(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_6(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int16_t_fmt_6:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_6(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_6(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int32_t_fmt_6:
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_6(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_6(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-6-i64-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int8_t_fmt_6:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_6(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_6(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i16-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i16-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i16-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i16-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int16_t_to_int8_t_fmt_7:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_7(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_7(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int16_t_fmt_7:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_7(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_7(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i32-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int8_t_fmt_7:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_7(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_7(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int16_t_fmt_7:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_7(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_7(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int32_t_fmt_7:
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_7(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_7(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-7-i64-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int8_t_fmt_7:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_7(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_7(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i16-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i16-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i16-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i16-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int16_t_to_int8_t_fmt_8:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_8(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_8(int8_t, int16_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int16_t_fmt_8:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_8(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_8(int16_t, int32_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i32-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int32_t_to_int8_t_fmt_8:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_8(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_8(int8_t, int32_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,28 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int16_t_fmt_8:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** li\s+[atx][0-9]+,\s*-32768
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*16
- ** sraiw\s+a0,\s*a0,\s*16
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_8(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_8(int16_t, int64_t, INT16_MIN, INT16_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int32_t_fmt_8:
- ** li\s+[atx][0-9]+,\s*-2147483648
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_8(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_8(int32_t, int64_t, INT32_MIN, INT32_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_s_trunc-8-i64-to-i8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,26 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_s_trunc_int64_t_to_int8_t_fmt_8:
- ** slti\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** li\s+[atx][0-9]+,\s*-128
- ** slt\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
- ** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slliw\s+a0,\s*a0,\s*24
- ** sraiw\s+a0,\s*a0,\s*24
- ** ret
- */
  DEF_SAT_S_TRUNC_FMT_8(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_S_TRUNC_FMT_8(int8_t, int64_t, INT8_MIN, INT8_MAX)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint16_t_fmt_1:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_FMT_1(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_1(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint32_t_fmt_1:
- ** slli\s+[atx][0-9]+,\s*a0,\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** add\s+[atx][0-9]+,\s*a[01],\s*a[01]
- ** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_ADD_FMT_1(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_1(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint64_t_fmt_1:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_ADD_FMT_1(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_1(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint8_t_fmt_1:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_FMT_1(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_1(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint16_t_fmt_2:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_FMT_2(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_2(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint32_t_fmt_2:
- ** slli\s+[atx][0-9]+,\s*a0,\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** add\s+[atx][0-9]+,\s*a[01],\s*a[01]
- ** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_ADD_FMT_2(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_2(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint64_t_fmt_2:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_ADD_FMT_2(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_2(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint8_t_fmt_2:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_FMT_2(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_2(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint16_t_fmt_3:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_FMT_3(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_3(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint32_t_fmt_3:
- ** slli\s+[atx][0-9]+,\s*a0,\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** add\s+[atx][0-9]+,\s*a[01],\s*a[01]
- ** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_ADD_FMT_3(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_3(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint64_t_fmt_3:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_ADD_FMT_3(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_3(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint8_t_fmt_3:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_FMT_3(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_3(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint16_t_fmt_4:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_FMT_4(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_4(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint32_t_fmt_4:
- ** slli\s+[atx][0-9]+,\s*a0,\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** add\s+[atx][0-9]+,\s*a[01],\s*a[01]
- ** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_ADD_FMT_4(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_4(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint64_t_fmt_4:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_ADD_FMT_4(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_4(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint8_t_fmt_4:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_FMT_4(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_4(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint16_t_fmt_5:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_FMT_5(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_5(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint32_t_fmt_5:
- ** slli\s+[atx][0-9]+,\s*a0,\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** add\s+[atx][0-9]+,\s*a[01],\s*a[01]
- ** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_ADD_FMT_5(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_5(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint64_t_fmt_5:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_ADD_FMT_5(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_5(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint8_t_fmt_5:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_FMT_5(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_5(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint16_t_fmt_6:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_FMT_6(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_6(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint32_t_fmt_6:
- ** slli\s+[atx][0-9]+,\s*a0,\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** add\s+[atx][0-9]+,\s*a[01],\s*a[01]
- ** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_ADD_FMT_6(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_6(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint64_t_fmt_6:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_ADD_FMT_6(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_6(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint8_t_fmt_6:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_FMT_6(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_6(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint32_t_uint16_t_fmt_7:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_FMT_7(uint32_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_7(uint32_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint64_t_uint16_t_fmt_7:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_FMT_7(uint64_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_7(uint64_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint64_t_uint32_t_fmt_7:
- ** slli\s+[atx][0-9]+,\s*a0,\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** add\s+[atx][0-9]+,\s*a[01],\s*a[01]
- ** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_ADD_FMT_7(uint64_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_7(uint64_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint16_t_uint8_t_fmt_7:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_FMT_7(uint16_t, uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_7(uint16_t, uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint32_t_uint8_t_fmt_7:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_FMT_7(uint32_t, uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_7(uint32_t, uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_uint64_t_uint8_t_fmt_7:
- ** add\s+[atx][0-9]+,\s*a0,\s*a1
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_FMT_7(uint64_t, uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_FMT_7(uint64_t, uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm3_uint16_t_fmt_1:
- ** addi\s+[atx][0-9]+,\s*a0,\s*3
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_1(uint16_t, 3)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_1(uint16_t, 3)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm7_uint32_t_fmt_1:
- ** slli\s+[atx][0-9]+,\s*a0,\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** addi\s+[atx][0-9]+,\s*a0,\s*7
- ** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_1(uint32_t, 7)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_1(uint32_t, 7)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm8_uint64_t_fmt_1:
- ** addi\s+[atx][0-9]+,\s*a0,\s*8
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_1(uint64_t, 8)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_1(uint64_t, 8)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm9_uint8_t_fmt_1:
- ** addi\s+[atx][0-9]+,\s*a0,\s*9
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_1(uint8_t, 9)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_1(uint8_t, 9)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm3_uint16_t_fmt_2:
- ** addi\s+[atx][0-9]+,\s*a0,\s*3
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_2(uint16_t, 3)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_2(uint16_t, 3)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm7_uint32_t_fmt_2:
- ** slli\s+[atx][0-9]+,\s*a0,\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** addi\s+[atx][0-9]+,\s*a0,\s*7
- ** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_2(uint32_t, 7)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_2(uint32_t, 7)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm8_uint64_t_fmt_2:
- ** addi\s+[atx][0-9]+,\s*a0,\s*8
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_2(uint64_t, 8)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_2(uint64_t, 8)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm9_uint8_t_fmt_2:
- ** addi\s+[atx][0-9]+,\s*a0,\s*9
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_2(uint8_t, 9)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_2(uint8_t, 9)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm3_uint16_t_fmt_3:
- ** addi\s+[atx][0-9]+,\s*a0,\s*3
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_3(uint16_t, 3)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_3(uint16_t, 3)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm7u_uint32_t_fmt_3:
- ** slli\s+[atx][0-9]+,\s*a0,\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** addi\s+[atx][0-9]+,\s*a0,\s*7
- ** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_3(uint32_t, 7u)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_3(uint32_t, 7u)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm8ull_uint64_t_fmt_3:
- ** addi\s+[atx][0-9]+,\s*a0,\s*8
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_3(uint64_t, 8ull)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_3(uint64_t, 8ull)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm9_uint8_t_fmt_3:
- ** addi\s+[atx][0-9]+,\s*a0,\s*9
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_3(uint8_t, 9)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_3(uint8_t, 9)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm3_uint16_t_fmt_4:
- ** addi\s+[atx][0-9]+,\s*a0,\s*3
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_4(uint16_t, 3)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_4(uint16_t, 3)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm7u_uint32_t_fmt_4:
- ** slli\s+[atx][0-9]+,\s*a0,\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** addi\s+[atx][0-9]+,\s*a0,\s*7
- ** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_4(uint32_t, 7u)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_4(uint32_t, 7u)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm8ull_uint64_t_fmt_4:
- ** addi\s+[atx][0-9]+,\s*a0,\s*8
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_4(uint64_t, 8ull)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_4(uint64_t, 8ull)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_add_imm9_uint8_t_fmt_4:
- ** addi\s+[atx][0-9]+,\s*a0,\s*9
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** neg\s+[atx][0-9]+,\s*[atx][0-9]+
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_ADD_IMM_FMT_4(uint8_t, 9)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_ADD_IMM_FMT_4(uint8_t, 9)
  
  /* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u16-from-u128.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u16-from-u128.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u16-from-u128.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u16-from-u128.c	Sun Jul 20 22:32:25 2025
***************
*** 9,11 ****
--- 9,12 ----
  DEF_SAT_U_MUL_FMT_1_WRAP(NT, WT)
  
  /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u16-from-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u16-from-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u16-from-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_1_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u32-from-u128.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u32-from-u128.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u32-from-u128.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u32-from-u128.c	Sun Jul 20 22:32:25 2025
***************
*** 9,11 ****
--- 9,12 ----
  DEF_SAT_U_MUL_FMT_1_WRAP(NT, WT)
  
  /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u32-from-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u32-from-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u32-from-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_1_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u64-from-u128.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u64-from-u128.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u64-from-u128.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u64-from-u128.c	Sun Jul 20 22:32:25 2025
***************
*** 9,11 ****
--- 9,12 ----
  DEF_SAT_U_MUL_FMT_1_WRAP(NT, WT)
  
  /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u128.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u128.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u128.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u128.c	Sun Jul 20 22:32:25 2025
***************
*** 9,11 ****
--- 9,12 ----
  DEF_SAT_U_MUL_FMT_1_WRAP(NT, WT)
  
  /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_1_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u16-from-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u16-from-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u16-from-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_1_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_1_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u32-from-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u32-from-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u32-from-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_1_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_1_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u8-from-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u8-from-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u8-from-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_1_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_1_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_1:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_1(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_1(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_1:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_1(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_1(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_1:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_1(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_1(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_1:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_1(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_1(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_10:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_10(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_10(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_10:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_10(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_10(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_10:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_10(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_10(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-10-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_10:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_10(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_10(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_11:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_11(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_11(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_11:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_11(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_11(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_11:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_11(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_11(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-11-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_11:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_11(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_11(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_12:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_12(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_12(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_12:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_12(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_12(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_12:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_12(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_12(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-12-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_12:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_12(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_12(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_2:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_2(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_2(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_2:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_2(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_2(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_2:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_2(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_2(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-2-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_2:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_2(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_2(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_3:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_3(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_3(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_3:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_3(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_3(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_3:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_3(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_3(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-3-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_3:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_3(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_3(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_4:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_4(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_4(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_4:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_4(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_4(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_4:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_4(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_4(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-4-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_4:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_4(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_4(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_5:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_5(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_5(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_5:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_5(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_5(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_5:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_5(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_5(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-5-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_5:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_5(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_5(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_6:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_6(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_6(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_6:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_6(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_6(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_6:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_6(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_6(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-6-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_6:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_6(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_6(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_7:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_7(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_7(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_7:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_7(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_7(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_7:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_7(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_7(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-7-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_7:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_7(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_7(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_8:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_8(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_8(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_8:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_8(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_8(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_8:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_8(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_8(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-8-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_8:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_8(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_8(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint16_t_fmt_9:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_SUB_FMT_9(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_9(uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint32_t_fmt_9:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** slli\s+a1,\s*a1,\s*32
- ** srli\s+a1,\s*a1,\s*32
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_SUB_FMT_9(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_9(uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint64_t_fmt_9:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*a1
- ** addi\s+a0,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** ret
- */
  DEF_SAT_U_SUB_FMT_9(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_9(uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-9-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_uint8_t_fmt_9:
- ** sub\s+[atx][0-9]+,\s*a0,\s*a1
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  DEF_SAT_U_SUB_FMT_9(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_FMT_9(uint8_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm32768_uint16_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*32768
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint16_t, 32768)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint16_t, 32768)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm65533_uint16_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-3
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint16_t, 65533)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint16_t, 65533)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-3.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-3.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-3.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-3.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm65534_uint16_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-2
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint16_t, 65534)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint16_t, 65534)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-4.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-4.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16-4.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm1_uint16_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*1
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint16_t, 1)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint16_t, 1)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm6_uint16_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*6
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint16_t, 6)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint16_t, 6)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,23 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm2147483648_uint32_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint32_t, 2147483648)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint32_t, 2147483648)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,24 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm68719476732_uint32_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-4
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint32_t, 68719476732)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint32_t, 68719476732)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-3.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-3.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-3.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-3.c	Sun Jul 20 22:32:25 2025
***************
*** 1,24 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm4294967294_uint32_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-2
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint32_t, 4294967294)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint32_t, 4294967294)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-4.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-4.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32-4.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm1_uint32_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*1
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint32_t, 1)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint32_t, 1)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm255_uint32_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*255
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint32_t, 255)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint32_t, 255)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm18446744073709551614u_uint64_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*-2
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint64_t, 18446744073709551614u)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint64_t, 18446744073709551614u)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm1_uint64_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*1
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint64_t, 1)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint64_t, 1)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm82_uint64_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*82
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint64_t, 82)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint64_t, 82)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm128_uint8_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*128
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint8_t, 128)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint8_t, 128)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm253_uint8_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*253
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint8_t, 253)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint8_t, 253)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-3.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-3.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-3.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-3.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm254_uint8_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*254
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint8_t, 254)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint8_t, 254)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-4.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-4.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8-4.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm1_uint8_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*1
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint8_t, 1)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint8_t, 1)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-1-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm11_uint8_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*11
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint8_t, 11)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_1(uint8_t, 11)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm32768_uint16_t_fmt_2:
- ** li\s+[atx][0-9]+,\s*32768
- ** sub\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint16_t, 32768)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint16_t, 32768)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm65533_uint16_t_fmt_2:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-3
- ** sub\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint16_t, 65533)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint16_t, 65533)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-3.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-3.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-3.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16-3.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm1_uint16_t_fmt_2:
- ** snez\s+[atx][0-9]+,\s*a0
- ** subw\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint16_t, 1)
  
  /* { dg-final { scan-tree-dump-not ".SAT_SUB" "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint16_t, 1)
  
  /* { dg-final { scan-tree-dump-not ".SAT_SUB" "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm6_uint16_t_fmt_2:
- ** addi\s+[atx][0-9]+,\s*a0,\s*-6
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*6
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint16_t, 6)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint16_t, 6)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,23 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm2147483648_uint32_t_fmt_2:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** li\s+[atx][0-9]+,\s*1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** sub\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 2147483648)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 2147483648)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,24 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm68719476732_uint32_t_fmt_2:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** li\s+[atx][0-9]+,\s*1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-4
- ** sub\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 68719476732)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 68719476732)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-3.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-3.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-3.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32-3.c	Sun Jul 20 22:32:25 2025
***************
*** 1,16 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm1_uint32_t_fmt_2:
- ** snez\s+[atx][0-9]+,\s*a0
- ** subw\s+a0,\s*a0,\s*[atx][0-9]+
- ** ret
- */
- 
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 1)
  
  /* { dg-final { scan-tree-dump-not ".SAT_SUB" "optimized" } } */
--- 1,8 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 1)
  
  /* { dg-final { scan-tree-dump-not ".SAT_SUB" "optimized" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm255_uint32_t_fmt_2:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** addi\s+[atx][0-9]+,\s*a0,\s*-255
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*255
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 255)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 255)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,16 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm1_uint64_t_fmt_2:
- ** snez\s+[atx][0-9]+,\s*a0
- ** sub\s+a0,\s*a0,\s*[atx][0-9]+
- ** ret
- */
- 
  DEF_SAT_U_SUB_IMM_FMT_2(uint64_t, 1)
  
  /* { dg-final { scan-tree-dump-not ".SAT_SUB" "optimized" } } */
--- 1,8 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint64_t, 1)
  
  /* { dg-final { scan-tree-dump-not ".SAT_SUB" "optimized" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm82_uint64_t_fmt_2:
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-82
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*82
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint64_t, 82)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint64_t, 82)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm128_uint8_t_fmt_2:
- ** addi\s+[atx][0-9]+,\s*a0,\s*-128
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*128
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint8_t, 128)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint8_t, 128)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm253_uint8_t_fmt_2:
- ** addi\s+[atx][0-9]+,\s*a0,\s*-253
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*253
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint8_t, 253)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint8_t, 253)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-3.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-3.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-3.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8-3.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm1_uint8_t_fmt_2:
- ** snez\s+[atx][0-9]+,\s*a0
- ** subw\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
- 
  DEF_SAT_U_SUB_IMM_FMT_2(uint8_t, 1)
  
  /* { dg-final { scan-tree-dump-not ".SAT_SUB" "optimized" } } */
--- 1,8 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint8_t, 1)
  
  /* { dg-final { scan-tree-dump-not ".SAT_SUB" "optimized" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-2-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm11_uint8_t_fmt_2:
- ** addi\s+[atx][0-9]+,\s*a0,\s*-11
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*11
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint8_t, 11)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint8_t, 11)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm32769_uint16_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*32768
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint16_t, 32769)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint16_t, 32769)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm65533_uint16_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-3
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint16_t, 65533)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint16_t, 65533)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm6_uint16_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*6
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint16_t, 6)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint16_t, 6)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,24 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm2147483649_uint32_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint32_t, 2147483649)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint32_t, 2147483649)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,24 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm68719476732_uint32_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-4
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint32_t, 68719476732)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint32_t, 68719476732)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm255_uint32_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*255
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint32_t, 255)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint32_t, 255)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm82_uint64_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*82
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint64_t, 82)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint64_t, 82)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm134_uint8_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*134
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint8_t, 134)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint8_t, 134)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm253_uint8_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*253
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint8_t, 253)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint8_t, 253)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-3-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm11_uint8_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*11
- ** sub\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint8_t, 11)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_3(uint8_t, 11)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm32768_uint16_t_fmt_4:
- ** li\s+[atx][0-9]+,\s*32768
- ** sub\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint16_t, 32768)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint16_t, 32768)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,22 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm65533_uint16_t_fmt_4:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-3
- ** sub\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint16_t, 65533)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint16_t, 65533)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm6_uint16_t_fmt_4:
- ** addi\s+[atx][0-9]+,\s*a0,\s*-6
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*6
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint16_t, 6)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint16_t, 6)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,23 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm2147483648_uint32_t_fmt_2:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** li\s+[atx][0-9]+,\s*1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
- ** sub\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 2147483648)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 2147483648)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,24 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm68719476732_uint32_t_fmt_2:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** li\s+[atx][0-9]+,\s*1
- ** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-4
- ** sub\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 68719476732)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint32_t, 68719476732)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,21 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm255_uint32_t_fmt_4:
- ** slli\s+a0,\s*a0,\s*32
- ** srli\s+a0,\s*a0,\s*32
- ** addi\s+[atx][0-9]+,\s*a0,\s*-255
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*255
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** sext\.w\s+a0,\s*a0
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint32_t, 255)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint32_t, 255)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm82_uint64_t_fmt_2:
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-82
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*82
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint64_t, 82)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_2(uint64_t, 82)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-1.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-1.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-1.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm128_uint8_t_fmt_4:
- ** addi\s+[atx][0-9]+,\s*a0,\s*-128
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*128
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint8_t, 128)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint8_t, 128)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-2.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8-2.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm253_uint8_t_fmt_4:
- ** addi\s+[atx][0-9]+,\s*a0,\s*-253
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*253
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint8_t, 253)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint8_t, 253)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_sub_imm-4-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_sub_imm11_uint8_t_fmt_4:
- ** addi\s+[atx][0-9]+,\s*a0,\s*-11
- ** sltiu\s+a0,\s*[atx][0-9]+,\s*11
- ** addi\s+a0,\s*a0,\s*-1
- ** and\s+a0,\s*a0,\s*[atx][0-9]+
- ** andi\s+a0,\s*a0,\s*0xff
- ** ret
- */
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint8_t, 11)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
--- 1,10 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  
  DEF_SAT_U_SUB_IMM_FMT_4(uint8_t, 11)
  
  /* { dg-final { scan-tree-dump-times ".SAT_SUB " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint32_t_to_uint16_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_1(uint16_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_1(uint16_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint32_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_1(uint32_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_1(uint32_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint32_t_to_uint8_t_fmt_1:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_1(uint8_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_1(uint8_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-1-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint16_t_to_uint8_t_fmt_1:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_1(uint8_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_1(uint8_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint16_t_fmt_1:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_1(uint16_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_1(uint16_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint16_t_to_uint8_t_fmt_2:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_2(uint8_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_2(uint8_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint32_t_to_uint16_t_fmt_2:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_2(uint16_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_2(uint16_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-2-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint8_t_fmt_1:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_1(uint8_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_1(uint8_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint32_t_to_uint8_t_fmt_2:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_2(uint8_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_2(uint8_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint8_t_fmt_2:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_2(uint8_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_2(uint8_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint16_t_fmt_2:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_2(uint16_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_2(uint16_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-3-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint32_t_fmt_2:
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_2(uint32_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_2(uint32_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint32_t_to_uint16_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_3(uint16_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_3(uint16_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint32_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_3(uint32_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_3(uint32_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint32_t_to_uint8_t_fmt_3:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_3(uint8_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_3(uint8_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-4-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint16_t_to_uint8_t_fmt_3:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_3(uint8_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_3(uint8_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint16_t_fmt_3:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_3(uint16_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_3(uint16_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint16_t_to_uint8_t_fmt_4:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_4(uint8_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_4(uint8_t, uint16_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint32_t_to_uint16_t_fmt_4:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_4(uint16_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_4(uint16_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-5-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint8_t_fmt_3:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_3(uint8_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_3(uint8_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u16.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u16.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u16.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u16.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint32_t_to_uint8_t_fmt_4:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_4(uint8_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_4(uint8_t, uint32_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u32.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u32.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u32.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u32.c	Sun Jul 20 22:32:25 2025
***************
*** 1,17 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint8_t_fmt_4:
- ** sltiu\s+[atx][0-9]+,\s*a0,\s*255
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_4(uint8_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_4(uint8_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u64.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u64.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u64.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u64.c	Sun Jul 20 22:32:25 2025
***************
*** 1,20 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint16_t_fmt_4:
- ** li\s+[atx][0-9]+,\s*65536
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** slli\s+a0,\s*a0,\s*48
- ** srli\s+a0,\s*a0,\s*48
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_4(uint16_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_4(uint16_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u8.c gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u8.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u8.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/riscv/sat/sat_u_trunc-6-u8.c	Sun Jul 20 22:32:25 2025
***************
*** 1,19 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
! /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "sat_arith.h"
  
- /*
- ** sat_u_trunc_uint64_t_to_uint32_t_fmt_4:
- ** li\s+[atx][0-9]+,\s*-1
- ** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
- ** sltu\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
- ** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
- ** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
- ** sext.w\s+a0,\s*a0
- ** ret
- */
  DEF_SAT_U_TRUNC_FMT_4(uint32_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
  
  #include "sat_arith.h"
  
  DEF_SAT_U_TRUNC_FMT_4(uint32_t, uint64_t)
  
  /* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c gcc-16-20250720/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c	Sun Jul 20 22:32:25 2025
***************
*** 3,10 ****
  
  #include "isfinite-isinf-isnormal-signbit.h"
  
! /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,1365} 1 } } SIGNBIT long double */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 1 } } SIGNBIT _Decimal128 */
  /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,4032} 1 } } ISFINITE long double */
  /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,4032} 1 } } ISFINITE _Decimal128 */
  /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,48} 1 } } ISINF long double */
--- 3,12 ----
  
  #include "isfinite-isinf-isnormal-signbit.h"
  
! /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,1365} 0 { target lp64 } } } SIGNBIT long double */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 0 { target lp64 } } } SIGNBIT _Decimal128 */
! /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,1365} 1 { target { ! lp64 } } } } SIGNBIT long double */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 1 { target { ! lp64 } } } } SIGNBIT _Decimal128 */
  /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,4032} 1 } } ISFINITE long double */
  /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,4032} 1 } } ISFINITE _Decimal128 */
  /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,48} 1 } } ISINF long double */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c gcc-16-20250720/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c	Sun Jul 13 22:32:41 2025
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c	Sun Jul 20 22:32:25 2025
***************
*** 3,10 ****
  
  #include "isfinite-isinf-isnormal-signbit.h"
  
! /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,1365} 1 } } */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 1 } } */
  /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,4032} 1 } } */
  /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,4032} 1 } } */
  /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,48} 1 } } */
--- 3,12 ----
  
  #include "isfinite-isinf-isnormal-signbit.h"
  
! /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,1365} 0 { target lp64 } } } */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 0 { target lp64 } } } */
! /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,1365} 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 1 { target { ! lp64 } } } } */
  /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,4032} 1 } } */
  /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,4032} 1 } } */
  /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,48} 1 } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit-1.c gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit-1.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -march=z900 -save-temps" } */
+ /* { dg-final { scan-assembler-times {\ttceb\t} 2 } } */
+ /* { dg-final { scan-assembler-times {\ttcdb\t} 2 } } */
+ /* { dg-final { scan-assembler-times {\ttcxb\t} 2 } } */
+ 
+ /* Binary Floating-Point */
+ 
+ __attribute__ ((noipa))
+ int signbit_float_reg (float x) { return __builtin_signbit (x); }
+ __attribute__ ((noipa))
+ int signbit_float_mem (float *x) { return __builtin_signbit (*x); }
+ __attribute__ ((noipa))
+ int signbit_double_reg (double x) { return __builtin_signbit (x); }
+ __attribute__ ((noipa))
+ int signbit_double_mem (double *x) { return __builtin_signbit (*x); }
+ 
+ __attribute__ ((noipa))
+ int
+ signbit_longdouble_reg (long double x)
+ {
+   __asm__ ("" : "+f" (x));
+   return __builtin_signbit (x);
+ }
+ 
+ __attribute__ ((noipa))
+ int signbit_longdouble_mem (long double *x) { return __builtin_signbit (*x); }
+ 
+ #include "signbit.h"
+ TEST (float, float, __builtin_inff(), __builtin_nanf("42"), 0.f, 42.f)
+ TEST (double, double, __builtin_inf(), __builtin_nan("42"), 0., 42.)
+ TEST (longdouble, long double, __builtin_infl(), __builtin_nanl("42"), 0.L, 42.L)
+ 
+ int
+ main (void)
+ {
+   test_float ();
+   test_double ();
+   test_longdouble ();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit-2.c gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit-2.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit-2.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -march=z9-ec -mzarch -save-temps" } */
+ /* { dg-final { scan-assembler-times {\ttdcet\t} 2 } } */
+ /* { dg-final { scan-assembler-times {\ttdcdt\t} 2 } } */
+ /* { dg-final { scan-assembler-times {\ttdcxt\t} 2 } } */
+ 
+ /* Decimal Floating-Point */
+ 
+ __attribute__ ((noipa))
+ int signbit_dec32_reg (_Decimal32 x) { return __builtin_signbit (x); }
+ __attribute__ ((noipa))
+ int signbit_dec32_mem (_Decimal32 *x) { return __builtin_signbit (*x); }
+ __attribute__ ((noipa))
+ int signbit_dec64_reg (_Decimal64 x) { return __builtin_signbit (x); }
+ __attribute__ ((noipa))
+ int signbit_dec64_mem (_Decimal64 *x) { return __builtin_signbit (*x); }
+ 
+ __attribute__ ((noipa))
+ int
+ signbit_dec128_reg (_Decimal128 x)
+ {
+   __asm__ ("" : "+f" (x));
+   return __builtin_signbit (x);
+ }
+ 
+ __attribute__ ((noipa))
+ int signbit_dec128_mem (_Decimal128 *x) { return __builtin_signbit (*x); }
+ 
+ #include "signbit.h"
+ TEST (dec32, _Decimal32, __builtin_infd32(), __builtin_nand32("42"), 0.df, 42.df)
+ TEST (dec64, _Decimal64, __builtin_infd64(), __builtin_nand64("42"), 0.dd, 42.dd)
+ TEST (dec128, _Decimal128, __builtin_infd128(), __builtin_nand128("42"), 0.dl, 42.dl)
+ 
+ int
+ main (void)
+ {
+   test_dec32 ();
+   test_dec64 ();
+   test_dec128 ();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit-3.c gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit-3.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit-3.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,152 ----
+ /* { dg-do run { target lp64 } } */
+ /* { dg-options "-O2 -march=z10 -save-temps" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ /* Binary Floating-Point */
+ 
+ /*
+ ** signbit_float_reg:
+ **	lgdr	(%r[0-9]+),%f0
+ **	srlg	(%r[0-9]+),\1,63
+ **	lgfr	%r2,\2
+ **	br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_float_reg (float x) { return __builtin_signbit (x); }
+ 
+ /*
+ ** signbit_float_mem:
+ **    l	(%r[0-9]+),0\(%r2\)
+ **    srl	\1,31
+ **    lgfr	%r2,\1
+ **    br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_float_mem (float *x) { return __builtin_signbit (*x); }
+ 
+ /*
+ ** signbit_double_reg:
+ **    lgdr	(%r[0-9]+),%f0
+ **    srlg	%r2,\1,63
+ **    br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_double_reg (double x) { return __builtin_signbit (x); }
+ 
+ /*
+ ** signbit_double_mem:
+ **    lg	(%r[0-9]+),0\(%r2\)
+ **    srlg	%r2,\1,63
+ **    br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_double_mem (double *x) { return __builtin_signbit (*x); }
+ 
+ /*
+ ** signbit_longdouble_reg:
+ **     ld	%f0,0\(%r2\)
+ **     ld	%f2,8\(%r2\)
+ **     lgdr	(%r[0-9]+),%f0
+ **     srlg	%r2,\1,63
+ **     br	%r14
+ */
+ __attribute__ ((noipa))
+ int
+ signbit_longdouble_reg (long double x)
+ {
+   __asm__ ("" : "+f" (x));
+   return __builtin_signbit (x);
+ }
+ 
+ /*
+ ** signbit_longdouble_mem:
+ **      lg	(%r[0-9]+),0\(%r2\)
+ **      srlg	%r2,\1,63
+ **      br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_longdouble_mem (long double *x) { return __builtin_signbit (*x); }
+ 
+ /* Decimal Floating-Point */
+ 
+ /*
+ ** signbit_dec32_reg:
+ **	lgdr	(%r[0-9]+),%f0
+ **	srlg	(%r[0-9]+),\1,63
+ **	lgfr	%r2,\2
+ **	br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_dec32_reg (_Decimal32 x) { return __builtin_signbit (x); }
+ 
+ /*
+ ** signbit_dec32_mem:
+ **    l	(%r[0-9]+),0\(%r2\)
+ **    srl	\1,31
+ **    lgfr	%r2,\1
+ **    br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_dec32_mem (_Decimal32 *x) { return __builtin_signbit (*x); }
+ 
+ /*
+ ** signbit_dec64_reg:
+ **    lgdr	(%r[0-9]+),%f0
+ **    srlg	%r2,\1,63
+ **    br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_dec64_reg (_Decimal64 x) { return __builtin_signbit (x); }
+ 
+ /*
+ ** signbit_dec64_mem:
+ **    lg	(%r[0-9]+),0\(%r2\)
+ **    srlg	%r2,\1,63
+ **    br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_dec64_mem (_Decimal64 *x) { return __builtin_signbit (*x); }
+ 
+ /*
+ ** signbit_dec128_reg:
+ **     ld	%f0,0\(%r2\)
+ **     ld	%f2,8\(%r2\)
+ **     lgdr	(%r[0-9]+),%f0
+ **     srlg	%r2,\1,63
+ **     br	%r14
+ */
+ __attribute__ ((noipa))
+ int
+ signbit_dec128_reg (_Decimal128 x)
+ {
+   __asm__ ("" : "+f" (x));
+   return __builtin_signbit (x);
+ }
+ 
+ /*
+ ** signbit_dec128_mem:
+ **      lg	(%r[0-9]+),0\(%r2\)
+ **      srlg	%r2,\1,63
+ **      br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_dec128_mem (_Decimal128 *x) { return __builtin_signbit (*x); }
+ 
+ #include "signbit.h"
+ TEST (float, float, __builtin_inff(), __builtin_nanf("42"), 0.f, 42.f)
+ TEST (double, double, __builtin_inf(), __builtin_nan("42"), 0., 42.)
+ TEST (longdouble, long double, __builtin_infl(), __builtin_nanl("42"), 0.L, 42.L)
+ TEST (dec32, _Decimal32, __builtin_infd32(), __builtin_nand32("42"), 0.df, 42.df)
+ TEST (dec64, _Decimal64, __builtin_infd64(), __builtin_nand64("42"), 0.dd, 42.dd)
+ TEST (dec128, _Decimal128, __builtin_infd128(), __builtin_nand128("42"), 0.dl, 42.dl)
+ 
+ int
+ main (void)
+ {
+   test_float ();
+   test_double ();
+   test_longdouble ();
+   test_dec32 ();
+   test_dec64 ();
+   test_dec128 ();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit-4.c gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit-4.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit-4.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,55 ----
+ /* { dg-do run { target lp64 } } */
+ /* { dg-require-effective-target s390_vx } */
+ /* { dg-options "-O2 -march=z13 -save-temps" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ /* Binary Floating-Point */
+ 
+ /*
+ ** signbit_float_reg:
+ **    vlgvf	(%r[0-9]+),%v0,0
+ **    risbgn	%r2,\1,64-1,128\+63,32\+1
+ **    br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_float_reg (float x) { return __builtin_signbit (x); }
+ 
+ /*
+ ** signbit_float_mem:
+ **    l	(%r[0-9]+),0\(%r2\)
+ **    risbgn	%r2,\1,64-1,128\+63,32\+1
+ **    br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_float_mem (float *x) { return __builtin_signbit (*x); }
+ 
+ /* Decimal Floating-Point */
+ 
+ /*
+ ** signbit_dec32_reg:
+ **    vlgvf	(%r[0-9]+),%v0,0
+ **    risbgn	%r2,\1,64-1,128\+63,32\+1
+ **    br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_dec32_reg (_Decimal32 x) { return __builtin_signbit (x); }
+ 
+ /*
+ ** signbit_dec32_mem:
+ **    l	(%r[0-9]+),0\(%r2\)
+ **    risbgn	%r2,\1,64-1,128\+63,32\+1
+ **    br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_dec32_mem (_Decimal32 *x) { return __builtin_signbit (*x); }
+ 
+ #include "signbit.h"
+ TEST (float, float, __builtin_inff(), __builtin_nanf("42"), 0.f, 42.f)
+ TEST (dec32, _Decimal32, __builtin_infd32(), __builtin_nand32("42"), 0.df, 42.df)
+ 
+ int
+ main (void)
+ {
+   test_float ();
+   test_dec32 ();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit-5.c gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit-5.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit-5.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,35 ----
+ /* { dg-do run { target lp64 } } */
+ /* { dg-options "-O2 -march=z14 -save-temps" } */
+ 
+ /*
+ ** signbit_longdouble_reg:
+ **      ld	%f0,0(%r2);ld	%f2,8+0(%r2)
+ **      lgdr	(%r[0-9]+),%f0
+ **      srlg	%r2,\1,63
+ **      br	%r14
+ */
+ __attribute__ ((noipa))
+ int
+ signbit_longdouble_reg (long double x)
+ {
+   __asm__ ("" : "+f" (x));
+   return __builtin_signbit (x);
+ }
+ 
+ /*
+ ** signbit_longdouble_mem:
+ **      lg	(%r[0-9]+),0\(%r2\)
+ **      srlg	%r2,\1,63
+ **      br	%r14
+ */
+ __attribute__ ((noipa))
+ int signbit_longdouble_mem (long double *x) { return __builtin_signbit (*x); }
+ 
+ #include "signbit.h"
+ TEST (longdouble, long double, __builtin_infl(), __builtin_nanl("42"), 0.L, 42.L)
+ 
+ int
+ main (void)
+ {
+   test_longdouble ();
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit.h gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit.h
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/signbit.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/signbit.h	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,36 ----
+ #define TEST(T, U, I, N, C0, C42)                                              \
+   void test_##T (void)                                                         \
+   {                                                                            \
+     U tmp;                                                                     \
+     int x;                                                                     \
+                                                                                \
+     x = signbit_##T##_reg(C42);                                                \
+     x += signbit_##T##_reg(C0);                                                \
+     x += signbit_##T##_reg(I);                                                 \
+     x += signbit_##T##_reg(N);                                                 \
+     tmp = C42;                                                                 \
+     x += signbit_##T##_mem(&tmp);                                              \
+     tmp = C0;                                                                  \
+     x += signbit_##T##_mem(&tmp);                                              \
+     tmp = I;                                                                   \
+     x += signbit_##T##_mem(&tmp);                                              \
+     tmp = N;                                                                   \
+     x += signbit_##T##_mem(&tmp);                                              \
+     if (x != 0)                                                                \
+       __builtin_abort();                                                       \
+                                                                                \
+     x = signbit_##T##_reg(-C42);                                               \
+     x += signbit_##T##_reg(-C0);                                               \
+     x += signbit_##T##_reg(-I);                                                \
+     x += signbit_##T##_reg(-N);                                                \
+     tmp = -C42;                                                                \
+     x += signbit_##T##_mem(&tmp);                                              \
+     tmp = -C0;                                                                 \
+     x += signbit_##T##_mem(&tmp);                                              \
+     tmp = -I;                                                                  \
+     x += signbit_##T##_mem(&tmp);                                              \
+     tmp = -N;                                                                  \
+     x += signbit_##T##_mem(&tmp);                                              \
+     if (x != 8)                                                                \
+       __builtin_abort();                                                       \
+   }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/vector/reduc-binops-1.c gcc-16-20250720/gcc/testsuite/gcc.target/s390/vector/reduc-binops-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/vector/reduc-binops-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/vector/reduc-binops-1.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mzarch -march=z13 -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ #define T(X,N)                                  \
+   unsigned X                                    \
+   reduce_and_##X (unsigned X *in)               \
+   {                                             \
+   unsigned X acc = (unsigned X)-1;              \
+   for (int i = 0; i < N; i++)                   \
+     acc &= in[i];                               \
+   return acc;                                   \
+   }                                             \
+   unsigned X                                    \
+   reduce_ior_##X (unsigned X *in)               \
+   {                                             \
+   unsigned X acc = 0;                           \
+   for (int i = 0; i < N; i++)                   \
+     acc |= in[i];                               \
+   return acc;                                   \
+   }                                             \
+   unsigned X                                    \
+   redue_xor_##X (unsigned X *in)                \
+   {                                             \
+   unsigned X acc = 0;                           \
+   for (int i = 0; i < N; i++)                   \
+     acc ^= in[i];                               \
+   return acc;                                   \
+   }
+ 
+ T(char,16)
+ 
+ T(short, 8)
+ 
+ T(int,4)
+ 
+ T(long,4)
+ 
+ /* { dg-final { scan-tree-dump-times "\.REDUC_AND" 4 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "\.REDUC_IOR" 4 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "\.REDUC_XOR" 4 "optimized" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/vector/reduc-minmax-1.c gcc-16-20250720/gcc/testsuite/gcc.target/s390/vector/reduc-minmax-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/vector/reduc-minmax-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/vector/reduc-minmax-1.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,234 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mzarch -march=z14 -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ #define MAX(a, b) ((a) > (b) ? (a) : (b))
+ #define MIN(a, b) ((a) > (b) ? (b) : (a))
+ 
+ /* unsigned integers */
+ 
+ unsigned char
+ reduce_umax_char (unsigned char *p)
+ {
+   unsigned char res = p[0];
+   for (int i = 0; i < 16; i++)
+     res = MAX (res, p[i]);
+   return res;
+ }
+ 
+ unsigned char
+ reduce_umin_char (unsigned char *p)
+ {
+   unsigned char res = p[0];
+   for (int i = 0; i < 16; i++)
+     res = MIN (res, p[i]);
+   return res;
+ }
+ 
+ unsigned short
+ reduce_umax_short (unsigned short *p)
+ {
+   unsigned short res = p[0];
+   for (int i = 0; i < 8; i++)
+     res = MAX (res, p[i]);
+   return res;
+ }
+ 
+ unsigned short
+ reduce_umin_short (unsigned short *p)
+ {
+   unsigned short res = p[0];
+   for (int i = 0; i < 8; i++)
+     res = MIN (res, p[i]);
+   return res;
+ }
+ 
+ unsigned int
+ reduce_umax_int (unsigned int* p)
+ {
+   unsigned int res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MAX (res, p[i]);
+   return res;
+ }
+ 
+ unsigned int
+ reduce_umin_int (unsigned int* p)
+ {
+   unsigned int res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MIN(res, p[i]);
+   return res;
+ }
+ 
+ unsigned long
+ reduce_umax_long (unsigned long* p)
+ {
+   unsigned long res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MAX (res, p[i]);
+   return res;
+ }
+ 
+ unsigned long
+ reduce_umin_long (unsigned long* p)
+ {
+   unsigned long res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MIN(res, p[i]);
+   return res;
+ }
+ 
+ /* signed integers */
+ 
+ signed char
+ reduce_smax_char (signed char *p)
+ {
+   signed char res = p[0];
+   for (int i = 0; i < 16; i++)
+     res = MAX (res, p[i]);
+   return res;
+ }
+ 
+ signed char
+ reduce_smin_char (signed char *p)
+ {
+   signed char res = p[0];
+   for (int i = 0; i < 16; i++)
+     res = MIN (res, p[i]);
+   return res;
+ }
+ 
+ signed short
+ reduce_smax_short (signed short *p)
+ {
+   signed short res = p[0];
+   for (int i = 0; i < 8; i++)
+     res = MAX (res, p[i]);
+   return res;
+ }
+ 
+ signed short
+ reduce_smin_short (signed short *p)
+ {
+   signed short res = p[0];
+   for (int i = 0; i < 8; i++)
+     res = MIN (res, p[i]);
+   return res;
+ }
+ 
+ signed int
+ reduce_smax_int (signed int* p)
+ {
+   signed int res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MAX (res, p[i]);
+   return res;
+ }
+ 
+ signed int
+ reduce_smin_int (signed int* p)
+ {
+   signed int res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MIN(res, p[i]);
+   return res;
+ }
+ 
+ signed long
+ reduce_smax_long (signed long* p)
+ {
+   signed long res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MAX (res, p[i]);
+   return res;
+ }
+ 
+ signed long
+ reduce_smin_long (signed long* p)
+ {
+   signed long res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MIN(res, p[i]);
+   return res;
+ }
+ 
+ float
+ __attribute__((optimize("Ofast")))
+ reduce_smax_float (float* p)
+ {
+   float res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MAX (res, p[i]);
+   return res;
+ }
+ 
+ float
+ __attribute__((optimize("Ofast")))
+ reduce_smin_float (float* p)
+ {
+   float res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MIN (res, p[i]);
+   return res;
+ }
+ 
+ double
+ __attribute__((optimize("Ofast")))
+ reduce_smax_double (double* p)
+ {
+   double res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MAX (res, p[i]);
+   return res;
+ }
+ 
+ double
+ __attribute__((optimize("Ofast")))
+ reduce_smin_double (double* p)
+ {
+   double res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = MIN (res, p[i]);
+   return res;
+ }
+ 
+ float
+ reduce_fmax_float (float* p)
+ {
+   float res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = __builtin_fmaxf (res, p[i]);
+   return res;
+ }
+ 
+ float
+ reduce_fmin_float (float* p)
+ {
+   float res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = __builtin_fminf (res, p[i]);
+   return res;
+ }
+ 
+ double
+ reduce_fmax_double (double* p)
+ {
+   double res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = __builtin_fmax (res, p[i]);
+   return res;
+ }
+ 
+ double
+ reduce_fmin_double (double* p)
+ {
+   double res = p[0];
+   for (int i = 0; i != 4; i++)
+     res = __builtin_fmin (res, p[i]);
+   return res;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\.REDUC_MAX" 10 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "\.REDUC_MIN" 10 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "\.REDUC_FMAX" 2 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "\.REDUC_FMIN" 2 "optimized" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/vector/reduc-plus-1.c gcc-16-20250720/gcc/testsuite/gcc.target/s390/vector/reduc-plus-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/vector/reduc-plus-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/vector/reduc-plus-1.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,152 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mzarch -march=z14 -ftree-vectorize -fdump-tree-optimized" } */
+ /* { dg-do run { target { s390_z14_hw } } } */
+ 
+ /* signed integers */
+ 
+ signed char
+ __attribute__((noipa, optimize("Ofast")))
+ reduce_add_char (signed char* p)
+ {
+   signed char sum = 0;
+   for (int i = 0; i != 16; i++)
+     sum += p[i];
+   return sum;
+ }
+ 
+ short
+ __attribute__((noipa, optimize("Ofast")))
+ reduce_add_short (short* p)
+ {
+   short sum = 0;
+   for (int i = 0; i != 16; i++)
+     sum += p[i];
+   return sum;
+ }
+ 
+ int
+ __attribute__((noipa, optimize("Ofast")))
+ reduce_add_int (int* p)
+ {
+   int sum = 0;
+   for (int i = 0; i != 16; i++)
+     sum += p[i];
+   return sum;
+ }
+ 
+ long
+ __attribute__((noipa, optimize("Ofast")))
+ reduce_add_long (long* p)
+ {
+   long sum = 0;
+   for (int i = 0; i != 16; i++)
+     sum += p[i];
+   return sum;
+ }
+ 
+ /* unsigned integers */
+ 
+ unsigned char
+ __attribute__((noipa, optimize("Ofast")))
+ reduce_add_uchar (unsigned char* p)
+ {
+   unsigned char sum = 0;
+   for (int i = 0; i != 16; i++)
+     sum += p[i];
+   return sum;
+ }
+ 
+ unsigned short
+ __attribute__((noipa, optimize("Ofast")))
+ reduce_add_ushort (unsigned short* p)
+ {
+   unsigned short sum = 0;
+   for (int i = 0; i != 16; i++)
+     sum += p[i];
+   return sum;
+ }
+ 
+ unsigned int
+ __attribute__((noipa, optimize("Ofast")))
+ reduce_add_uint (unsigned int* p)
+ {
+   unsigned int sum = 0;
+   for (int i = 0; i != 16; i++)
+     sum += p[i];
+   return sum;
+ }
+ 
+ unsigned long
+ __attribute__((noipa, optimize("Ofast")))
+ reduce_add_ulong (unsigned long* p)
+ {
+   unsigned long sum = 0;
+   for (int i = 0; i != 16; i++)
+     sum += p[i];
+   return sum;
+ }
+ 
+ /* floating point */
+ 
+ float
+ __attribute__((noipa, optimize("Ofast")))
+ reduce_add_float (float* p)
+ {
+   float sum = 0;
+   for (int i = 0; i != 16; i++)
+     sum += p[i];
+   return sum;
+ }
+ 
+ double
+ __attribute__((noipa, optimize("Ofast")))
+ reduce_add_double (double* p)
+ {
+   double sum = 0;
+   for (int i = 0; i != 16; i++)
+     sum += p[i];
+   return sum;
+ }
+ 
+ int
+ main()
+ {
+   signed char chararr[] = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16};
+   signed short shortarr[] = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16};
+   signed int intarr[] = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16};
+   signed long longarr[] = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16};
+ 
+   unsigned char uchararr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
+   unsigned short ushortarr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
+   unsigned int uintarr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
+   unsigned long ulongarr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
+ 
+   float floatarr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
+   double doublearr[] = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16};
+ 
+   if (reduce_add_char (chararr) != (-136 & 0xff))
+     __builtin_abort();
+   if (reduce_add_short (shortarr) != -136)
+     __builtin_abort();
+   if (reduce_add_int (intarr) != -136)
+     __builtin_abort();
+   if (reduce_add_long (longarr) != -136)
+     __builtin_abort();
+ 
+   if (reduce_add_uchar (uchararr) != 136)
+     __builtin_abort();
+   if (reduce_add_ushort (ushortarr) != 136)
+     __builtin_abort();
+   if (reduce_add_uint (uintarr) != 136)
+     __builtin_abort();
+   if (reduce_add_ulong (ulongarr) != 136)
+     __builtin_abort();
+ 
+   if (reduce_add_float (floatarr) != 136)
+     __builtin_abort();
+   if (reduce_add_double (doublearr) != -136)
+     __builtin_abort();
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\.REDUC_PLUS" 10 "optimized" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gcc.target/s390/vector/vlgv-zero-extend-1.c gcc-16-20250720/gcc/testsuite/gcc.target/s390/vector/vlgv-zero-extend-1.c
*** gcc-16-20250713/gcc/testsuite/gcc.target/s390/vector/vlgv-zero-extend-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gcc.target/s390/vector/vlgv-zero-extend-1.c	Sun Jul 20 22:32:25 2025
***************
*** 0 ****
--- 1,71 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target s390_vx } */
+ /* { dg-additional-options "-O2" } */
+ /* { dg-final { scan-assembler-not {\tllg?[fhc]r\t} } } */
+ 
+ typedef unsigned char __attribute__ ((vector_size (1))) V1QI;
+ typedef unsigned char __attribute__ ((vector_size (2))) V2QI;
+ typedef unsigned char __attribute__ ((vector_size (4))) V4QI;
+ typedef unsigned char __attribute__ ((vector_size (8))) V8QI;
+ typedef unsigned char __attribute__ ((vector_size (16))) V16QI;
+ 
+ typedef unsigned short __attribute__ ((vector_size (2))) V1HI;
+ typedef unsigned short __attribute__ ((vector_size (4))) V2HI;
+ typedef unsigned short __attribute__ ((vector_size (8))) V4HI;
+ typedef unsigned short __attribute__ ((vector_size (16))) V8HI;
+ 
+ typedef unsigned int __attribute__ ((vector_size (4))) V1SI;
+ typedef unsigned int __attribute__ ((vector_size (8))) V2SI;
+ typedef unsigned int __attribute__ ((vector_size (16))) V4SI;
+ 
+ unsigned short ushort;
+ unsigned int uint;
+ 
+ #define TEST(T, U, I) \
+   unsigned T test_ ## I ## _ ## U (U x) { return x[I]; } \
+   void       test_ ## I ## _ ## U ## _ushort (U x) { ushort = x[I]; } \
+   void       test_ ## I ## _ ## U ## _uint (U x) { uint = x[I]; }
+ 
+ #define TEST1(T, U) \
+   TEST(T, U, 0)
+ 
+ #define TEST2(T, U) \
+   TEST1 (T, U) \
+   TEST(T, U, 1)
+ 
+ #define TEST4(T, U) \
+   TEST2 (T, U) \
+   TEST(T, U, 2) \
+   TEST(T, U, 3)
+ 
+ #define TEST8(T, U) \
+   TEST4 (T, U) \
+   TEST(T, U, 4) \
+   TEST(T, U, 5) \
+   TEST(T, U, 6) \
+   TEST(T, U, 7)
+ 
+ #define TEST16(T, U) \
+   TEST8 (T, U) \
+   TEST(T, U, 9) \
+   TEST(T, U, 10) \
+   TEST(T, U, 11) \
+   TEST(T, U, 12) \
+   TEST(T, U, 13) \
+   TEST(T, U, 14) \
+   TEST(T, U, 15)
+ 
+ TEST1 (char, V1QI)
+ TEST2 (char, V2QI)
+ TEST4 (char, V4QI)
+ TEST8 (char, V8QI)
+ TEST16 (char, V16QI)
+ 
+ TEST1 (short, V1HI)
+ TEST2 (short, V2HI)
+ TEST4 (short, V4HI)
+ TEST8 (short, V8HI)
+ 
+ TEST1 (int, V1SI)
+ TEST2 (int, V2SI)
+ TEST4 (int, V4SI)
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gfortran.dg/associate_75.f90 gcc-16-20250720/gcc/testsuite/gfortran.dg/associate_75.f90
*** gcc-16-20250713/gcc/testsuite/gfortran.dg/associate_75.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gfortran.dg/associate_75.f90	Sun Jul 20 22:32:26 2025
***************
*** 0 ****
--- 1,50 ----
+ ! { dg-do run }
+ !
+ ! Test fix for PR121060.
+ !
+ ! Contributed by Damian Rouson  <damian@archaeologic.codes>
+ !
+ module subdomain_m
+   implicit none
+ 
+   type subdomain_t 
+     real :: s_ = 99.
+   contains
+     generic :: operator(.laplacian.) => laplacian
+     procedure laplacian
+   end type
+ 
+ contains
+ 
+   function laplacian(rhs)
+     class(subdomain_t), intent(in) :: rhs
+     type(subdomain_t) laplacian
+     laplacian%s_ = rhs%s_ + 42
+   end function
+ 
+ end module
+ 
+   use subdomain_m
+   implicit none
+ 
+   type operands_t
+     real :: s_
+   end type
+ 
+   type(subdomain_t) phi
+   type(operands_t) operands
+ 
+   associate(laplacian_phi => .laplacian. phi) ! ICE because specific not found.
+     operands = approximates(laplacian_phi%s_)
+   end associate
+ 
+   if (int (operands%s_) /= 42) stop 1
+ contains
+ 
+   function approximates(actual)
+     real actual 
+     type(operands_t) approximates
+     approximates%s_ = actual - 99
+   end function
+ 
+ end
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gfortran.dg/gomp/pr104428.f90 gcc-16-20250720/gcc/testsuite/gfortran.dg/gomp/pr104428.f90
*** gcc-16-20250713/gcc/testsuite/gfortran.dg/gomp/pr104428.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gfortran.dg/gomp/pr104428.f90	Sun Jul 20 22:32:27 2025
***************
*** 0 ****
--- 1,15 ----
+ ! { dg-do compile }
+ 
+ program p
+   interface
+     subroutine x
+     end subroutine x
+   end interface
+ contains
+   subroutine foo
+     !$omp declare variant(x) match(construct={do})
+   end
+   subroutine bar
+     !$omp declare variant(y) match(construct={do}) ! { dg-error "Cannot find symbol 'y'" }
+   end
+ end
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gfortran.dg/import13.f90 gcc-16-20250720/gcc/testsuite/gfortran.dg/import13.f90
*** gcc-16-20250713/gcc/testsuite/gfortran.dg/import13.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gfortran.dg/import13.f90	Sun Jul 20 22:32:27 2025
***************
*** 0 ****
--- 1,21 ----
+ ! { dg-do compile }
+ !
+ ! Contributed by Steve Kargl  <sgk@troutmask.apl.washington.edu>
+ !
+ program foo
+    implicit none
+    integer i
+    i = 42
+    if (i /= 42) stop 1
+    call bah
+    contains
+       subroutine bah       ! { dg-error "is already defined at" }
+          i = 43
+          if (i /= 43) stop 2
+       end subroutine bah
+       subroutine bah       ! { dg-error "is already defined at" }
+          ! import statement missing a comma
+          import none       ! { dg-error "Unexpected IMPORT statement" }
+          i = 44            ! { dg-error "Unexpected assignment" }
+       end subroutine bah   ! { dg-error "Expecting END PROGRAM" }
+ end program foo
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gfortran.dg/pointer_check_15.f90 gcc-16-20250720/gcc/testsuite/gfortran.dg/pointer_check_15.f90
*** gcc-16-20250713/gcc/testsuite/gfortran.dg/pointer_check_15.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gfortran.dg/pointer_check_15.f90	Sun Jul 20 22:32:27 2025
***************
*** 0 ****
--- 1,46 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O -fcheck=pointer -fdump-tree-original" }
+ !
+ ! PR fortran/121145
+ ! Erroneous runtime error: Proc-pointer actual argument 'ptr' is not associated
+ !
+ ! Contributed by Federico Perini.
+ 
+ module m
+   implicit none
+ 
+   abstract interface
+      subroutine fun(x)
+        real, intent(in) :: x
+      end subroutine fun
+   end interface   
+ 
+ contains
+ 
+   subroutine with_fun(sub)
+     procedure(fun), optional :: sub
+     if (present(sub)) stop 1
+   end subroutine   
+ 
+   subroutine with_non_optional(sub)
+     procedure(fun) :: sub
+   end subroutine   
+ 
+ end module m
+ 
+ program p
+   use m
+   implicit none
+ 
+   procedure(fun), pointer :: ptr1 => null()
+   procedure(fun), pointer :: ptr2 => null()
+   
+   call with_fun()
+   call with_fun(sub=ptr1)               ! no runtime check here
+ 
+   if (associated (ptr2)) then
+      call with_non_optional(sub=ptr2)   ! runtime check here
+   end if
+ end  
+ 
+ ! { dg-final { scan-tree-dump-times "Proc-pointer actual argument .'ptr2.'" 1 "original" } }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gnat.dg/deref4.adb gcc-16-20250720/gcc/testsuite/gnat.dg/deref4.adb
*** gcc-16-20250713/gcc/testsuite/gnat.dg/deref4.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gnat.dg/deref4.adb	Sun Jul 20 22:32:28 2025
***************
*** 0 ****
--- 1,9 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnatX" }
+ 
+ with Deref4_Pkg; use Deref4_Pkg;
+ 
+ procedure Deref4 is
+ begin
+   Obj.Proc (null);
+ end;
diff -Nrcpad gcc-16-20250713/gcc/testsuite/gnat.dg/deref4_pkg.ads gcc-16-20250720/gcc/testsuite/gnat.dg/deref4_pkg.ads
*** gcc-16-20250713/gcc/testsuite/gnat.dg/deref4_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/gnat.dg/deref4_pkg.ads	Sun Jul 20 22:32:28 2025
***************
*** 0 ****
--- 1,8 ----
+ package Deref4_Pkg is
+ 
+   type A is tagged null record;
+   type A_Ptr is access A;
+   procedure Proc (This : in out A'Class; Some_Parameter : A_Ptr) is null;
+   Obj : A_Ptr;
+ 
+ end Deref4_Pkg;
diff -Nrcpad gcc-16-20250713/gcc/testsuite/lib/target-supports.exp gcc-16-20250720/gcc/testsuite/lib/target-supports.exp
*** gcc-16-20250713/gcc/testsuite/lib/target-supports.exp	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/testsuite/lib/target-supports.exp	Sun Jul 20 22:32:30 2025
*************** proc add_options_for_aarch64_sve { flags
*** 5800,5805 ****
--- 5800,5812 ----
      return "$flags -march=armv8.2-a+sve"
  }
  
+ proc add_options_for_aarch64_sme { flags } {
+     if { ![istarget aarch64*-*-*] || [check_effective_target_aarch64_sme] } {
+ 	return "$flags"
+     }
+     return "$flags -march=armv9-a+sme"
+ }
+ 
  # Return 1 if this is an ARM target supporting the FP16 alternative
  # format.  Some multilibs may be incompatible with the options needed.  Also
  # set et_arm_fp16_alternative_flags to the best options to add.
*************** foreach N { 128 256 512 1024 2048 } {
*** 6539,6544 ****
--- 6546,6567 ----
      }]
  }
  
+ # Return true if this is an AArch64 target that can run SME code.
+ 
+ proc check_effective_target_aarch64_sme_hw { } {
+     if { ![istarget aarch64*-*-*] } {
+ 	return 0
+     }
+     return [check_runtime aarch64_sme_hw_available {
+ 	int
+ 	main (void)
+ 	{
+ 	  asm volatile ("rdsvl x0, #1");
+ 	  return 0;
+ 	}
+     } [add_options_for_aarch64_sme ""]]
+ }
+ 
  proc check_effective_target_arm_neonv2_hw { } {
      return [check_runtime arm_neon_hwv2_available {
  	#include "arm_neon.h"
*************** proc check_effective_target_vect_logical
*** 9961,9967 ****
  		   || [istarget amdgcn-*-*]
  		   || [check_effective_target_riscv_v]
  		   || [check_effective_target_loongarch_sx]
! 		   || [check_effective_target_x86]}]
  }
  
  # Return 1 if the target supports the fold_extract_last optab.
--- 9984,9991 ----
  		   || [istarget amdgcn-*-*]
  		   || [check_effective_target_riscv_v]
  		   || [check_effective_target_loongarch_sx]
! 		   || [check_effective_target_x86]
! 		   || [check_effective_target_s390_vx]}]
  }
  
  # Return 1 if the target supports the fold_extract_last optab.
*************** proc check_effective_target_foldable_pi_
*** 14528,14530 ****
--- 14552,14602 ----
  	}
      }]
  }
+ #
+ # Return 1 if the x86-64 target enables -mfentry by default, 0
+ # otherwise.  Cache the result.
+ 
+ proc check_effective_target_fentry { } {
+     global tool
+     global GCC_UNDER_TEST
+ 
+     if { ![check_effective_target_x86] } {
+ 	return 0
+     }
+ 
+     # Need auto-host.h to check linker support.
+     if { ![file exists ../../auto-host.h ] } {
+ 	return 0
+     }
+ 
+     return [check_cached_effective_target fentry {
+ 	# Set up and compile to see if ENABLE_X86_64_MFENTRY is
+ 	# non-zero.  Include the current process ID in the file
+ 	# names to prevent conflicts with invocations for multiple
+ 	# testsuites.
+ 
+ 	set src pie[pid].c
+ 	set obj pie[pid].o
+ 
+ 	set f [open $src "w"]
+ 	puts $f "#include \"../../auto-host.h\""
+ 	puts $f "#if ENABLE_X86_64_MFENTRY == 0 || !defined __x86_64__"
+ 	puts $f "# error -mfentry is not enabled by default."
+ 	puts $f "#endif"
+ 	close $f
+ 
+ 	verbose "check_effective_target_fentry compiling testfile $src" 2
+ 	set lines [${tool}_target_compile $src $obj object ""]
+ 
+ 	file delete $src
+ 	file delete $obj
+ 
+ 	if [string match "" $lines] then {
+ 	    verbose "check_effective_target_fentry testfile compilation passed" 2
+ 	    return 1
+ 	} else {
+ 	    verbose "check_effective_target_fentry testfile compilation failed" 2
+ 	    return 0
+ 	}
+     }]
+ }
diff -Nrcpad gcc-16-20250713/gcc/testsuite/libgdiagnostics.dg/sarif.py gcc-16-20250720/gcc/testsuite/libgdiagnostics.dg/sarif.py
*** gcc-16-20250713/gcc/testsuite/libgdiagnostics.dg/sarif.py	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/testsuite/libgdiagnostics.dg/sarif.py	Thu Jan  1 00:00:00 1970
***************
*** 1,23 ****
- import json
- import os
- 
- def sarif_from_env():
-     # return parsed JSON content a SARIF_PATH file
-     json_filename = os.environ['SARIF_PATH']
-     json_filename += '.sarif'
-     print('json_filename: %r' % json_filename)
-     with open(json_filename) as f:
-         json_data = f.read()
-     return json.loads(json_data)
- 
- def get_location_artifact_uri(location):
-     return location['physicalLocation']['artifactLocation']['uri']
- 
- def get_location_physical_region(location):
-     return location['physicalLocation']['region']
- 
- def get_location_snippet_text(location):
-     return location['physicalLocation']['contextRegion']['snippet']['text']
- 
- def get_location_relationships(location):
-     return location['relationships']
--- 0 ----
diff -Nrcpad gcc-16-20250713/gcc/testsuite/libgdiagnostics.dg/test-message-buffer-c.py gcc-16-20250720/gcc/testsuite/libgdiagnostics.dg/test-message-buffer-c.py
*** gcc-16-20250713/gcc/testsuite/libgdiagnostics.dg/test-message-buffer-c.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/libgdiagnostics.dg/test-message-buffer-c.py	Sun Jul 20 22:32:30 2025
***************
*** 0 ****
--- 1,12 ----
+ from sarif import *
+ 
+ import pytest
+ 
+ @pytest.fixture(scope='function', autouse=True)
+ def sarif():
+     return sarif_from_env()
+ 
+ def test_message_in_generated_sarif(sarif):
+     result = get_result_by_index(sarif, 0)
+     assert result['level'] == 'error'
+     assert result['message']['text'] == "this is a string; foo; int: 42 str: mostly harmless; [this is a link](https://example.com/) 'this is quoted' highlight A highlight B (1)."
diff -Nrcpad gcc-16-20250713/gcc/testsuite/libgdiagnostics.dg/test-message-buffer.c gcc-16-20250720/gcc/testsuite/libgdiagnostics.dg/test-message-buffer.c
*** gcc-16-20250713/gcc/testsuite/libgdiagnostics.dg/test-message-buffer.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/libgdiagnostics.dg/test-message-buffer.c	Sun Jul 20 22:32:30 2025
***************
*** 0 ****
--- 1,80 ----
+ /* Example of using a message buffer to build the text of a diagnostic
+    in pieces before emitting it.  */
+ 
+ #include "libgdiagnostics.h"
+ #include "test-helpers.h"
+ 
+ int
+ main ()
+ {
+   begin_test ("test-message-buffer.c.exe",
+ 	      "test-message-buffer.c.sarif",
+ 	      __FILE__, "c");
+ 
+   diagnostic_event_id event_id = 0;
+ 
+   /* begin quoted source */
+   diagnostic *d = diagnostic_begin (diag_mgr,
+ 				    DIAGNOSTIC_LEVEL_ERROR);
+ 
+   diagnostic_message_buffer *msg_buf = diagnostic_message_buffer_new ();
+ 
+   /* Add a null-terminated string.  */
+   diagnostic_message_buffer_append_str (msg_buf, "this is a string; ");
+ 
+   /* Add a length-specified string.  */
+   diagnostic_message_buffer_append_text (msg_buf, "foobar", 3);
+ 
+   /* "printf"-formatting.  */
+   diagnostic_message_buffer_append_printf (msg_buf,
+ 					   "; int: %i str: %s; ",
+ 					   42, "mostly harmless");
+ 
+   /* Adding a URL.  */
+   diagnostic_message_buffer_begin_url (msg_buf, "https://example.com/");
+   diagnostic_message_buffer_append_str (msg_buf, "this is a link");  
+   diagnostic_message_buffer_end_url (msg_buf);
+ 
+   diagnostic_message_buffer_append_str (msg_buf, " ");  
+ 
+   /* Add quoted text.  */
+   diagnostic_message_buffer_begin_quote (msg_buf);
+   diagnostic_message_buffer_append_str (msg_buf, "this is quoted");  
+   diagnostic_message_buffer_end_quote (msg_buf);
+   
+   diagnostic_message_buffer_append_str (msg_buf, " ");  
+ 
+   /* Add colorized text.  */
+   diagnostic_message_buffer_begin_color (msg_buf, "highlight-a");
+   diagnostic_message_buffer_append_str (msg_buf, "highlight A");  
+   diagnostic_message_buffer_end_color (msg_buf);
+ 
+   diagnostic_message_buffer_append_str (msg_buf, " ");
+   
+   diagnostic_message_buffer_begin_color (msg_buf, "highlight-b");
+   diagnostic_message_buffer_append_str (msg_buf, "highlight B");  
+   diagnostic_message_buffer_end_color (msg_buf);
+   
+   diagnostic_message_buffer_append_str (msg_buf, " ");
+ 
+   /* Add an event ID.  This will be printed as "(1)".  */
+   diagnostic_message_buffer_append_event_id (msg_buf, event_id);
+   
+   /* Add an ASCII char.  */
+   diagnostic_message_buffer_append_byte (msg_buf, '.');
+ 
+   diagnostic_finish_via_msg_buf (d, msg_buf);
+   /* end quoted source */
+ 
+   return end_test ();
+ };
+ 
+ /* Verify the output from the text sink.
+    { dg-regexp "test-message-buffer.c.exe: error: this is a string; foo; int: 42 str: mostly harmless; this is a link 'this is quoted' highlight A highlight B \\(1\\)." } */
+ 
+ /* Verify that some JSON was written to a file with the expected name:
+    { dg-final { verify-sarif-file } } */
+ 
+ /* Use a Python script to verify various properties about the generated
+    .sarif file:
+    { dg-final { run-sarif-pytest test-message-buffer.c "test-message-buffer-c.py" } } */
diff -Nrcpad gcc-16-20250713/gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py gcc-16-20250720/gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py
*** gcc-16-20250713/gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/testsuite/libgdiagnostics.dg/test-warning-with-path-c.py	Sun Jul 20 22:32:30 2025
*************** def test_sarif_output_for_warning_with_p
*** 101,107 ****
          == '    PyList_Append(list, item);\n'
      assert tfl_2_loc['logicalLocations'] == location['logicalLocations']
      assert tfl_2_loc['message']['text'] \
!         == "when calling 'PyList_Append', passing NULL from (1) as argument 1"
      assert tfl_2['nestingLevel'] == 0
      assert tfl_2['executionOrder'] == 3
  
--- 101,107 ----
          == '    PyList_Append(list, item);\n'
      assert tfl_2_loc['logicalLocations'] == location['logicalLocations']
      assert tfl_2_loc['message']['text'] \
!         == "when calling 'PyList_Append', passing NULL from [(1)](sarif:/runs/0/results/0/codeFlows/0/threadFlows/0/locations/0) as argument 1"
      assert tfl_2['nestingLevel'] == 0
      assert tfl_2['executionOrder'] == 3
  
diff -Nrcpad gcc-16-20250713/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.11.6-embedded-links.sarif gcc-16-20250720/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.11.6-embedded-links.sarif
*** gcc-16-20250713/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.11.6-embedded-links.sarif	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/testsuite/sarif-replay.dg/2.1.0-valid/3.11.6-embedded-links.sarif	Sun Jul 20 22:32:31 2025
***************
*** 1,3 ****
--- 1,6 ----
+ /* { dg-additional-options "-fdiagnostics-add-output=experimental-html:file=3.11.6-embedded-links.sarif.html,javascript=no" } */
+ /* { dg-additional-options "-fdiagnostics-add-output=sarif:file=3.11.6-embedded-links.sarif.roundtrip.sarif" } */
+ 
  {"$schema": "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json",
   "version": "2.1.0",
   "runs": [{"tool": {"driver": {"name": "hand-written"}},
*************** hand-written: warning: 002: Prohibited t
*** 16,25 ****
                         
                         /* With the fix from https://github.com/oasis-tcs/sarif-spec/issues/656 */
                         {"message": {"text": "003: Prohibited term used in [para\\[0\\]\\\\spans\\[2\\]](1)."},
! 	   	        "locations": []}
  /* { dg-begin-multiline-output "" }
  hand-written: warning: 003: Prohibited term used in para[0]\spans[2].
     { dg-end-multiline-output "" } */
  
  ]}]}
  
--- 19,42 ----
                         
                         /* With the fix from https://github.com/oasis-tcs/sarif-spec/issues/656 */
                         {"message": {"text": "003: Prohibited term used in [para\\[0\\]\\\\spans\\[2\\]](1)."},
! 	   	        "locations": []},
  /* { dg-begin-multiline-output "" }
  hand-written: warning: 003: Prohibited term used in para[0]\spans[2].
     { dg-end-multiline-output "" } */
  
+                        {"message": {"text": "004: This is a [link](http://www.example.com)."},
+ 	   	        "locations": []}
+ /* { dg-begin-multiline-output "" }
+ hand-written: warning: 004: This is a link.
+    { dg-end-multiline-output "" } */
+ 
  ]}]}
  
+ /* Use a Python script to verify various properties about the generated
+    .html file:
+    { dg-final { run-html-pytest 3.11.6-embedded-links.sarif "2.1.0-valid/embedded-links-check-html.py" } } */
+ 
+ /* Use a Python script to verify various properties about the *generated*
+    .sarif file:
+    { dg-final { run-sarif-pytest 3.11.6-embedded-links.sarif.roundtrip "2.1.0-valid/embedded-links-check-sarif-roundtrip.py" } } */
+ 
diff -Nrcpad gcc-16-20250713/gcc/testsuite/sarif-replay.dg/2.1.0-valid/embedded-links-check-html.py gcc-16-20250720/gcc/testsuite/sarif-replay.dg/2.1.0-valid/embedded-links-check-html.py
*** gcc-16-20250713/gcc/testsuite/sarif-replay.dg/2.1.0-valid/embedded-links-check-html.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/sarif-replay.dg/2.1.0-valid/embedded-links-check-html.py	Sun Jul 20 22:32:31 2025
***************
*** 0 ****
--- 1,28 ----
+ from htmltest import *
+ 
+ import pytest
+ 
+ @pytest.fixture(scope='function', autouse=True)
+ def html_tree():
+     return html_tree_from_env()
+ 
+ def test_generated_html(html_tree):
+     root = html_tree.getroot ()
+     assert root.tag == make_tag('html')
+ 
+     head = root.find('xhtml:head', ns)
+     assert head is not None
+ 
+     # Get "warning: 004: This is a link."
+     diag = get_diag_by_index(html_tree, 3)
+ 
+     msg = get_message_within_diag(diag)
+     assert msg is not None
+     
+     assert_tag(msg[0], 'strong')
+     assert msg[0].text == 'warning: '
+     assert msg[0].tail == ' 004: This is a '
+     assert_tag(msg[1], 'a')
+     assert msg[1].text == 'link'
+     assert msg[1].get('href') == 'http://www.example.com'
+     assert msg[1].tail == '. '
diff -Nrcpad gcc-16-20250713/gcc/testsuite/sarif-replay.dg/2.1.0-valid/embedded-links-check-sarif-roundtrip.py gcc-16-20250720/gcc/testsuite/sarif-replay.dg/2.1.0-valid/embedded-links-check-sarif-roundtrip.py
*** gcc-16-20250713/gcc/testsuite/sarif-replay.dg/2.1.0-valid/embedded-links-check-sarif-roundtrip.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/testsuite/sarif-replay.dg/2.1.0-valid/embedded-links-check-sarif-roundtrip.py	Sun Jul 20 22:32:31 2025
***************
*** 0 ****
--- 1,13 ----
+ from sarif import *
+ 
+ import pytest
+ 
+ @pytest.fixture(scope='function', autouse=True)
+ def sarif():
+     return sarif_from_env()
+ 
+ def test_roundtrip_of_url_in_generated_sarif(sarif):
+     # Get "warning: 004: This is a link."
+     result = get_result_by_index(sarif, 3)
+     assert result['level'] == 'warning'
+     assert result['message']['text'] == "004: This is a [link](http://www.example.com)."
diff -Nrcpad gcc-16-20250713/gcc/tree-cfg.cc gcc-16-20250720/gcc/tree-cfg.cc
*** gcc-16-20250713/gcc/tree-cfg.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree-cfg.cc	Sun Jul 20 22:32:31 2025
*************** do_warn_unused_result (gimple_seq seq)
*** 9849,9854 ****
--- 9849,9856 ----
  	    break;
  	  if (gimple_call_internal_p (g))
  	    break;
+ 	  if (warning_suppressed_p (g, OPT_Wunused_result))
+ 	    break;
  
  	  /* This is a naked call, as opposed to a GIMPLE_CALL with an
  	     LHS.  All calls whose value is ignored should be
diff -Nrcpad gcc-16-20250713/gcc/tree-if-conv.cc gcc-16-20250720/gcc/tree-if-conv.cc
*** gcc-16-20250713/gcc/tree-if-conv.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree-if-conv.cc	Sun Jul 20 22:32:31 2025
*************** fold_or_predicates (location_t loc, tree
*** 494,499 ****
--- 494,503 ----
  static tree
  fold_build_cond_expr (tree type, tree cond, tree rhs, tree lhs)
  {
+   /* Short cut the case where both rhs and lhs are the same. */
+   if (operand_equal_p (rhs, lhs))
+     return rhs;
+ 
    /* If COND is comparison r != 0 and r has boolean type, convert COND
       to SSA_NAME to accept by vect bool pattern.  */
    if (TREE_CODE (cond) == NE_EXPR)
*************** gen_phi_arg_condition (gphi *phi, ifcvt_
*** 2110,2115 ****
--- 2114,2300 ----
    return cond;
  }
  
+ /* Find the operand which is different between ARG0_OP and ARG1_OP.
+    Returns the operand num where the difference is.
+    Set NEWARG0 and NEWARG1 from the different argument.
+    Returns -1 if none is found.
+    If ARG0_OP/ARG1_OP is commutative also try swapping the
+    two commutative operands and return the operand number where
+    the difference happens in ARG0_OP. */
+ 
+ static int
+ find_different_opnum (const gimple_match_op &arg0_op,
+ 		      const gimple_match_op &arg1_op,
+ 		      tree *new_arg0, tree *new_arg1)
+ {
+   unsigned opnum = -1;
+   unsigned first;
+   first = first_commutative_argument (arg1_op.code, arg1_op.type);
+   for (unsigned i = 0; i < arg0_op.num_ops; i++)
+     {
+       if (!operand_equal_for_phi_arg_p (arg0_op.ops[i],
+ 					arg1_op.ops[i]))
+ 	{
+ 	  /* Can handle only one non equal operand. */
+ 	  if (opnum != -1u)
+ 	    {
+ 	      /* Though if opnum is right before i and opnum is equal
+ 		 to the first communtative argument, handle communtative
+ 		 specially. */
+ 	      if (i == opnum + 1 && opnum == first)
+ 		goto commutative;
+ 	      return -1;
+ 	    }
+ 	  opnum = i;
+ 	}
+   }
+   /* If all operands are equal only do this is there was single
+      operand.  */
+   if (opnum == -1u)
+     {
+       if (arg0_op.num_ops != 1)
+ 	return -1;
+       opnum = 0;
+     }
+   *new_arg0 = arg0_op.ops[opnum];
+   *new_arg1 = arg1_op.ops[opnum];
+   return opnum;
+ 
+ /* Handle commutative operations. */
+ commutative:
+   gcc_assert (first != -1u);
+ 
+   /* Check the rest of the arguments to make sure they are the same. */
+   for (unsigned i = first + 2; i < arg0_op.num_ops; i++)
+     if (!operand_equal_for_phi_arg_p (arg0_op.ops[i],
+ 				      arg1_op.ops[i]))
+       return -1;
+ 
+   /* If the arg0[first+1] and arg1[first] are the same
+      then the one which is different is arg0[first] and arg1[first+1]
+      return first since this is based on arg0.  */
+   if (operand_equal_for_phi_arg_p (arg0_op.ops[first + 1],
+ 				   arg1_op.ops[first]))
+     {
+        *new_arg0 = arg0_op.ops[first];
+        *new_arg1 = arg1_op.ops[first + 1];
+        return first;
+     }
+   /* If the arg0[first] and arg1[first+1] are the same
+      then the one which is different is arg0[first+1] and arg1[first]
+      return first+1 since this is based on arg0.  */
+   if (operand_equal_for_phi_arg_p (arg0_op.ops[first],
+ 				   arg1_op.ops[first + 1]))
+     {
+        *new_arg0 = arg0_op.ops[first + 1];
+        *new_arg1 = arg1_op.ops[first];
+        return first + 1;
+     }
+   return -1;
+ }
+ 
+ /* Factors out an operation from *ARG0 and *ARG1 and
+    create the new statement at GSI. *RES is the
+    result of that new statement. Update *ARG0 and *ARG1
+    and *RES to the new values if the factoring happened.
+    Loops until all of the factoring is completed.  */
+ 
+ static void
+ factor_out_operators (tree *res, gimple_stmt_iterator *gsi,
+ 		      tree *arg0, tree *arg1, gphi *phi)
+ {
+   gimple_match_op arg0_op, arg1_op;
+   bool repeated = false;
+ 
+ again:
+   if (TREE_CODE (*arg0) != SSA_NAME || TREE_CODE (*arg1) != SSA_NAME)
+     return;
+ 
+   if (operand_equal_p (*arg0, *arg1))
+     return;
+ 
+   /* If either args have > 1 use, then this transformation actually
+      increases the number of expressions evaluated at runtime.  */
+   if (repeated
+       ? (!has_zero_uses (*arg0) || !has_zero_uses (*arg1))
+       : (!has_single_use (*arg0) || !has_single_use (*arg1)))
+     return;
+ 
+   gimple *arg0_def_stmt = SSA_NAME_DEF_STMT (*arg0);
+   if (!gimple_extract_op (arg0_def_stmt, &arg0_op))
+     return;
+ 
+   /* At this point there should be no ssa names occuring in abnormals.  */
+   gcc_assert (!arg0_op.operands_occurs_in_abnormal_phi ());
+ 
+   gimple *arg1_def_stmt = SSA_NAME_DEF_STMT (*arg1);
+   if (!gimple_extract_op (arg1_def_stmt, &arg1_op))
+     return;
+ 
+   /* At this point there should be no ssa names occuring in abnormals.  */
+   gcc_assert (!arg1_op.operands_occurs_in_abnormal_phi ());
+ 
+   /* No factoring can happen if the codes are different
+      or the number operands.  */
+   if (arg1_op.code != arg0_op.code
+       || arg1_op.num_ops != arg0_op.num_ops)
+     return;
+ 
+   tree new_arg0, new_arg1;
+   int opnum = find_different_opnum (arg0_op, arg1_op, &new_arg0, &new_arg1);
+   if (opnum == -1)
+     return;
+ 
+   if (!types_compatible_p (TREE_TYPE (new_arg0), TREE_TYPE (new_arg1)))
+     return;
+   tree new_res = make_ssa_name (TREE_TYPE (new_arg0), NULL);
+ 
+   /* Create the operation stmt if possible and insert it.  */
+ 
+   gimple_match_op new_op = arg0_op;
+   new_op.ops[opnum] = new_res;
+   gimple_seq seq = NULL;
+   tree result = *res;
+   result = maybe_push_res_to_seq (&new_op, &seq, result);
+ 
+   /* If we can't create the new statement, release the temp name
+      and return back.  */
+   if (!result)
+     {
+       release_ssa_name (new_res);
+       return;
+     }
+   gsi_insert_seq_before (gsi, seq, GSI_CONTINUE_LINKING);
+ 
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     {
+       fprintf (dump_file, "PHI ");
+       print_generic_expr (dump_file, gimple_phi_result (phi));
+       fprintf (dump_file,
+ 	       " changed to factor operation out from COND_EXPR.\n");
+       fprintf (dump_file, "New stmt with OPERATION that defines ");
+       print_generic_expr (dump_file, result);
+       fprintf (dump_file, ".\n");
+     }
+ 
+   /* Remove the old operation(s) that has single use.  */
+   gimple_stmt_iterator gsi_for_def;
+ 
+   gsi_for_def = gsi_for_stmt (arg0_def_stmt);
+   gsi_remove (&gsi_for_def, true);
+   release_defs (arg0_def_stmt);
+   gsi_for_def = gsi_for_stmt (arg1_def_stmt);
+   gsi_remove (&gsi_for_def, true);
+   release_defs (arg1_def_stmt);
+ 
+   /* Update the arguments and try again.  */
+   *arg0 = new_arg0;
+   *arg1 = new_arg1;
+   *res = new_res;
+   repeated = true;
+   goto again;
+ }
+ 
  /* Create the smallest nested conditional possible.  On pre-order we record
     which conditionals are live, and on post-order rewrite the chain by removing
     already active conditions.
*************** predicate_scalar_phi (gphi *phi, gimple_
*** 2289,2294 ****
--- 2474,2484 ----
  	  arg0 = gimple_phi_arg_def (phi, 0);
  	  arg1 = gimple_phi_arg_def (phi, 1);
  	}
+ 
+       /* Factor out operand if possible. This can only be done easily
+ 	 for PHI with 2 elements.  */
+       factor_out_operators (&res, gsi, &arg0, &arg1, phi);
+ 
        if (is_cond_scalar_reduction (phi, &reduc, arg0, arg1,
  				    &op0, &op1, false, &has_nop,
  				    &nop_reduc))
*************** combine_blocks (class loop *loop, bool l
*** 3004,3015 ****
  
    /* Reset flow-sensitive info before predicating stmts or PHIs we
       might fold.  */
-   bool *predicated = XNEWVEC (bool, orig_loop_num_nodes);
    for (i = 0; i < orig_loop_num_nodes; i++)
      {
        bb = ifc_bbs[i];
!       predicated[i] = is_predicated (bb);
!       if (predicated[i])
  	{
  	  for (auto gsi = gsi_start_phis (bb);
  	       !gsi_end_p (gsi); gsi_next (&gsi))
--- 3194,3203 ----
  
    /* Reset flow-sensitive info before predicating stmts or PHIs we
       might fold.  */
    for (i = 0; i < orig_loop_num_nodes; i++)
      {
        bb = ifc_bbs[i];
!       if (is_predicated (bb))
  	{
  	  for (auto gsi = gsi_start_phis (bb);
  	       !gsi_end_p (gsi); gsi_next (&gsi))
*************** combine_blocks (class loop *loop, bool l
*** 3211,3217 ****
  
    free (ifc_bbs);
    ifc_bbs = NULL;
-   free (predicated);
  }
  
  /* Version LOOP before if-converting it; the original loop
--- 3399,3404 ----
diff -Nrcpad gcc-16-20250713/gcc/tree-inline.cc gcc-16-20250720/gcc/tree-inline.cc
*** gcc-16-20250713/gcc/tree-inline.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree-inline.cc	Sun Jul 20 22:32:31 2025
*************** copy_tree_body_r (tree *tp, int *walk_su
*** 1460,1469 ****
  		   || OMP_CLAUSE_CODE (*tp) == OMP_CLAUSE_DEPEND))
  	{
  	  tree t = OMP_CLAUSE_DECL (*tp);
! 	  if (t
! 	      && TREE_CODE (t) == TREE_LIST
! 	      && TREE_PURPOSE (t)
! 	      && TREE_CODE (TREE_PURPOSE (t)) == TREE_VEC)
  	    {
  	      *walk_subtrees = 0;
  	      OMP_CLAUSE_DECL (*tp) = copy_node (t);
--- 1460,1466 ----
  		   || OMP_CLAUSE_CODE (*tp) == OMP_CLAUSE_DEPEND))
  	{
  	  tree t = OMP_CLAUSE_DECL (*tp);
! 	  if (t && OMP_ITERATOR_DECL_P (t))
  	    {
  	      *walk_subtrees = 0;
  	      OMP_CLAUSE_DECL (*tp) = copy_node (t);
diff -Nrcpad gcc-16-20250713/gcc/tree-pretty-print.cc gcc-16-20250720/gcc/tree-pretty-print.cc
*** gcc-16-20250713/gcc/tree-pretty-print.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree-pretty-print.cc	Sun Jul 20 22:32:31 2025
*************** dump_omp_clause (pretty_printer *pp, tre
*** 902,910 ****
        pp_string (pp, "affinity(");
        {
  	tree t = OMP_CLAUSE_DECL (clause);
! 	if (TREE_CODE (t) == TREE_LIST
! 	    && TREE_PURPOSE (t)
! 	    && TREE_CODE (TREE_PURPOSE (t)) == TREE_VEC)
  	  {
  	    dump_omp_iterators (pp, TREE_PURPOSE (t), spc, flags);
  	    pp_colon (pp);
--- 902,908 ----
        pp_string (pp, "affinity(");
        {
  	tree t = OMP_CLAUSE_DECL (clause);
! 	if (OMP_ITERATOR_DECL_P (t))
  	  {
  	    dump_omp_iterators (pp, TREE_PURPOSE (t), spc, flags);
  	    pp_colon (pp);
*************** dump_omp_clause (pretty_printer *pp, tre
*** 944,952 ****
  	}
        {
  	tree t = OMP_CLAUSE_DECL (clause);
! 	if (TREE_CODE (t) == TREE_LIST
! 	    && TREE_PURPOSE (t)
! 	    && TREE_CODE (TREE_PURPOSE (t)) == TREE_VEC)
  	  {
  	    dump_omp_iterators (pp, TREE_PURPOSE (t), spc, flags);
  	    pp_colon (pp);
--- 942,948 ----
  	}
        {
  	tree t = OMP_CLAUSE_DECL (clause);
! 	if (OMP_ITERATOR_DECL_P (t))
  	  {
  	    dump_omp_iterators (pp, TREE_PURPOSE (t), spc, flags);
  	    pp_colon (pp);
diff -Nrcpad gcc-16-20250713/gcc/tree-sra.cc gcc-16-20250720/gcc/tree-sra.cc
*** gcc-16-20250713/gcc/tree-sra.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree-sra.cc	Sun Jul 20 22:32:31 2025
*************** analyze_access_subtree (struct access *r
*** 2889,2895 ****
  
    for (child = root->first_child; child; child = child->next_sibling)
      {
!       hole |= covered_to < child->offset;
        sth_created |= analyze_access_subtree (child, root,
  					     allow_replacements && !scalar
  					     && !root->grp_partial_lhs,
--- 2889,2898 ----
  
    for (child = root->first_child; child; child = child->next_sibling)
      {
!       if (totally)
! 	covered_to = child->offset;
!       else
! 	hole |= covered_to < child->offset;
        sth_created |= analyze_access_subtree (child, root,
  					     allow_replacements && !scalar
  					     && !root->grp_partial_lhs,
*************** analyze_access_subtree (struct access *r
*** 2900,2905 ****
--- 2903,2910 ----
  	covered_to += child->size;
        else
  	hole = true;
+       if (totally && !hole)
+ 	covered_to = limit;
      }
  
    if (allow_replacements && scalar && !root->first_child
*************** analyze_access_subtree (struct access *r
*** 2972,2978 ****
  	root->grp_total_scalarization = 0;
      }
  
!   if (!hole || totally)
      root->grp_covered = 1;
    else if (root->grp_write || comes_initialized_p (root->base))
      root->grp_unscalarized_data = 1; /* not covered and written to */
--- 2977,2983 ----
  	root->grp_total_scalarization = 0;
      }
  
!   if (!hole)
      root->grp_covered = 1;
    else if (root->grp_write || comes_initialized_p (root->base))
      root->grp_unscalarized_data = 1; /* not covered and written to */
diff -Nrcpad gcc-16-20250713/gcc/tree-ssa-pre.cc gcc-16-20250720/gcc/tree-ssa-pre.cc
*** gcc-16-20250713/gcc/tree-ssa-pre.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree-ssa-pre.cc	Sun Jul 20 22:32:31 2025
*************** find_or_generate_expression (basic_block
*** 2773,2788 ****
    bitmap exprset = value_expressions[lookfor];
    bitmap_iterator bi;
    unsigned int i;
!   EXECUTE_IF_SET_IN_BITMAP (exprset, 0, i, bi)
!     {
!       pre_expr temp = expression_for_id (i);
!       /* We cannot insert random REFERENCE expressions at arbitrary
! 	 places.  We can insert NARYs which eventually re-materializes
! 	 its operand values.  */
!       if (temp->kind == NARY)
! 	return create_expression_by_pieces (block, temp, stmts,
! 					    TREE_TYPE (op));
!     }
  
    /* Defer.  */
    return NULL_TREE;
--- 2773,2789 ----
    bitmap exprset = value_expressions[lookfor];
    bitmap_iterator bi;
    unsigned int i;
!   if (exprset)
!     EXECUTE_IF_SET_IN_BITMAP (exprset, 0, i, bi)
!       {
! 	pre_expr temp = expression_for_id (i);
! 	/* We cannot insert random REFERENCE expressions at arbitrary
! 	   places.  We can insert NARYs which eventually re-materializes
! 	   its operand values.  */
! 	if (temp->kind == NARY)
! 	  return create_expression_by_pieces (block, temp, stmts,
! 					      TREE_TYPE (op));
!       }
  
    /* Defer.  */
    return NULL_TREE;
diff -Nrcpad gcc-16-20250713/gcc/tree-ssa-structalias.cc gcc-16-20250720/gcc/tree-ssa-structalias.cc
*** gcc-16-20250713/gcc/tree-ssa-structalias.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree-ssa-structalias.cc	Sun Jul 20 22:32:31 2025
***************
*** 48,53 ****
--- 48,56 ----
  #include "ipa-modref.h"
  #include "attr-fnspec.h"
  
+ #include "tree-ssa-structalias.h"
+ #include "pta-andersen.h"
+ 
  /* The idea behind this analyzer is to generate set constraints from the
     program, then solve the resulting constraints in order to generate the
     points-to sets.
***************
*** 201,372 ****
  
     And probably more.  */
  
! static bool use_field_sensitive = true;
! static int in_ipa_mode = 0;
! 
! /* Used for predecessor bitmaps. */
! static bitmap_obstack predbitmap_obstack;
  
  /* Used for points-to sets.  */
! static bitmap_obstack pta_obstack;
  
! /* Used for oldsolution members of variables. */
! static bitmap_obstack oldpta_obstack;
  
! /* Used for per-solver-iteration bitmaps.  */
! static bitmap_obstack iteration_obstack;
  
! static unsigned int create_variable_info_for (tree, const char *, bool);
! typedef struct constraint_graph *constraint_graph_t;
! static void unify_nodes (constraint_graph_t, unsigned int, unsigned int, bool);
  
! struct constraint;
! typedef struct constraint *constraint_t;
  
  
! #define EXECUTE_IF_IN_NONNULL_BITMAP(a, b, c, d)	\
!   if (a)						\
!     EXECUTE_IF_SET_IN_BITMAP (a, b, c, d)
  
! static struct constraint_stats
  {
!   unsigned int total_vars;
!   unsigned int nonpointer_vars;
!   unsigned int unified_vars_static;
!   unsigned int unified_vars_dynamic;
!   unsigned int iterations;
!   unsigned int num_edges;
!   unsigned int num_implicit_edges;
!   unsigned int num_avoided_edges;
!   unsigned int points_to_sets_created;
! } stats;
  
! struct variable_info
  {
!   /* ID of this variable  */
!   unsigned int id;
  
!   /* True if this is a variable created by the constraint analysis, such as
!      heap variables and constraints we had to break up.  */
!   unsigned int is_artificial_var : 1;
  
!   /* True if this is a special variable whose solution set should not be
!      changed.  */
!   unsigned int is_special_var : 1;
  
!   /* True for variables whose size is not known or variable.  */
!   unsigned int is_unknown_size_var : 1;
  
!   /* True for (sub-)fields that represent a whole variable.  */
!   unsigned int is_full_var : 1;
  
!   /* True if this is a heap variable.  */
!   unsigned int is_heap_var : 1;
  
!   /* True if this is a register variable.  */
!   unsigned int is_reg_var : 1;
  
!   /* True if this field may contain pointers.  */
!   unsigned int may_have_pointers : 1;
  
!   /* True if this field has only restrict qualified pointers.  */
!   unsigned int only_restrict_pointers : 1;
  
!   /* True if this represents a heap var created for a restrict qualified
!      pointer.  */
!   unsigned int is_restrict_var : 1;
  
!   /* True if this represents a global variable.  */
!   unsigned int is_global_var : 1;
  
!   /* True if this represents a module escape point for IPA analysis.  */
!   unsigned int is_ipa_escape_point : 1;
  
!   /* True if this represents a IPA function info.  */
!   unsigned int is_fn_info : 1;
  
!   /* True if this appears as RHS in a ADDRESSOF constraint.  */
!   unsigned int address_taken : 1;
  
!   /* ???  Store somewhere better.  */
!   unsigned short ruid;
  
!   /* The ID of the variable for the next field in this structure
!      or zero for the last field in this structure.  */
!   unsigned next;
  
!   /* The ID of the variable for the first field in this structure.  */
!   unsigned head;
  
!   /* Offset of this variable, in bits, from the base variable  */
!   unsigned HOST_WIDE_INT offset;
  
!   /* Size of the variable, in bits.  */
!   unsigned HOST_WIDE_INT size;
  
!   /* Full size of the base variable, in bits.  */
!   unsigned HOST_WIDE_INT fullsize;
  
!   /* In IPA mode the shadow UID in case the variable needs to be duplicated in
!      the final points-to solution because it reaches its containing
!      function recursively.  Zero if none is needed.  */
!   unsigned int shadow_var_uid;
  
!   /* Name of this variable */
!   const char *name;
  
!   /* Tree that this variable is associated with.  */
!   tree decl;
  
-   /* Points-to set for this variable.  */
-   bitmap solution;
  
!   /* Old points-to set for this variable.  */
!   bitmap oldsolution;
! };
! typedef struct variable_info *varinfo_t;
  
! static varinfo_t first_vi_for_offset (varinfo_t, unsigned HOST_WIDE_INT);
! static varinfo_t first_or_preceding_vi_for_offset (varinfo_t,
! 						   unsigned HOST_WIDE_INT);
! static varinfo_t lookup_vi_for_tree (tree);
! static inline bool type_can_have_subvars (const_tree);
! static void make_param_constraints (varinfo_t);
  
! /* Pool of variable info structures.  */
! static object_allocator<variable_info> variable_info_pool
!   ("Variable info pool");
  
! /* Map varinfo to final pt_solution.  */
! static hash_map<varinfo_t, pt_solution *> *final_solutions;
! struct obstack final_solutions_obstack;
  
! /* Table of variable info structures for constraint variables.
!    Indexed directly by variable info id.  */
! static vec<varinfo_t> varmap;
  
! /* Return the varmap element N */
  
! static inline varinfo_t
! get_varinfo (unsigned int n)
  {
!   return varmap[n];
  }
  
! /* Return the next variable in the list of sub-variables of VI
!    or NULL if VI is the last sub-variable.  */
  
! static inline varinfo_t
! vi_next (varinfo_t vi)
  {
!   return get_varinfo (vi->next);
  }
  
! /* Static IDs for the special variables.  Variable ID zero is unused
!    and used as terminator for the sub-variable chain.  */
! enum { nothing_id = 1, anything_id = 2, string_id = 3,
!        escaped_id = 4, nonlocal_id = 5, escaped_return_id = 6,
!        storedanything_id = 7, integer_id = 8 };
  
  /* Return a new variable info structure consisting for a variable
     named NAME, and using constraint graph node NODE.  Append it
--- 204,560 ----
  
     And probably more.  */
  
! namespace pointer_analysis {
  
  /* Used for points-to sets.  */
! bitmap_obstack pta_obstack;
  
! /* Used for oldsolution members of variables.  */
! bitmap_obstack oldpta_obstack;
  
! /* Table of variable info structures for constraint variables.
!    Indexed directly by variable info id.  */
! vec<varinfo_t> varmap;
  
! /* List of constraints that we use to build the constraint graph from.  */
! vec<constraint_t> constraints;
  
! /* Map from trees to variable infos.  */
! static hash_map<tree, varinfo_t> *vi_for_tree;
  
+ /* The representative variable for a variable.  The points-to solution for a
+    var can be found in its rep.  Trivially, a var can be its own rep.
  
!    The solver provides this array once it is done solving.  */
! unsigned int *var_rep;
  
! struct constraint_stats stats;
! 
! /* Find the first varinfo in the same variable as START that overlaps with
!    OFFSET.  Return NULL if we can't find one.  */
! 
! varinfo_t
! first_vi_for_offset (varinfo_t start, unsigned HOST_WIDE_INT offset)
  {
!   /* If the offset is outside of the variable, bail out.  */
!   if (offset >= start->fullsize)
!     return NULL;
  
!   /* If we cannot reach offset from start, lookup the first field
!      and start from there.  */
!   if (start->offset > offset)
!     start = get_varinfo (start->head);
! 
!   while (start)
!     {
!       /* We may not find a variable in the field list with the actual
! 	 offset when we have glommed a structure to a variable.
! 	 In that case, however, offset should still be within the size
! 	 of the variable.  */
!       if (offset >= start->offset
! 	  && (offset - start->offset) < start->size)
! 	return start;
! 
!       start = vi_next (start);
!     }
! 
!   return NULL;
! }
! 
! /* Find the first varinfo in the same variable as START that overlaps with
!    OFFSET.  If there is no such varinfo the varinfo directly preceding
!    OFFSET is returned.  */
! 
! varinfo_t
! first_or_preceding_vi_for_offset (varinfo_t start,
! 				  unsigned HOST_WIDE_INT offset)
  {
!   /* If we cannot reach offset from start, lookup the first field
!      and start from there.  */
!   if (start->offset > offset)
!     start = get_varinfo (start->head);
  
!   /* We may not find a variable in the field list with the actual
!      offset when we have glommed a structure to a variable.
!      In that case, however, offset should still be within the size
!      of the variable.
!      If we got beyond the offset we look for return the field
!      directly preceding offset which may be the last field.  */
!   while (start->next
! 	 && offset >= start->offset
! 	 && !((offset - start->offset) < start->size))
!     start = vi_next (start);
  
!   return start;
! }
  
! /* Print out constraint C to FILE.  */
  
! void
! dump_constraint (FILE *file, constraint_t c)
! {
!   if (c->lhs.type == ADDRESSOF)
!     fprintf (file, "&");
!   else if (c->lhs.type == DEREF)
!     fprintf (file, "*");
!   if (dump_file)
!     fprintf (file, "%s", get_varinfo (c->lhs.var)->name);
!   else
!     fprintf (file, "V%d", c->lhs.var);
!   if (c->lhs.offset == UNKNOWN_OFFSET)
!     fprintf (file, " + UNKNOWN");
!   else if (c->lhs.offset != 0)
!     fprintf (file, " + " HOST_WIDE_INT_PRINT_DEC, c->lhs.offset);
!   fprintf (file, " = ");
!   if (c->rhs.type == ADDRESSOF)
!     fprintf (file, "&");
!   else if (c->rhs.type == DEREF)
!     fprintf (file, "*");
!   if (dump_file)
!     fprintf (file, "%s", get_varinfo (c->rhs.var)->name);
!   else
!     fprintf (file, "V%d", c->rhs.var);
!   if (c->rhs.offset == UNKNOWN_OFFSET)
!     fprintf (file, " + UNKNOWN");
!   else if (c->rhs.offset != 0)
!     fprintf (file, " + " HOST_WIDE_INT_PRINT_DEC, c->rhs.offset);
! }
  
! /* Print out constraint C to stderr.  */
  
! DEBUG_FUNCTION void
! debug_constraint (constraint_t c)
! {
!   dump_constraint (stderr, c);
!   fprintf (stderr, "\n");
! }
  
! /* Print out all constraints to FILE.  */
  
! void
! dump_constraints (FILE *file, int from)
! {
!   int i;
!   constraint_t c;
!   for (i = from; constraints.iterate (i, &c); i++)
!     if (c)
!       {
! 	dump_constraint (file, c);
! 	fprintf (file, "\n");
!       }
! }
  
! /* Print out all constraints to stderr.  */
  
! DEBUG_FUNCTION void
! debug_constraints (void)
! {
!   dump_constraints (stderr, 0);
! }
  
! /* Print out the points-to solution for VAR to FILE.  */
  
! void
! dump_solution_for_var (FILE *file, unsigned int var)
! {
!   varinfo_t vi = get_varinfo (var);
!   unsigned int i;
!   bitmap_iterator bi;
  
!   /* Dump the solution for unified vars anyway, this avoids difficulties
!      in scanning dumps in the testsuite.  */
!   fprintf (file, "%s = { ", vi->name);
!   vi = get_varinfo (var_rep[var]);
!   EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, i, bi)
!     fprintf (file, "%s ", get_varinfo (i)->name);
!   fprintf (file, "}");
  
!   /* But note when the variable was unified.  */
!   if (vi->id != var)
!     fprintf (file, " same as %s", vi->name);
  
!   fprintf (file, "\n");
! }
  
! /* Print the points-to solution for VAR to stderr.  */
  
! DEBUG_FUNCTION void
! debug_solution_for_var (unsigned int var)
! {
!   dump_solution_for_var (stderr, var);
! }
  
! /* Dump stats information to OUTFILE.  */
  
! void
! dump_sa_stats (FILE *outfile)
! {
!   fprintf (outfile, "Points-to Stats:\n");
!   fprintf (outfile, "Total vars:               %d\n", stats.total_vars);
!   fprintf (outfile, "Non-pointer vars:          %d\n",
! 	   stats.nonpointer_vars);
!   fprintf (outfile, "Statically unified vars:  %d\n",
! 	   stats.unified_vars_static);
!   fprintf (outfile, "Dynamically unified vars: %d\n",
! 	   stats.unified_vars_dynamic);
!   fprintf (outfile, "Iterations:               %d\n", stats.iterations);
!   fprintf (outfile, "Number of edges:          %d\n", stats.num_edges);
!   fprintf (outfile, "Number of implicit edges: %d\n",
! 	   stats.num_implicit_edges);
!   fprintf (outfile, "Number of avoided edges: %d\n",
! 	   stats.num_avoided_edges);
! }
  
! /* Dump points-to information to OUTFILE.  */
  
! void
! dump_sa_points_to_info (FILE *outfile)
! {
!   fprintf (outfile, "\nPoints-to sets\n\n");
  
!   for (unsigned i = 1; i < varmap.length (); i++)
!     {
!       varinfo_t vi = get_varinfo (i);
!       if (!vi->may_have_pointers)
! 	continue;
!       dump_solution_for_var (outfile, i);
!     }
! }
  
  
! /* Debug points-to information to stderr.  */
  
! DEBUG_FUNCTION void
! debug_sa_points_to_info (void)
! {
!   dump_sa_points_to_info (stderr);
! }
  
! /* Dump varinfo VI to FILE.  */
  
! void
! dump_varinfo (FILE *file, varinfo_t vi)
! {
!   if (vi == NULL)
!     return;
  
!   fprintf (file, "%u: %s\n", vi->id, vi->name);
  
!   const char *sep = " ";
!   if (vi->is_artificial_var)
!     fprintf (file, "%sartificial", sep);
!   if (vi->is_special_var)
!     fprintf (file, "%sspecial", sep);
!   if (vi->is_unknown_size_var)
!     fprintf (file, "%sunknown-size", sep);
!   if (vi->is_full_var)
!     fprintf (file, "%sfull", sep);
!   if (vi->is_heap_var)
!     fprintf (file, "%sheap", sep);
!   if (vi->may_have_pointers)
!     fprintf (file, "%smay-have-pointers", sep);
!   if (vi->only_restrict_pointers)
!     fprintf (file, "%sonly-restrict-pointers", sep);
!   if (vi->is_restrict_var)
!     fprintf (file, "%sis-restrict-var", sep);
!   if (vi->is_global_var)
!     fprintf (file, "%sglobal", sep);
!   if (vi->is_ipa_escape_point)
!     fprintf (file, "%sipa-escape-point", sep);
!   if (vi->is_fn_info)
!     fprintf (file, "%sfn-info", sep);
!   if (vi->ruid)
!     fprintf (file, "%srestrict-uid:%u", sep, vi->ruid);
!   if (vi->next)
!     fprintf (file, "%snext:%u", sep, vi->next);
!   if (vi->head != vi->id)
!     fprintf (file, "%shead:%u", sep, vi->head);
!   if (vi->offset)
!     fprintf (file, "%soffset:" HOST_WIDE_INT_PRINT_DEC, sep, vi->offset);
!   if (vi->size != ~HOST_WIDE_INT_0U)
!     fprintf (file, "%ssize:" HOST_WIDE_INT_PRINT_DEC, sep, vi->size);
!   if (vi->fullsize != ~HOST_WIDE_INT_0U && vi->fullsize != vi->size)
!     fprintf (file, "%sfullsize:" HOST_WIDE_INT_PRINT_DEC, sep,
! 	     vi->fullsize);
!   fprintf (file, "\n");
  
!   if (vi->solution && !bitmap_empty_p (vi->solution))
!     {
!       bitmap_iterator bi;
!       unsigned i;
!       fprintf (file, " solution: {");
!       EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, i, bi)
! 	fprintf (file, " %u", i);
!       fprintf (file, " }\n");
!     }
! 
!   if (vi->oldsolution && !bitmap_empty_p (vi->oldsolution)
!       && !bitmap_equal_p (vi->solution, vi->oldsolution))
!     {
!       bitmap_iterator bi;
!       unsigned i;
!       fprintf (file, " oldsolution: {");
!       EXECUTE_IF_SET_IN_BITMAP (vi->oldsolution, 0, i, bi)
! 	fprintf (file, " %u", i);
!       fprintf (file, " }\n");
!     }
! }
! 
! /* Dump varinfo VI to stderr.  */
! 
! DEBUG_FUNCTION void
! debug_varinfo (varinfo_t vi)
  {
!   dump_varinfo (stderr, vi);
  }
  
! /* Dump varmap to FILE.  */
  
! void
! dump_varmap (FILE *file)
  {
!   if (varmap.length () == 0)
!     return;
! 
!   fprintf (file, "variables:\n");
! 
!   for (unsigned int i = 0; i < varmap.length (); ++i)
!     {
!       varinfo_t vi = get_varinfo (i);
!       dump_varinfo (file, vi);
!     }
! 
!   fprintf (file, "\n");
  }
  
! /* Dump varmap to stderr.  */
! 
! DEBUG_FUNCTION void
! debug_varmap (void)
! {
!   dump_varmap (stderr);
! }
! 
! } // namespace pointer_analysis
! 
! 
! using namespace pointer_analysis;
! 
! static bool use_field_sensitive = true;
! static int in_ipa_mode = 0;
! 
! static unsigned int create_variable_info_for (tree, const char *, bool);
! static varinfo_t lookup_vi_for_tree (tree);
! static inline bool type_can_have_subvars (const_tree);
! static void make_param_constraints (varinfo_t);
! 
! /* Pool of variable info structures.  */
! static object_allocator<variable_info> variable_info_pool
!   ("Variable info pool");
! 
! /* Map varinfo to final pt_solution.  */
! static hash_map<varinfo_t, pt_solution *> *final_solutions;
! static struct obstack final_solutions_obstack;
  
  /* Return a new variable info structure consisting for a variable
     named NAME, and using constraint graph node NODE.  Append it
*************** get_call_clobber_vi (gcall *call)
*** 502,667 ****
  }
  
  
- enum constraint_expr_type {SCALAR, DEREF, ADDRESSOF};
- 
- /* An expression that appears in a constraint.  */
- 
- struct constraint_expr
- {
-   /* Constraint type.  */
-   constraint_expr_type type;
- 
-   /* Variable we are referring to in the constraint.  */
-   unsigned int var;
- 
-   /* Offset, in bits, of this constraint from the beginning of
-      variables it ends up referring to.
- 
-      IOW, in a deref constraint, we would deref, get the result set,
-      then add OFFSET to each member.   */
-   HOST_WIDE_INT offset;
- };
- 
- /* Use 0x8000... as special unknown offset.  */
- #define UNKNOWN_OFFSET HOST_WIDE_INT_MIN
- 
- typedef struct constraint_expr ce_s;
  static void get_constraint_for_1 (tree, vec<ce_s> *, bool, bool);
  static void get_constraint_for (tree, vec<ce_s> *);
  static void get_constraint_for_rhs (tree, vec<ce_s> *);
  static void do_deref (vec<ce_s> *);
  
! /* Our set constraints are made up of two constraint expressions, one
!    LHS, and one RHS.
! 
!    As described in the introduction, our set constraints each represent an
!    operation between set valued variables.
! */
! struct constraint
! {
!   struct constraint_expr lhs;
!   struct constraint_expr rhs;
! };
! 
! /* List of constraints that we use to build the constraint graph from.  */
  
- static vec<constraint_t> constraints;
  static object_allocator<constraint> constraint_pool ("Constraint pool");
  
- /* The constraint graph is represented as an array of bitmaps
-    containing successor nodes.  */
- 
- struct constraint_graph
- {
-   /* Size of this graph, which may be different than the number of
-      nodes in the variable map.  */
-   unsigned int size;
- 
-   /* Explicit successors of each node. */
-   bitmap *succs;
- 
-   /* Implicit predecessors of each node (Used for variable
-      substitution). */
-   bitmap *implicit_preds;
- 
-   /* Explicit predecessors of each node (Used for variable substitution).  */
-   bitmap *preds;
- 
-   /* Indirect cycle representatives, or -1 if the node has no indirect
-      cycles.  */
-   int *indirect_cycles;
- 
-   /* Representative node for a node.  rep[a] == a unless the node has
-      been unified. */
-   unsigned int *rep;
- 
-   /* Equivalence class representative for a label.  This is used for
-      variable substitution.  */
-   int *eq_rep;
- 
-   /* Pointer equivalence label for a node.  All nodes with the same
-      pointer equivalence label can be unified together at some point
-      (either during constraint optimization or after the constraint
-      graph is built).  */
-   unsigned int *pe;
- 
-   /* Pointer equivalence representative for a label.  This is used to
-      handle nodes that are pointer equivalent but not location
-      equivalent.  We can unite these once the addressof constraints
-      are transformed into initial points-to sets.  */
-   int *pe_rep;
- 
-   /* Pointer equivalence label for each node, used during variable
-      substitution.  */
-   unsigned int *pointer_label;
- 
-   /* Location equivalence label for each node, used during location
-      equivalence finding.  */
-   unsigned int *loc_label;
- 
-   /* Pointed-by set for each node, used during location equivalence
-      finding.  This is pointed-by rather than pointed-to, because it
-      is constructed using the predecessor graph.  */
-   bitmap *pointed_by;
- 
-   /* Points to sets for pointer equivalence.  This is *not* the actual
-      points-to sets for nodes.  */
-   bitmap *points_to;
- 
-   /* Bitmap of nodes where the bit is set if the node is a direct
-      node.  Used for variable substitution.  */
-   sbitmap direct_nodes;
- 
-   /* Bitmap of nodes where the bit is set if the node is address
-      taken.  Used for variable substitution.  */
-   bitmap address_taken;
- 
-   /* Vector of complex constraints for each graph node.  Complex
-      constraints are those involving dereferences or offsets that are
-      not 0.  */
-   vec<constraint_t> *complex;
- };
- 
- static constraint_graph_t graph;
- 
- /* During variable substitution and the offline version of indirect
-    cycle finding, we create nodes to represent dereferences and
-    address taken constraints.  These represent where these start and
-    end.  */
- #define FIRST_REF_NODE (varmap).length ()
- #define LAST_REF_NODE (FIRST_REF_NODE + (FIRST_REF_NODE - 1))
- 
- /* Return the representative node for NODE, if NODE has been unioned
-    with another NODE.
-    This function performs path compression along the way to finding
-    the representative.  */
- 
- static unsigned int
- find (unsigned int node)
- {
-   gcc_checking_assert (node < graph->size);
-   if (graph->rep[node] != node)
-     return graph->rep[node] = find (graph->rep[node]);
-   return node;
- }
- 
- /* Union the TO and FROM nodes to the TO nodes.
-    Note that at some point in the future, we may want to do
-    union-by-rank, in which case we are going to have to return the
-    node we unified to.  */
- 
- static bool
- unite (unsigned int to, unsigned int from)
- {
-   gcc_checking_assert (to < graph->size && from < graph->size);
-   if (to != from && graph->rep[from] != to)
-     {
-       graph->rep[from] = to;
-       return true;
-     }
-   return false;
- }
- 
  /* Create a new constraint consisting of LHS and RHS expressions.  */
  
  static constraint_t
--- 690,704 ----
  }
  
  
  static void get_constraint_for_1 (tree, vec<ce_s> *, bool, bool);
  static void get_constraint_for (tree, vec<ce_s> *);
  static void get_constraint_for_rhs (tree, vec<ce_s> *);
  static void do_deref (vec<ce_s> *);
  
! /* Allocator for 'constraints' vector.  */
  
  static object_allocator<constraint> constraint_pool ("Constraint pool");
  
  /* Create a new constraint consisting of LHS and RHS expressions.  */
  
  static constraint_t
*************** new_constraint (const struct constraint_
*** 674,2985 ****
    return ret;
  }
  
- /* Print out constraint C to FILE.  */
- 
- static void
- dump_constraint (FILE *file, constraint_t c)
- {
-   if (c->lhs.type == ADDRESSOF)
-     fprintf (file, "&");
-   else if (c->lhs.type == DEREF)
-     fprintf (file, "*");
-   if (dump_file)
-     fprintf (file, "%s", get_varinfo (c->lhs.var)->name);
-   else
-     fprintf (file, "V%d", c->lhs.var);
-   if (c->lhs.offset == UNKNOWN_OFFSET)
-     fprintf (file, " + UNKNOWN");
-   else if (c->lhs.offset != 0)
-     fprintf (file, " + " HOST_WIDE_INT_PRINT_DEC, c->lhs.offset);
-   fprintf (file, " = ");
-   if (c->rhs.type == ADDRESSOF)
-     fprintf (file, "&");
-   else if (c->rhs.type == DEREF)
-     fprintf (file, "*");
-   if (dump_file)
-     fprintf (file, "%s", get_varinfo (c->rhs.var)->name);
-   else
-     fprintf (file, "V%d", c->rhs.var);
-   if (c->rhs.offset == UNKNOWN_OFFSET)
-     fprintf (file, " + UNKNOWN");
-   else if (c->rhs.offset != 0)
-     fprintf (file, " + " HOST_WIDE_INT_PRINT_DEC, c->rhs.offset);
- }
- 
- 
- void debug_constraint (constraint_t);
- void debug_constraints (void);
- void debug_constraint_graph (void);
- void debug_solution_for_var (unsigned int);
- void debug_sa_points_to_info (void);
- void debug_varinfo (varinfo_t);
- void debug_varmap (void);
- 
- /* Print out constraint C to stderr.  */
- 
- DEBUG_FUNCTION void
- debug_constraint (constraint_t c)
- {
-   dump_constraint (stderr, c);
-   fprintf (stderr, "\n");
- }
- 
- /* Print out all constraints to FILE */
- 
- static void
- dump_constraints (FILE *file, int from)
- {
-   int i;
-   constraint_t c;
-   for (i = from; constraints.iterate (i, &c); i++)
-     if (c)
-       {
- 	dump_constraint (file, c);
- 	fprintf (file, "\n");
-       }
- }
- 
- /* Print out all constraints to stderr.  */
- 
- DEBUG_FUNCTION void
- debug_constraints (void)
- {
-   dump_constraints (stderr, 0);
- }
- 
- /* Print the constraint graph in dot format.  */
- 
- static void
- dump_constraint_graph (FILE *file)
- {
-   unsigned int i;
- 
-   /* Only print the graph if it has already been initialized:  */
-   if (!graph)
-     return;
- 
-   /* Prints the header of the dot file:  */
-   fprintf (file, "strict digraph {\n");
-   fprintf (file, "  node [\n    shape = box\n  ]\n");
-   fprintf (file, "  edge [\n    fontsize = \"12\"\n  ]\n");
-   fprintf (file, "\n  // List of nodes and complex constraints in "
- 	   "the constraint graph:\n");
- 
-   /* The next lines print the nodes in the graph together with the
-      complex constraints attached to them.  */
-   for (i = 1; i < graph->size; i++)
-     {
-       if (i == FIRST_REF_NODE)
- 	continue;
-       if (find (i) != i)
- 	continue;
-       if (i < FIRST_REF_NODE)
- 	fprintf (file, "\"%s\"", get_varinfo (i)->name);
-       else
- 	fprintf (file, "\"*%s\"", get_varinfo (i - FIRST_REF_NODE)->name);
-       if (graph->complex[i].exists ())
- 	{
- 	  unsigned j;
- 	  constraint_t c;
- 	  fprintf (file, " [label=\"\\N\\n");
- 	  for (j = 0; graph->complex[i].iterate (j, &c); ++j)
- 	    {
- 	      dump_constraint (file, c);
- 	      fprintf (file, "\\l");
- 	    }
- 	  fprintf (file, "\"]");
- 	}
-       fprintf (file, ";\n");
-     }
- 
-   /* Go over the edges.  */
-   fprintf (file, "\n  // Edges in the constraint graph:\n");
-   for (i = 1; i < graph->size; i++)
-     {
-       unsigned j;
-       bitmap_iterator bi;
-       if (find (i) != i)
- 	continue;
-       EXECUTE_IF_IN_NONNULL_BITMAP (graph->succs[i], 0, j, bi)
- 	{
- 	  unsigned to = find (j);
- 	  if (i == to)
- 	    continue;
- 	  if (i < FIRST_REF_NODE)
- 	    fprintf (file, "\"%s\"", get_varinfo (i)->name);
- 	  else
- 	    fprintf (file, "\"*%s\"", get_varinfo (i - FIRST_REF_NODE)->name);
- 	  fprintf (file, " -> ");
- 	  if (to < FIRST_REF_NODE)
- 	    fprintf (file, "\"%s\"", get_varinfo (to)->name);
- 	  else
- 	    fprintf (file, "\"*%s\"", get_varinfo (to - FIRST_REF_NODE)->name);
- 	  fprintf (file, ";\n");
- 	}
-     }
- 
-   /* Prints the tail of the dot file.  */
-   fprintf (file, "}\n");
- }
- 
- /* Print out the constraint graph to stderr.  */
- 
- DEBUG_FUNCTION void
- debug_constraint_graph (void)
- {
-   dump_constraint_graph (stderr);
- }
- 
- /* SOLVER FUNCTIONS
- 
-    The solver is a simple worklist solver, that works on the following
-    algorithm:
- 
-    sbitmap changed_nodes = all zeroes;
-    changed_count = 0;
-    For each node that is not already collapsed:
-        changed_count++;
-        set bit in changed nodes
- 
-    while (changed_count > 0)
-    {
-      compute topological ordering for constraint graph
- 
-      find and collapse cycles in the constraint graph (updating
-      changed if necessary)
- 
-      for each node (n) in the graph in topological order:
-        changed_count--;
- 
-        Process each complex constraint associated with the node,
-        updating changed if necessary.
- 
-        For each outgoing edge from n, propagate the solution from n to
-        the destination of the edge, updating changed as necessary.
- 
-    }  */
- 
- /* Return true if two constraint expressions A and B are equal.  */
- 
- static bool
- constraint_expr_equal (struct constraint_expr a, struct constraint_expr b)
- {
-   return a.type == b.type && a.var == b.var && a.offset == b.offset;
- }
- 
- /* Return true if constraint expression A is less than constraint expression
-    B.  This is just arbitrary, but consistent, in order to give them an
-    ordering.  */
- 
- static bool
- constraint_expr_less (struct constraint_expr a, struct constraint_expr b)
- {
-   if (a.type == b.type)
-     {
-       if (a.var == b.var)
- 	return a.offset < b.offset;
-       else
- 	return a.var < b.var;
-     }
-   else
-     return a.type < b.type;
- }
- 
- /* Return true if constraint A is less than constraint B.  This is just
-    arbitrary, but consistent, in order to give them an ordering.  */
- 
- static bool
- constraint_less (const constraint_t &a, const constraint_t &b)
- {
-   if (constraint_expr_less (a->lhs, b->lhs))
-     return true;
-   else if (constraint_expr_less (b->lhs, a->lhs))
-     return false;
-   else
-     return constraint_expr_less (a->rhs, b->rhs);
- }
- 
- /* Return true if two constraints A and B are equal.  */
- 
- static bool
- constraint_equal (const constraint &a, const constraint &b)
- {
-   return constraint_expr_equal (a.lhs, b.lhs)
-     && constraint_expr_equal (a.rhs, b.rhs);
- }
- 
- 
- /* Find a constraint LOOKFOR in the sorted constraint vector VEC */
- 
- static constraint_t
- constraint_vec_find (vec<constraint_t> vec,
- 		     constraint &lookfor)
- {
-   unsigned int place;
-   constraint_t found;
- 
-   if (!vec.exists ())
-     return NULL;
- 
-   place = vec.lower_bound (&lookfor, constraint_less);
-   if (place >= vec.length ())
-     return NULL;
-   found = vec[place];
-   if (!constraint_equal (*found, lookfor))
-     return NULL;
-   return found;
- }
- 
- /* Union two constraint vectors, TO and FROM.  Put the result in TO.
-    Returns true of TO set is changed.  */
- 
- static bool
- constraint_set_union (vec<constraint_t> *to,
- 		      vec<constraint_t> *from)
- {
-   int i;
-   constraint_t c;
-   bool any_change = false;
- 
-   FOR_EACH_VEC_ELT (*from, i, c)
-     {
-       if (constraint_vec_find (*to, *c) == NULL)
- 	{
- 	  unsigned int place = to->lower_bound (c, constraint_less);
- 	  to->safe_insert (place, c);
-           any_change = true;
- 	}
-     }
-   return any_change;
- }
- 
- /* Expands the solution in SET to all sub-fields of variables included.  */
- 
- static bitmap
- solution_set_expand (bitmap set, bitmap *expanded)
- {
-   bitmap_iterator bi;
-   unsigned j;
- 
-   if (*expanded)
-     return *expanded;
- 
-   *expanded = BITMAP_ALLOC (&iteration_obstack);
- 
-   /* In a first pass expand variables, once for each head to avoid
-      quadratic behavior, to include all sub-fields.  */
-   unsigned prev_head = 0;
-   EXECUTE_IF_SET_IN_BITMAP (set, 0, j, bi)
-     {
-       varinfo_t v = get_varinfo (j);
-       if (v->is_artificial_var
- 	  || v->is_full_var)
- 	continue;
-       if (v->head != prev_head)
- 	{
- 	  varinfo_t head = get_varinfo (v->head);
- 	  unsigned num = 1;
- 	  for (varinfo_t n = vi_next (head); n != NULL; n = vi_next (n))
- 	    {
- 	      if (n->id != head->id + num)
- 		{
- 		  /* Usually sub variables are adjacent but since we
- 		     create pointed-to restrict representatives there
- 		     can be gaps as well.  */
- 		  bitmap_set_range (*expanded, head->id, num);
- 		  head = n;
- 		  num = 1;
- 		}
- 	      else
- 		num++;
- 	    }
- 
- 	  bitmap_set_range (*expanded, head->id, num);
- 	  prev_head = v->head;
- 	}
-     }
- 
-   /* And finally set the rest of the bits from SET in an efficient way.  */
-   bitmap_ior_into (*expanded, set);
- 
-   return *expanded;
- }
- 
- /* Union solution sets TO and DELTA, and add INC to each member of DELTA in the
-    process.  */
- 
- static bool
- set_union_with_increment  (bitmap to, bitmap delta, HOST_WIDE_INT inc,
- 			   bitmap *expanded_delta)
- {
-   bool changed = false;
-   bitmap_iterator bi;
-   unsigned int i;
- 
-   /* If the solution of DELTA contains anything it is good enough to transfer
-      this to TO.  */
-   if (bitmap_bit_p (delta, anything_id))
-     return bitmap_set_bit (to, anything_id);
- 
-   /* If the offset is unknown we have to expand the solution to
-      all subfields.  */
-   if (inc == UNKNOWN_OFFSET)
-     {
-       delta = solution_set_expand (delta, expanded_delta);
-       changed |= bitmap_ior_into (to, delta);
-       return changed;
-     }
- 
-   /* For non-zero offset union the offsetted solution into the destination.  */
-   EXECUTE_IF_SET_IN_BITMAP (delta, 0, i, bi)
-     {
-       varinfo_t vi = get_varinfo (i);
- 
-       /* If this is a variable with just one field just set its bit
-          in the result.  */
-       if (vi->is_artificial_var
- 	  || vi->is_unknown_size_var
- 	  || vi->is_full_var)
- 	changed |= bitmap_set_bit (to, i);
-       else
- 	{
- 	  HOST_WIDE_INT fieldoffset = vi->offset + inc;
- 	  unsigned HOST_WIDE_INT size = vi->size;
- 
- 	  /* If the offset makes the pointer point to before the
- 	     variable use offset zero for the field lookup.  */
- 	  if (fieldoffset < 0)
- 	    vi = get_varinfo (vi->head);
- 	  else
- 	    vi = first_or_preceding_vi_for_offset (vi, fieldoffset);
- 
- 	  do
- 	    {
- 	      changed |= bitmap_set_bit (to, vi->id);
- 	      if (vi->is_full_var
- 		  || vi->next == 0)
- 		break;
- 
- 	      /* We have to include all fields that overlap the current field
- 	         shifted by inc.  */
- 	      vi = vi_next (vi);
- 	    }
- 	  while (vi->offset < fieldoffset + size);
- 	}
-     }
- 
-   return changed;
- }
- 
- /* Insert constraint C into the list of complex constraints for graph
-    node VAR.  */
- 
- static void
- insert_into_complex (constraint_graph_t graph,
- 		     unsigned int var, constraint_t c)
- {
-   vec<constraint_t> complex = graph->complex[var];
-   unsigned int place = complex.lower_bound (c, constraint_less);
- 
-   /* Only insert constraints that do not already exist.  */
-   if (place >= complex.length ()
-       || !constraint_equal (*c, *complex[place]))
-     graph->complex[var].safe_insert (place, c);
- }
- 
- 
- /* Condense two variable nodes into a single variable node, by moving
-    all associated info from FROM to TO. Returns true if TO node's
-    constraint set changes after the merge.  */
- 
- static bool
- merge_node_constraints (constraint_graph_t graph, unsigned int to,
- 			unsigned int from)
- {
-   unsigned int i;
-   constraint_t c;
-   bool any_change = false;
- 
-   gcc_checking_assert (find (from) == to);
- 
-   /* Move all complex constraints from src node into to node  */
-   FOR_EACH_VEC_ELT (graph->complex[from], i, c)
-     {
-       /* In complex constraints for node FROM, we may have either
- 	 a = *FROM, and *FROM = a, or an offseted constraint which are
- 	 always added to the rhs node's constraints.  */
- 
-       if (c->rhs.type == DEREF)
- 	c->rhs.var = to;
-       else if (c->lhs.type == DEREF)
- 	c->lhs.var = to;
-       else
- 	c->rhs.var = to;
- 
-     }
-   any_change = constraint_set_union (&graph->complex[to],
- 				     &graph->complex[from]);
-   graph->complex[from].release ();
-   return any_change;
- }
- 
- 
- /* Remove edges involving NODE from GRAPH.  */
- 
- static void
- clear_edges_for_node (constraint_graph_t graph, unsigned int node)
- {
-   if (graph->succs[node])
-     BITMAP_FREE (graph->succs[node]);
- }
- 
- /* Merge GRAPH nodes FROM and TO into node TO.  */
- 
- static void
- merge_graph_nodes (constraint_graph_t graph, unsigned int to,
- 		   unsigned int from)
- {
-   if (graph->indirect_cycles[from] != -1)
-     {
-       /* If we have indirect cycles with the from node, and we have
- 	 none on the to node, the to node has indirect cycles from the
- 	 from node now that they are unified.
- 	 If indirect cycles exist on both, unify the nodes that they
- 	 are in a cycle with, since we know they are in a cycle with
- 	 each other.  */
-       if (graph->indirect_cycles[to] == -1)
- 	graph->indirect_cycles[to] = graph->indirect_cycles[from];
-     }
- 
-   /* Merge all the successor edges.  */
-   if (graph->succs[from])
-     {
-       if (!graph->succs[to])
- 	graph->succs[to] = BITMAP_ALLOC (&pta_obstack);
-       bitmap_ior_into (graph->succs[to],
- 		       graph->succs[from]);
-     }
- 
-   clear_edges_for_node (graph, from);
- }
- 
- 
- /* Add an indirect graph edge to GRAPH, going from TO to FROM if
-    it doesn't exist in the graph already.  */
- 
- static void
- add_implicit_graph_edge (constraint_graph_t graph, unsigned int to,
- 			 unsigned int from)
- {
-   if (to == from)
-     return;
- 
-   if (!graph->implicit_preds[to])
-     graph->implicit_preds[to] = BITMAP_ALLOC (&predbitmap_obstack);
- 
-   if (bitmap_set_bit (graph->implicit_preds[to], from))
-     stats.num_implicit_edges++;
- }
- 
- /* Add a predecessor graph edge to GRAPH, going from TO to FROM if
-    it doesn't exist in the graph already.
-    Return false if the edge already existed, true otherwise.  */
- 
- static void
- add_pred_graph_edge (constraint_graph_t graph, unsigned int to,
- 		     unsigned int from)
- {
-   if (!graph->preds[to])
-     graph->preds[to] = BITMAP_ALLOC (&predbitmap_obstack);
-   bitmap_set_bit (graph->preds[to], from);
- }
- 
- /* Add a graph edge to GRAPH, going from FROM to TO if
-    it doesn't exist in the graph already.
-    Return false if the edge already existed, true otherwise.  */
- 
- static bool
- add_graph_edge (constraint_graph_t graph, unsigned int to,
- 		unsigned int from)
- {
-   if (to == from)
-     {
-       return false;
-     }
-   else
-     {
-       bool r = false;
- 
-       if (!graph->succs[from])
- 	graph->succs[from] = BITMAP_ALLOC (&pta_obstack);
- 
-       /* The graph solving process does not avoid "triangles", thus
- 	 there can be multiple paths from a node to another involving
- 	 intermediate other nodes.  That causes extra copying which is
- 	 most difficult to avoid when the intermediate node is ESCAPED
- 	 because there are no edges added from ESCAPED.  Avoid
- 	 adding the direct edge FROM -> TO when we have FROM -> ESCAPED
- 	 and TO contains ESCAPED.
- 	 ???  Note this is only a heuristic, it does not prevent the
- 	 situation from occuring.  The heuristic helps PR38474 and
- 	 PR99912 significantly.  */
-       if (to < FIRST_REF_NODE
- 	  && bitmap_bit_p (graph->succs[from], find (escaped_id))
- 	  && bitmap_bit_p (get_varinfo (find (to))->solution, escaped_id))
- 	{
- 	  stats.num_avoided_edges++;
- 	  return false;
- 	}
- 
-       if (bitmap_set_bit (graph->succs[from], to))
- 	{
- 	  r = true;
- 	  if (to < FIRST_REF_NODE && from < FIRST_REF_NODE)
- 	    stats.num_edges++;
- 	}
-       return r;
-     }
- }
- 
- 
- /* Initialize the constraint graph structure to contain SIZE nodes.  */
- 
- static void
- init_graph (unsigned int size)
- {
-   unsigned int j;
- 
-   graph = XCNEW (struct constraint_graph);
-   graph->size = size;
-   graph->succs = XCNEWVEC (bitmap, graph->size);
-   graph->indirect_cycles = XNEWVEC (int, graph->size);
-   graph->rep = XNEWVEC (unsigned int, graph->size);
-   /* ??? Macros do not support template types with multiple arguments,
-      so we use a typedef to work around it.  */
-   typedef vec<constraint_t> vec_constraint_t_heap;
-   graph->complex = XCNEWVEC (vec_constraint_t_heap, size);
-   graph->pe = XCNEWVEC (unsigned int, graph->size);
-   graph->pe_rep = XNEWVEC (int, graph->size);
- 
-   for (j = 0; j < graph->size; j++)
-     {
-       graph->rep[j] = j;
-       graph->pe_rep[j] = -1;
-       graph->indirect_cycles[j] = -1;
-     }
- }
- 
- /* Build the constraint graph, adding only predecessor edges right now.  */
- 
- static void
- build_pred_graph (void)
- {
-   int i;
-   constraint_t c;
-   unsigned int j;
- 
-   graph->implicit_preds = XCNEWVEC (bitmap, graph->size);
-   graph->preds = XCNEWVEC (bitmap, graph->size);
-   graph->pointer_label = XCNEWVEC (unsigned int, graph->size);
-   graph->loc_label = XCNEWVEC (unsigned int, graph->size);
-   graph->pointed_by = XCNEWVEC (bitmap, graph->size);
-   graph->points_to = XCNEWVEC (bitmap, graph->size);
-   graph->eq_rep = XNEWVEC (int, graph->size);
-   graph->direct_nodes = sbitmap_alloc (graph->size);
-   graph->address_taken = BITMAP_ALLOC (&predbitmap_obstack);
-   bitmap_clear (graph->direct_nodes);
- 
-   for (j = 1; j < FIRST_REF_NODE; j++)
-     {
-       if (!get_varinfo (j)->is_special_var)
- 	bitmap_set_bit (graph->direct_nodes, j);
-     }
- 
-   for (j = 0; j < graph->size; j++)
-     graph->eq_rep[j] = -1;
- 
-   for (j = 0; j < varmap.length (); j++)
-     graph->indirect_cycles[j] = -1;
- 
-   FOR_EACH_VEC_ELT (constraints, i, c)
-     {
-       struct constraint_expr lhs = c->lhs;
-       struct constraint_expr rhs = c->rhs;
-       unsigned int lhsvar = lhs.var;
-       unsigned int rhsvar = rhs.var;
- 
-       if (lhs.type == DEREF)
- 	{
- 	  /* *x = y.  */
- 	  if (rhs.offset == 0 && lhs.offset == 0 && rhs.type == SCALAR)
- 	    {
- 	      if (lhs.var == anything_id)
- 		add_pred_graph_edge (graph, storedanything_id, rhsvar);
- 	      else
- 		add_pred_graph_edge (graph, FIRST_REF_NODE + lhsvar, rhsvar);
- 	    }
- 	}
-       else if (rhs.type == DEREF)
- 	{
- 	  /* x = *y */
- 	  if (rhs.offset == 0 && lhs.offset == 0 && lhs.type == SCALAR)
- 	    add_pred_graph_edge (graph, lhsvar, FIRST_REF_NODE + rhsvar);
- 	  else
- 	    bitmap_clear_bit (graph->direct_nodes, lhsvar);
- 	}
-       else if (rhs.type == ADDRESSOF)
- 	{
- 	  varinfo_t v;
- 
- 	  /* x = &y */
- 	  if (graph->points_to[lhsvar] == NULL)
- 	    graph->points_to[lhsvar] = BITMAP_ALLOC (&predbitmap_obstack);
- 	  bitmap_set_bit (graph->points_to[lhsvar], rhsvar);
- 
- 	  if (graph->pointed_by[rhsvar] == NULL)
- 	    graph->pointed_by[rhsvar] = BITMAP_ALLOC (&predbitmap_obstack);
- 	  bitmap_set_bit (graph->pointed_by[rhsvar], lhsvar);
- 
- 	  /* Implicitly, *x = y */
- 	  add_implicit_graph_edge (graph, FIRST_REF_NODE + lhsvar, rhsvar);
- 
- 	  /* All related variables are no longer direct nodes.  */
- 	  bitmap_clear_bit (graph->direct_nodes, rhsvar);
-           v = get_varinfo (rhsvar);
-           if (!v->is_full_var)
-             {
-               v = get_varinfo (v->head);
-               do
-                 {
-                   bitmap_clear_bit (graph->direct_nodes, v->id);
-                   v = vi_next (v);
-                 }
-               while (v != NULL);
-             }
- 	  bitmap_set_bit (graph->address_taken, rhsvar);
- 	}
-       else if (lhsvar > anything_id
- 	       && lhsvar != rhsvar && lhs.offset == 0 && rhs.offset == 0)
- 	{
- 	  /* x = y */
- 	  add_pred_graph_edge (graph, lhsvar, rhsvar);
- 	  /* Implicitly, *x = *y */
- 	  add_implicit_graph_edge (graph, FIRST_REF_NODE + lhsvar,
- 				   FIRST_REF_NODE + rhsvar);
- 	}
-       else if (lhs.offset != 0 || rhs.offset != 0)
- 	{
- 	  if (rhs.offset != 0)
- 	    bitmap_clear_bit (graph->direct_nodes, lhs.var);
- 	  else if (lhs.offset != 0)
- 	    bitmap_clear_bit (graph->direct_nodes, rhs.var);
- 	}
-     }
- }
- 
- /* Build the constraint graph, adding successor edges.  */
- 
- static void
- build_succ_graph (void)
- {
-   unsigned i, t;
-   constraint_t c;
- 
-   FOR_EACH_VEC_ELT (constraints, i, c)
-     {
-       struct constraint_expr lhs;
-       struct constraint_expr rhs;
-       unsigned int lhsvar;
-       unsigned int rhsvar;
- 
-       if (!c)
- 	continue;
- 
-       lhs = c->lhs;
-       rhs = c->rhs;
-       lhsvar = find (lhs.var);
-       rhsvar = find (rhs.var);
- 
-       if (lhs.type == DEREF)
- 	{
- 	  if (rhs.offset == 0 && lhs.offset == 0 && rhs.type == SCALAR)
- 	    {
- 	      if (lhs.var == anything_id)
- 		add_graph_edge (graph, storedanything_id, rhsvar);
- 	      else
- 		add_graph_edge (graph, FIRST_REF_NODE + lhsvar, rhsvar);
- 	    }
- 	}
-       else if (rhs.type == DEREF)
- 	{
- 	  if (rhs.offset == 0 && lhs.offset == 0 && lhs.type == SCALAR)
- 	    add_graph_edge (graph, lhsvar, FIRST_REF_NODE + rhsvar);
- 	}
-       else if (rhs.type == ADDRESSOF)
- 	{
- 	  /* x = &y */
- 	  gcc_checking_assert (find (rhs.var) == rhs.var);
- 	  bitmap_set_bit (get_varinfo (lhsvar)->solution, rhsvar);
- 	}
-       else if (lhsvar > anything_id
- 	       && lhsvar != rhsvar && lhs.offset == 0 && rhs.offset == 0)
- 	{
- 	  add_graph_edge (graph, lhsvar, rhsvar);
- 	}
-     }
- 
-   /* Add edges from STOREDANYTHING to all nodes that can receive pointers.  */
-   t = find (storedanything_id);
-   for (i = integer_id + 1; i < FIRST_REF_NODE; ++i)
-     {
-       if (get_varinfo (i)->may_have_pointers)
- 	add_graph_edge (graph, find (i), t);
-     }
- 
-   /* Everything stored to ANYTHING also potentially escapes.  */
-   add_graph_edge (graph, find (escaped_id), t);
- }
- 
- 
- /* Changed variables on the last iteration.  */
- static bitmap changed;
- 
- /* Strongly Connected Component visitation info.  */
- 
- class scc_info
- {
- public:
-   scc_info (size_t size);
-   ~scc_info ();
- 
-   auto_sbitmap visited;
-   auto_sbitmap deleted;
-   unsigned int *dfs;
-   unsigned int *node_mapping;
-   int current_index;
-   auto_vec<unsigned> scc_stack;
- };
- 
- 
- /* Recursive routine to find strongly connected components in GRAPH.
-    SI is the SCC info to store the information in, and N is the id of current
-    graph node we are processing.
- 
-    This is Tarjan's strongly connected component finding algorithm, as
-    modified by Nuutila to keep only non-root nodes on the stack.
-    The algorithm can be found in "On finding the strongly connected
-    connected components in a directed graph" by Esko Nuutila and Eljas
-    Soisalon-Soininen, in Information Processing Letters volume 49,
-    number 1, pages 9-14.  */
- 
- static void
- scc_visit (constraint_graph_t graph, class scc_info *si, unsigned int n)
- {
-   unsigned int i;
-   bitmap_iterator bi;
-   unsigned int my_dfs;
- 
-   bitmap_set_bit (si->visited, n);
-   si->dfs[n] = si->current_index ++;
-   my_dfs = si->dfs[n];
- 
-   /* Visit all the successors.  */
-   EXECUTE_IF_IN_NONNULL_BITMAP (graph->succs[n], 0, i, bi)
-     {
-       unsigned int w;
- 
-       if (i > LAST_REF_NODE)
- 	break;
- 
-       w = find (i);
-       if (bitmap_bit_p (si->deleted, w))
- 	continue;
- 
-       if (!bitmap_bit_p (si->visited, w))
- 	scc_visit (graph, si, w);
- 
-       unsigned int t = find (w);
-       gcc_checking_assert (find (n) == n);
-       if (si->dfs[t] < si->dfs[n])
- 	si->dfs[n] = si->dfs[t];
-     }
- 
-   /* See if any components have been identified.  */
-   if (si->dfs[n] == my_dfs)
-     {
-       if (si->scc_stack.length () > 0
- 	  && si->dfs[si->scc_stack.last ()] >= my_dfs)
- 	{
- 	  bitmap scc = BITMAP_ALLOC (NULL);
- 	  unsigned int lowest_node;
- 	  bitmap_iterator bi;
- 
- 	  bitmap_set_bit (scc, n);
- 
- 	  while (si->scc_stack.length () != 0
- 		 && si->dfs[si->scc_stack.last ()] >= my_dfs)
- 	    {
- 	      unsigned int w = si->scc_stack.pop ();
- 
- 	      bitmap_set_bit (scc, w);
- 	    }
- 
- 	  lowest_node = bitmap_first_set_bit (scc);
- 	  gcc_assert (lowest_node < FIRST_REF_NODE);
- 
- 	  /* Collapse the SCC nodes into a single node, and mark the
- 	     indirect cycles.  */
- 	  EXECUTE_IF_SET_IN_BITMAP (scc, 0, i, bi)
- 	    {
- 	      if (i < FIRST_REF_NODE)
- 		{
- 		  if (unite (lowest_node, i))
- 		    unify_nodes (graph, lowest_node, i, false);
- 		}
- 	      else
- 		{
- 		  unite (lowest_node, i);
- 		  graph->indirect_cycles[i - FIRST_REF_NODE] = lowest_node;
- 		}
- 	    }
- 	  bitmap_set_bit (si->deleted, lowest_node);
- 	}
-       else
- 	bitmap_set_bit (si->deleted, n);
-     }
-   else
-     si->scc_stack.safe_push (n);
- }
- 
- /* Unify node FROM into node TO, updating the changed count if
-    necessary when UPDATE_CHANGED is true.  */
- 
- static void
- unify_nodes (constraint_graph_t graph, unsigned int to, unsigned int from,
- 	     bool update_changed)
- {
-   gcc_checking_assert (to != from && find (to) == to);
- 
-   if (dump_file && (dump_flags & TDF_DETAILS))
-     fprintf (dump_file, "Unifying %s to %s\n",
- 	     get_varinfo (from)->name,
- 	     get_varinfo (to)->name);
- 
-   if (update_changed)
-     stats.unified_vars_dynamic++;
-   else
-     stats.unified_vars_static++;
- 
-   merge_graph_nodes (graph, to, from);
-   if (merge_node_constraints (graph, to, from))
-     {
-       if (update_changed)
- 	bitmap_set_bit (changed, to);
-     }
- 
-   /* Mark TO as changed if FROM was changed. If TO was already marked
-      as changed, decrease the changed count.  */
- 
-   if (update_changed
-       && bitmap_clear_bit (changed, from))
-     bitmap_set_bit (changed, to);
-   varinfo_t fromvi = get_varinfo (from);
-   if (fromvi->solution)
-     {
-       /* If the solution changes because of the merging, we need to mark
- 	 the variable as changed.  */
-       varinfo_t tovi = get_varinfo (to);
-       if (bitmap_ior_into (tovi->solution, fromvi->solution))
- 	{
- 	  if (update_changed)
- 	    bitmap_set_bit (changed, to);
- 	}
- 
-       BITMAP_FREE (fromvi->solution);
-       if (fromvi->oldsolution)
- 	BITMAP_FREE (fromvi->oldsolution);
- 
-       if (stats.iterations > 0
- 	  && tovi->oldsolution)
- 	BITMAP_FREE (tovi->oldsolution);
-     }
-   if (graph->succs[to])
-     bitmap_clear_bit (graph->succs[to], to);
- }
- 
- /* Add a copy edge FROM -> TO, optimizing special cases.  Returns TRUE
-    if the solution of TO changed.  */
- 
- static bool
- solve_add_graph_edge (constraint_graph_t graph, unsigned int to,
- 		      unsigned int from)
- {
-   /* Adding edges from the special vars is pointless.
-      They don't have sets that can change.  */
-   if (get_varinfo (from)->is_special_var)
-     return bitmap_ior_into (get_varinfo (to)->solution,
- 			    get_varinfo (from)->solution);
-   /* Merging the solution from ESCAPED needlessly increases
-      the set.  Use ESCAPED as representative instead.  */
-   else if (from == find (escaped_id))
-     return bitmap_set_bit (get_varinfo (to)->solution, escaped_id);
-   else if (get_varinfo (from)->may_have_pointers
- 	   && add_graph_edge (graph, to, from))
-     return bitmap_ior_into (get_varinfo (to)->solution,
- 			    get_varinfo (from)->solution);
-   return false;
- }
- 
- /* Process a constraint C that represents x = *(y + off), using DELTA as the
-    starting solution for y.  */
- 
- static void
- do_sd_constraint (constraint_graph_t graph, constraint_t c,
- 		  bitmap delta, bitmap *expanded_delta)
- {
-   unsigned int lhs = c->lhs.var;
-   bool flag = false;
-   bitmap sol = get_varinfo (lhs)->solution;
-   unsigned int j;
-   bitmap_iterator bi;
-   HOST_WIDE_INT roffset = c->rhs.offset;
- 
-   /* Our IL does not allow this.  */
-   gcc_checking_assert (c->lhs.offset == 0);
- 
-   /* If the solution of Y contains anything it is good enough to transfer
-      this to the LHS.  */
-   if (bitmap_bit_p (delta, anything_id))
-     {
-       flag |= bitmap_set_bit (sol, anything_id);
-       goto done;
-     }
- 
-   /* If we do not know at with offset the rhs is dereferenced compute
-      the reachability set of DELTA, conservatively assuming it is
-      dereferenced at all valid offsets.  */
-   if (roffset == UNKNOWN_OFFSET)
-     {
-       delta = solution_set_expand (delta, expanded_delta);
-       /* No further offset processing is necessary.  */
-       roffset = 0;
-     }
- 
-   /* For each variable j in delta (Sol(y)), add
-      an edge in the graph from j to x, and union Sol(j) into Sol(x).  */
-   EXECUTE_IF_SET_IN_BITMAP (delta, 0, j, bi)
-     {
-       varinfo_t v = get_varinfo (j);
-       HOST_WIDE_INT fieldoffset = v->offset + roffset;
-       unsigned HOST_WIDE_INT size = v->size;
-       unsigned int t;
- 
-       if (v->is_full_var)
- 	;
-       else if (roffset != 0)
- 	{
- 	  if (fieldoffset < 0)
- 	    v = get_varinfo (v->head);
- 	  else
- 	    v = first_or_preceding_vi_for_offset (v, fieldoffset);
- 	}
- 
-       /* We have to include all fields that overlap the current field
- 	 shifted by roffset.  */
-       do
- 	{
- 	  t = find (v->id);
- 
- 	  flag |= solve_add_graph_edge (graph, lhs, t);
- 
- 	  if (v->is_full_var
- 	      || v->next == 0)
- 	    break;
- 
- 	  v = vi_next (v);
- 	}
-       while (v->offset < fieldoffset + size);
-     }
- 
- done:
-   /* If the LHS solution changed, mark the var as changed.  */
-   if (flag)
-     bitmap_set_bit (changed, lhs);
- }
- 
- /* Process a constraint C that represents *(x + off) = y using DELTA
-    as the starting solution for x.  */
- 
- static void
- do_ds_constraint (constraint_t c, bitmap delta, bitmap *expanded_delta)
- {
-   unsigned int rhs = c->rhs.var;
-   bitmap sol = get_varinfo (rhs)->solution;
-   unsigned int j;
-   bitmap_iterator bi;
-   HOST_WIDE_INT loff = c->lhs.offset;
-   bool escaped_p = false;
- 
-   /* Our IL does not allow this.  */
-   gcc_checking_assert (c->rhs.offset == 0);
- 
-   /* If the solution of y contains ANYTHING simply use the ANYTHING
-      solution.  This avoids needlessly increasing the points-to sets.  */
-   if (bitmap_bit_p (sol, anything_id))
-     sol = get_varinfo (find (anything_id))->solution;
- 
-   /* If the solution for x contains ANYTHING we have to merge the
-      solution of y into all pointer variables which we do via
-      STOREDANYTHING.  */
-   if (bitmap_bit_p (delta, anything_id))
-     {
-       unsigned t = find (storedanything_id);
-       if (solve_add_graph_edge (graph, t, rhs))
- 	bitmap_set_bit (changed, t);
-       return;
-     }
- 
-   /* If we do not know at with offset the rhs is dereferenced compute
-      the reachability set of DELTA, conservatively assuming it is
-      dereferenced at all valid offsets.  */
-   if (loff == UNKNOWN_OFFSET)
-     {
-       delta = solution_set_expand (delta, expanded_delta);
-       loff = 0;
-     }
- 
-   /* For each member j of delta (Sol(x)), add an edge from y to j and
-      union Sol(y) into Sol(j) */
-   EXECUTE_IF_SET_IN_BITMAP (delta, 0, j, bi)
-     {
-       varinfo_t v = get_varinfo (j);
-       unsigned int t;
-       HOST_WIDE_INT fieldoffset = v->offset + loff;
-       unsigned HOST_WIDE_INT size = v->size;
- 
-       if (v->is_full_var)
- 	;
-       else if (loff != 0)
- 	{
- 	  if (fieldoffset < 0)
- 	    v = get_varinfo (v->head);
- 	  else
- 	    v = first_or_preceding_vi_for_offset (v, fieldoffset);
- 	}
- 
-       /* We have to include all fields that overlap the current field
- 	 shifted by loff.  */
-       do
- 	{
- 	  if (v->may_have_pointers)
- 	    {
- 	      /* If v is a global variable then this is an escape point.  */
- 	      if (v->is_global_var
- 		  && !escaped_p)
- 		{
- 		  t = find (escaped_id);
- 		  if (add_graph_edge (graph, t, rhs)
- 		      && bitmap_ior_into (get_varinfo (t)->solution, sol))
- 		    bitmap_set_bit (changed, t);
- 		  /* Enough to let rhs escape once.  */
- 		  escaped_p = true;
- 		}
- 
- 	      if (v->is_special_var)
- 		break;
- 
- 	      t = find (v->id);
- 
- 	      if (solve_add_graph_edge  (graph, t, rhs))
- 		bitmap_set_bit (changed, t);
- 	    }
- 
- 	  if (v->is_full_var
- 	      || v->next == 0)
- 	    break;
- 
- 	  v = vi_next (v);
- 	}
-       while (v->offset < fieldoffset + size);
-     }
- }
- 
- /* Handle a non-simple (simple meaning requires no iteration),
-    constraint (IE *x = &y, x = *y, *x = y, and x = y with offsets involved).  */
- 
- static void
- do_complex_constraint (constraint_graph_t graph, constraint_t c, bitmap delta,
- 		       bitmap *expanded_delta)
- {
-   if (c->lhs.type == DEREF)
-     {
-       if (c->rhs.type == ADDRESSOF)
- 	{
- 	  gcc_unreachable ();
- 	}
-       else
- 	{
- 	  /* *x = y */
- 	  do_ds_constraint (c, delta, expanded_delta);
- 	}
-     }
-   else if (c->rhs.type == DEREF)
-     {
-       /* x = *y */
-       if (!(get_varinfo (c->lhs.var)->is_special_var))
- 	do_sd_constraint (graph, c, delta, expanded_delta);
-     }
-   else
-     {
-       bitmap tmp;
-       bool flag = false;
- 
-       gcc_checking_assert (c->rhs.type == SCALAR && c->lhs.type == SCALAR
- 			   && c->rhs.offset != 0 && c->lhs.offset == 0);
-       tmp = get_varinfo (c->lhs.var)->solution;
- 
-       flag = set_union_with_increment (tmp, delta, c->rhs.offset,
- 				       expanded_delta);
- 
-       if (flag)
- 	bitmap_set_bit (changed, c->lhs.var);
-     }
- }
- 
- /* Initialize and return a new SCC info structure.  */
- 
- scc_info::scc_info (size_t size) :
-   visited (size), deleted (size), current_index (0), scc_stack (1)
- {
-   bitmap_clear (visited);
-   bitmap_clear (deleted);
-   node_mapping = XNEWVEC (unsigned int, size);
-   dfs = XCNEWVEC (unsigned int, size);
- 
-   for (size_t i = 0; i < size; i++)
-     node_mapping[i] = i;
- }
- 
- /* Free an SCC info structure pointed to by SI */
- 
- scc_info::~scc_info ()
- {
-   free (node_mapping);
-   free (dfs);
- }
- 
- 
- /* Find indirect cycles in GRAPH that occur, using strongly connected
-    components, and note them in the indirect cycles map.
- 
-    This technique comes from Ben Hardekopf and Calvin Lin,
-    "It Pays to be Lazy: Fast and Accurate Pointer Analysis for Millions of
-    Lines of Code", submitted to PLDI 2007.  */
- 
- static void
- find_indirect_cycles (constraint_graph_t graph)
- {
-   unsigned int i;
-   unsigned int size = graph->size;
-   scc_info si (size);
- 
-   for (i = 0; i < MIN (LAST_REF_NODE, size); i ++ )
-     if (!bitmap_bit_p (si.visited, i) && find (i) == i)
-       scc_visit (graph, &si, i);
- }
- 
- /* Visit the graph in topological order starting at node N, and store the
-    order in TOPO_ORDER using VISITED to indicate visited nodes.  */
- 
- static void
- topo_visit (constraint_graph_t graph, vec<unsigned> &topo_order,
- 	    sbitmap visited, unsigned int n)
- {
-   bitmap_iterator bi;
-   unsigned int j;
- 
-   bitmap_set_bit (visited, n);
- 
-   if (graph->succs[n])
-     EXECUTE_IF_SET_IN_BITMAP (graph->succs[n], 0, j, bi)
-       {
- 	unsigned k = find (j);
- 	if (!bitmap_bit_p (visited, k))
- 	  topo_visit (graph, topo_order, visited, k);
-       }
- 
-   /* Also consider copy with offset complex constraints as implicit edges.  */
-   for (auto c : graph->complex[n])
-     {
-       /* Constraints are ordered so that SCALAR = SCALAR appear first.  */
-       if (c->lhs.type != SCALAR || c->rhs.type != SCALAR)
- 	break;
-       gcc_checking_assert (c->rhs.var == n);
-       unsigned k = find (c->lhs.var);
-       if (!bitmap_bit_p (visited, k))
- 	topo_visit (graph, topo_order, visited, k);
-     }
- 
-   topo_order.quick_push (n);
- }
- 
- /* Compute a topological ordering for GRAPH, and return the result.  */
- 
- static auto_vec<unsigned>
- compute_topo_order (constraint_graph_t graph)
- {
-   unsigned int i;
-   unsigned int size = graph->size;
- 
-   auto_sbitmap visited (size);
-   bitmap_clear (visited);
- 
-   /* For the heuristic in add_graph_edge to work optimally make sure to
-      first visit the connected component of the graph containing
-      ESCAPED.  Do this by extracting the connected component
-      with ESCAPED and append that to all other components as solve_graph
-      pops from the order.  */
-   auto_vec<unsigned> tail (size);
-   topo_visit (graph, tail, visited, find (escaped_id));
- 
-   auto_vec<unsigned> topo_order (size);
- 
-   for (i = 0; i != size; ++i)
-     if (!bitmap_bit_p (visited, i) && find (i) == i)
-       topo_visit (graph, topo_order, visited, i);
- 
-   topo_order.splice (tail);
-   return topo_order;
- }
- 
- /* Structure used to for hash value numbering of pointer equivalence
-    classes.  */
- 
- typedef struct equiv_class_label
- {
-   hashval_t hashcode;
-   unsigned int equivalence_class;
-   bitmap labels;
- } *equiv_class_label_t;
- typedef const struct equiv_class_label *const_equiv_class_label_t;
- 
- /* Equiv_class_label hashtable helpers.  */
- 
- struct equiv_class_hasher : nofree_ptr_hash <equiv_class_label>
- {
-   static inline hashval_t hash (const equiv_class_label *);
-   static inline bool equal (const equiv_class_label *,
- 			    const equiv_class_label *);
- };
- 
- /* Hash function for a equiv_class_label_t */
- 
- inline hashval_t
- equiv_class_hasher::hash (const equiv_class_label *ecl)
- {
-   return ecl->hashcode;
- }
- 
- /* Equality function for two equiv_class_label_t's.  */
- 
- inline bool
- equiv_class_hasher::equal (const equiv_class_label *eql1,
- 			   const equiv_class_label *eql2)
- {
-   return (eql1->hashcode == eql2->hashcode
- 	  && bitmap_equal_p (eql1->labels, eql2->labels));
- }
- 
- /* A hashtable for mapping a bitmap of labels->pointer equivalence
-    classes.  */
- static hash_table<equiv_class_hasher> *pointer_equiv_class_table;
- 
- /* A hashtable for mapping a bitmap of labels->location equivalence
-    classes.  */
- static hash_table<equiv_class_hasher> *location_equiv_class_table;
- 
- struct obstack equiv_class_obstack;
- 
- /* Lookup a equivalence class in TABLE by the bitmap of LABELS with
-    hash HAS it contains.  Sets *REF_LABELS to the bitmap LABELS
-    is equivalent to.  */
- 
- static equiv_class_label *
- equiv_class_lookup_or_add (hash_table<equiv_class_hasher> *table,
- 			   bitmap labels)
- {
-   equiv_class_label **slot;
-   equiv_class_label ecl;
- 
-   ecl.labels = labels;
-   ecl.hashcode = bitmap_hash (labels);
-   slot = table->find_slot (&ecl, INSERT);
-   if (!*slot)
-     {
-       *slot = XOBNEW (&equiv_class_obstack, struct equiv_class_label);
-       (*slot)->labels = labels;
-       (*slot)->hashcode = ecl.hashcode;
-       (*slot)->equivalence_class = 0;
-     }
- 
-   return *slot;
- }
- 
- /* Perform offline variable substitution.
- 
-    This is a worst case quadratic time way of identifying variables
-    that must have equivalent points-to sets, including those caused by
-    static cycles, and single entry subgraphs, in the constraint graph.
- 
-    The technique is described in "Exploiting Pointer and Location
-    Equivalence to Optimize Pointer Analysis. In the 14th International
-    Static Analysis Symposium (SAS), August 2007."  It is known as the
-    "HU" algorithm, and is equivalent to value numbering the collapsed
-    constraint graph including evaluating unions.
- 
-    The general method of finding equivalence classes is as follows:
-    Add fake nodes (REF nodes) and edges for *a = b and a = *b constraints.
-    Initialize all non-REF nodes to be direct nodes.
-    For each constraint a = a U {b}, we set pts(a) = pts(a) u {fresh
-    variable}
-    For each constraint containing the dereference, we also do the same
-    thing.
- 
-    We then compute SCC's in the graph and unify nodes in the same SCC,
-    including pts sets.
- 
-    For each non-collapsed node x:
-     Visit all unvisited explicit incoming edges.
-     Ignoring all non-pointers, set pts(x) = Union of pts(a) for y
-     where y->x.
-     Lookup the equivalence class for pts(x).
-      If we found one, equivalence_class(x) = found class.
-      Otherwise, equivalence_class(x) = new class, and new_class is
-     added to the lookup table.
- 
-    All direct nodes with the same equivalence class can be replaced
-    with a single representative node.
-    All unlabeled nodes (label == 0) are not pointers and all edges
-    involving them can be eliminated.
-    We perform these optimizations during rewrite_constraints
- 
-    In addition to pointer equivalence class finding, we also perform
-    location equivalence class finding.  This is the set of variables
-    that always appear together in points-to sets.  We use this to
-    compress the size of the points-to sets.  */
- 
- /* Current maximum pointer equivalence class id.  */
- static int pointer_equiv_class;
- 
- /* Current maximum location equivalence class id.  */
- static int location_equiv_class;
- 
- /* Recursive routine to find strongly connected components in GRAPH,
-    and label it's nodes with DFS numbers.  */
- 
- static void
- condense_visit (constraint_graph_t graph, class scc_info *si, unsigned int n)
- {
-   unsigned int i;
-   bitmap_iterator bi;
-   unsigned int my_dfs;
- 
-   gcc_checking_assert (si->node_mapping[n] == n);
-   bitmap_set_bit (si->visited, n);
-   si->dfs[n] = si->current_index ++;
-   my_dfs = si->dfs[n];
- 
-   /* Visit all the successors.  */
-   EXECUTE_IF_IN_NONNULL_BITMAP (graph->preds[n], 0, i, bi)
-     {
-       unsigned int w = si->node_mapping[i];
- 
-       if (bitmap_bit_p (si->deleted, w))
- 	continue;
- 
-       if (!bitmap_bit_p (si->visited, w))
- 	condense_visit (graph, si, w);
- 
-       unsigned int t = si->node_mapping[w];
-       gcc_checking_assert (si->node_mapping[n] == n);
-       if (si->dfs[t] < si->dfs[n])
- 	si->dfs[n] = si->dfs[t];
-     }
- 
-   /* Visit all the implicit predecessors.  */
-   EXECUTE_IF_IN_NONNULL_BITMAP (graph->implicit_preds[n], 0, i, bi)
-     {
-       unsigned int w = si->node_mapping[i];
- 
-       if (bitmap_bit_p (si->deleted, w))
- 	continue;
- 
-       if (!bitmap_bit_p (si->visited, w))
- 	condense_visit (graph, si, w);
- 
-       unsigned int t = si->node_mapping[w];
-       gcc_assert (si->node_mapping[n] == n);
-       if (si->dfs[t] < si->dfs[n])
- 	si->dfs[n] = si->dfs[t];
-     }
- 
-   /* See if any components have been identified.  */
-   if (si->dfs[n] == my_dfs)
-     {
-       if (si->scc_stack.length () != 0
- 	  && si->dfs[si->scc_stack.last ()] >= my_dfs)
- 	{
- 	  /* Find the first node of the SCC and do non-bitmap work.  */
- 	  bool direct_p = true;
- 	  unsigned first = si->scc_stack.length ();
- 	  do
- 	    {
- 	      --first;
- 	      unsigned int w = si->scc_stack[first];
- 	      si->node_mapping[w] = n;
- 	      if (!bitmap_bit_p (graph->direct_nodes, w))
- 		direct_p = false;
- 	    }
- 	  while (first > 0
- 		 && si->dfs[si->scc_stack[first - 1]] >= my_dfs);
- 	  if (!direct_p)
- 	    bitmap_clear_bit (graph->direct_nodes, n);
- 
- 	  /* Want to reduce to node n, push that first.  */
- 	  si->scc_stack.reserve (1);
- 	  si->scc_stack.quick_push (si->scc_stack[first]);
- 	  si->scc_stack[first] = n;
- 
- 	  unsigned scc_size = si->scc_stack.length () - first;
- 	  unsigned split = scc_size / 2;
- 	  unsigned carry = scc_size - split * 2;
- 	  while (split > 0)
- 	    {
- 	      for (unsigned i = 0; i < split; ++i)
- 		{
- 		  unsigned a = si->scc_stack[first + i];
- 		  unsigned b = si->scc_stack[first + split + carry + i];
- 
- 		  /* Unify our nodes.  */
- 		  if (graph->preds[b])
- 		    {
- 		      if (!graph->preds[a])
- 			std::swap (graph->preds[a], graph->preds[b]);
- 		      else
- 			bitmap_ior_into_and_free (graph->preds[a],
- 						  &graph->preds[b]);
- 		    }
- 		  if (graph->implicit_preds[b])
- 		    {
- 		      if (!graph->implicit_preds[a])
- 			std::swap (graph->implicit_preds[a],
- 				   graph->implicit_preds[b]);
- 		      else
- 			bitmap_ior_into_and_free (graph->implicit_preds[a],
- 						  &graph->implicit_preds[b]);
- 		    }
- 		  if (graph->points_to[b])
- 		    {
- 		      if (!graph->points_to[a])
- 			std::swap (graph->points_to[a], graph->points_to[b]);
- 		      else
- 			bitmap_ior_into_and_free (graph->points_to[a],
- 						  &graph->points_to[b]);
- 		    }
- 		}
- 	      unsigned remain = split + carry;
- 	      split = remain / 2;
- 	      carry = remain - split * 2;
- 	    }
- 	  /* Actually pop the SCC.  */
- 	  si->scc_stack.truncate (first);
- 	}
-       bitmap_set_bit (si->deleted, n);
-     }
-   else
-     si->scc_stack.safe_push (n);
- }
- 
- /* Label pointer equivalences.
- 
-    This performs a value numbering of the constraint graph to
-    discover which variables will always have the same points-to sets
-    under the current set of constraints.
- 
-    The way it value numbers is to store the set of points-to bits
-    generated by the constraints and graph edges.  This is just used as a
-    hash and equality comparison.  The *actual set of points-to bits* is
-    completely irrelevant, in that we don't care about being able to
-    extract them later.
- 
-    The equality values (currently bitmaps) just have to satisfy a few
-    constraints, the main ones being:
-    1. The combining operation must be order independent.
-    2. The end result of a given set of operations must be unique iff the
-       combination of input values is unique
-    3. Hashable.  */
- 
- static void
- label_visit (constraint_graph_t graph, class scc_info *si, unsigned int n)
- {
-   unsigned int i, first_pred;
-   bitmap_iterator bi;
- 
-   bitmap_set_bit (si->visited, n);
- 
-   /* Label and union our incoming edges's points to sets.  */
-   first_pred = -1U;
-   EXECUTE_IF_IN_NONNULL_BITMAP (graph->preds[n], 0, i, bi)
-     {
-       unsigned int w = si->node_mapping[i];
-       if (!bitmap_bit_p (si->visited, w))
- 	label_visit (graph, si, w);
- 
-       /* Skip unused edges  */
-       if (w == n || graph->pointer_label[w] == 0)
- 	continue;
- 
-       if (graph->points_to[w])
- 	{
- 	  if (!graph->points_to[n])
- 	    {
- 	      if (first_pred == -1U)
- 		first_pred = w;
- 	      else
- 		{
- 		  graph->points_to[n] = BITMAP_ALLOC (&predbitmap_obstack);
- 		  bitmap_ior (graph->points_to[n],
- 			      graph->points_to[first_pred],
- 			      graph->points_to[w]);
- 		}
- 	    }
- 	  else
- 	    bitmap_ior_into (graph->points_to[n], graph->points_to[w]);
- 	}
-     }
- 
-   /* Indirect nodes get fresh variables and a new pointer equiv class.  */
-   if (!bitmap_bit_p (graph->direct_nodes, n))
-     {
-       if (!graph->points_to[n])
- 	{
- 	  graph->points_to[n] = BITMAP_ALLOC (&predbitmap_obstack);
- 	  if (first_pred != -1U)
- 	    bitmap_copy (graph->points_to[n], graph->points_to[first_pred]);
- 	}
-       bitmap_set_bit (graph->points_to[n], FIRST_REF_NODE + n);
-       graph->pointer_label[n] = pointer_equiv_class++;
-       equiv_class_label_t ecl;
-       ecl = equiv_class_lookup_or_add (pointer_equiv_class_table,
- 				       graph->points_to[n]);
-       ecl->equivalence_class = graph->pointer_label[n];
-       return;
-     }
- 
-   /* If there was only a single non-empty predecessor the pointer equiv
-      class is the same.  */
-   if (!graph->points_to[n])
-     {
-       if (first_pred != -1U)
- 	{
- 	  graph->pointer_label[n] = graph->pointer_label[first_pred];
- 	  graph->points_to[n] = graph->points_to[first_pred];
- 	}
-       return;
-     }
- 
-   if (!bitmap_empty_p (graph->points_to[n]))
-     {
-       equiv_class_label_t ecl;
-       ecl = equiv_class_lookup_or_add (pointer_equiv_class_table,
- 				       graph->points_to[n]);
-       if (ecl->equivalence_class == 0)
- 	ecl->equivalence_class = pointer_equiv_class++;
-       else
- 	{
- 	  BITMAP_FREE (graph->points_to[n]);
- 	  graph->points_to[n] = ecl->labels;
- 	}
-       graph->pointer_label[n] = ecl->equivalence_class;
-     }
- }
- 
- /* Print the pred graph in dot format.  */
- 
- static void
- dump_pred_graph (class scc_info *si, FILE *file)
- {
-   unsigned int i;
- 
-   /* Only print the graph if it has already been initialized:  */
-   if (!graph)
-     return;
- 
-   /* Prints the header of the dot file:  */
-   fprintf (file, "strict digraph {\n");
-   fprintf (file, "  node [\n    shape = box\n  ]\n");
-   fprintf (file, "  edge [\n    fontsize = \"12\"\n  ]\n");
-   fprintf (file, "\n  // List of nodes and complex constraints in "
- 	   "the constraint graph:\n");
- 
-   /* The next lines print the nodes in the graph together with the
-      complex constraints attached to them.  */
-   for (i = 1; i < graph->size; i++)
-     {
-       if (i == FIRST_REF_NODE)
- 	continue;
-       if (si->node_mapping[i] != i)
- 	continue;
-       if (i < FIRST_REF_NODE)
- 	fprintf (file, "\"%s\"", get_varinfo (i)->name);
-       else
- 	fprintf (file, "\"*%s\"", get_varinfo (i - FIRST_REF_NODE)->name);
-       if (graph->points_to[i]
- 	  && !bitmap_empty_p (graph->points_to[i]))
- 	{
- 	  if (i < FIRST_REF_NODE)
- 	    fprintf (file, "[label=\"%s = {", get_varinfo (i)->name);
- 	  else
- 	    fprintf (file, "[label=\"*%s = {",
- 		     get_varinfo (i - FIRST_REF_NODE)->name);
- 	  unsigned j;
- 	  bitmap_iterator bi;
- 	  EXECUTE_IF_SET_IN_BITMAP (graph->points_to[i], 0, j, bi)
- 	    fprintf (file, " %d", j);
- 	  fprintf (file, " }\"]");
- 	}
-       fprintf (file, ";\n");
-     }
- 
-   /* Go over the edges.  */
-   fprintf (file, "\n  // Edges in the constraint graph:\n");
-   for (i = 1; i < graph->size; i++)
-     {
-       unsigned j;
-       bitmap_iterator bi;
-       if (si->node_mapping[i] != i)
- 	continue;
-       EXECUTE_IF_IN_NONNULL_BITMAP (graph->preds[i], 0, j, bi)
- 	{
- 	  unsigned from = si->node_mapping[j];
- 	  if (from < FIRST_REF_NODE)
- 	    fprintf (file, "\"%s\"", get_varinfo (from)->name);
- 	  else
- 	    fprintf (file, "\"*%s\"", get_varinfo (from - FIRST_REF_NODE)->name);
- 	  fprintf (file, " -> ");
- 	  if (i < FIRST_REF_NODE)
- 	    fprintf (file, "\"%s\"", get_varinfo (i)->name);
- 	  else
- 	    fprintf (file, "\"*%s\"", get_varinfo (i - FIRST_REF_NODE)->name);
- 	  fprintf (file, ";\n");
- 	}
-     }
- 
-   /* Prints the tail of the dot file.  */
-   fprintf (file, "}\n");
- }
- 
- /* Perform offline variable substitution, discovering equivalence
-    classes, and eliminating non-pointer variables.  */
- 
- static class scc_info *
- perform_var_substitution (constraint_graph_t graph)
- {
-   unsigned int i;
-   unsigned int size = graph->size;
-   scc_info *si = new scc_info (size);
- 
-   bitmap_obstack_initialize (&iteration_obstack);
-   gcc_obstack_init (&equiv_class_obstack);
-   pointer_equiv_class_table = new hash_table<equiv_class_hasher> (511);
-   location_equiv_class_table
-     = new hash_table<equiv_class_hasher> (511);
-   pointer_equiv_class = 1;
-   location_equiv_class = 1;
- 
-   /* Condense the nodes, which means to find SCC's, count incoming
-      predecessors, and unite nodes in SCC's.  */
-   for (i = 1; i < FIRST_REF_NODE; i++)
-     if (!bitmap_bit_p (si->visited, si->node_mapping[i]))
-       condense_visit (graph, si, si->node_mapping[i]);
- 
-   if (dump_file && (dump_flags & TDF_GRAPH))
-     {
-       fprintf (dump_file, "\n\n// The constraint graph before var-substitution "
- 	       "in dot format:\n");
-       dump_pred_graph (si, dump_file);
-       fprintf (dump_file, "\n\n");
-     }
- 
-   bitmap_clear (si->visited);
-   /* Actually the label the nodes for pointer equivalences  */
-   for (i = 1; i < FIRST_REF_NODE; i++)
-     if (!bitmap_bit_p (si->visited, si->node_mapping[i]))
-       label_visit (graph, si, si->node_mapping[i]);
- 
-   /* Calculate location equivalence labels.  */
-   for (i = 1; i < FIRST_REF_NODE; i++)
-     {
-       bitmap pointed_by;
-       bitmap_iterator bi;
-       unsigned int j;
- 
-       if (!graph->pointed_by[i])
- 	continue;
-       pointed_by = BITMAP_ALLOC (&iteration_obstack);
- 
-       /* Translate the pointed-by mapping for pointer equivalence
- 	 labels.  */
-       EXECUTE_IF_SET_IN_BITMAP (graph->pointed_by[i], 0, j, bi)
- 	{
- 	  bitmap_set_bit (pointed_by,
- 			  graph->pointer_label[si->node_mapping[j]]);
- 	}
-       /* The original pointed_by is now dead.  */
-       BITMAP_FREE (graph->pointed_by[i]);
- 
-       /* Look up the location equivalence label if one exists, or make
- 	 one otherwise.  */
-       equiv_class_label_t ecl;
-       ecl = equiv_class_lookup_or_add (location_equiv_class_table, pointed_by);
-       if (ecl->equivalence_class == 0)
- 	ecl->equivalence_class = location_equiv_class++;
-       else
- 	{
- 	  if (dump_file && (dump_flags & TDF_DETAILS))
- 	    fprintf (dump_file, "Found location equivalence for node %s\n",
- 		     get_varinfo (i)->name);
- 	  BITMAP_FREE (pointed_by);
- 	}
-       graph->loc_label[i] = ecl->equivalence_class;
- 
-     }
- 
-   if (dump_file && (dump_flags & TDF_DETAILS))
-     for (i = 1; i < FIRST_REF_NODE; i++)
-       {
- 	unsigned j = si->node_mapping[i];
- 	if (j != i)
- 	  {
- 	    fprintf (dump_file, "%s node id %d ",
- 		     bitmap_bit_p (graph->direct_nodes, i)
- 		     ? "Direct" : "Indirect", i);
- 	    if (i < FIRST_REF_NODE)
- 	      fprintf (dump_file, "\"%s\"", get_varinfo (i)->name);
- 	    else
- 	      fprintf (dump_file, "\"*%s\"",
- 		       get_varinfo (i - FIRST_REF_NODE)->name);
- 	    fprintf (dump_file, " mapped to SCC leader node id %d ", j);
- 	    if (j < FIRST_REF_NODE)
- 	      fprintf (dump_file, "\"%s\"\n", get_varinfo (j)->name);
- 	    else
- 	      fprintf (dump_file, "\"*%s\"\n",
- 		       get_varinfo (j - FIRST_REF_NODE)->name);
- 	  }
- 	else
- 	  {
- 	    fprintf (dump_file,
- 		     "Equivalence classes for %s node id %d ",
- 		     bitmap_bit_p (graph->direct_nodes, i)
- 		     ? "direct" : "indirect", i);
- 	    if (i < FIRST_REF_NODE)
- 	      fprintf (dump_file, "\"%s\"", get_varinfo (i)->name);
- 	    else
- 	      fprintf (dump_file, "\"*%s\"",
- 		       get_varinfo (i - FIRST_REF_NODE)->name);
- 	    fprintf (dump_file,
- 		     ": pointer %d, location %d\n",
- 		     graph->pointer_label[i], graph->loc_label[i]);
- 	  }
-       }
- 
-   /* Quickly eliminate our non-pointer variables.  */
- 
-   for (i = 1; i < FIRST_REF_NODE; i++)
-     {
-       unsigned int node = si->node_mapping[i];
- 
-       if (graph->pointer_label[node] == 0)
- 	{
- 	  if (dump_file && (dump_flags & TDF_DETAILS))
- 	    fprintf (dump_file,
- 		     "%s is a non-pointer variable, eliminating edges.\n",
- 		     get_varinfo (node)->name);
- 	  stats.nonpointer_vars++;
- 	  clear_edges_for_node (graph, node);
- 	}
-     }
- 
-   return si;
- }
- 
- /* Free information that was only necessary for variable
-    substitution.  */
- 
- static void
- free_var_substitution_info (class scc_info *si)
- {
-   delete si;
-   free (graph->pointer_label);
-   free (graph->loc_label);
-   free (graph->pointed_by);
-   free (graph->points_to);
-   free (graph->eq_rep);
-   sbitmap_free (graph->direct_nodes);
-   delete pointer_equiv_class_table;
-   pointer_equiv_class_table = NULL;
-   delete location_equiv_class_table;
-   location_equiv_class_table = NULL;
-   obstack_free (&equiv_class_obstack, NULL);
-   bitmap_obstack_release (&iteration_obstack);
- }
- 
- /* Return an existing node that is equivalent to NODE, which has
-    equivalence class LABEL, if one exists.  Return NODE otherwise.  */
- 
- static unsigned int
- find_equivalent_node (constraint_graph_t graph,
- 		      unsigned int node, unsigned int label)
- {
-   /* If the address version of this variable is unused, we can
-      substitute it for anything else with the same label.
-      Otherwise, we know the pointers are equivalent, but not the
-      locations, and we can unite them later.  */
- 
-   if (!bitmap_bit_p (graph->address_taken, node))
-     {
-       gcc_checking_assert (label < graph->size);
- 
-       if (graph->eq_rep[label] != -1)
- 	{
- 	  /* Unify the two variables since we know they are equivalent.  */
- 	  if (unite (graph->eq_rep[label], node))
- 	    unify_nodes (graph, graph->eq_rep[label], node, false);
- 	  return graph->eq_rep[label];
- 	}
-       else
- 	{
- 	  graph->eq_rep[label] = node;
- 	  graph->pe_rep[label] = node;
- 	}
-     }
-   else
-     {
-       gcc_checking_assert (label < graph->size);
-       graph->pe[node] = label;
-       if (graph->pe_rep[label] == -1)
- 	graph->pe_rep[label] = node;
-     }
- 
-   return node;
- }
- 
- /* Unite pointer equivalent but not location equivalent nodes in
-    GRAPH.  This may only be performed once variable substitution is
-    finished.  */
- 
- static void
- unite_pointer_equivalences (constraint_graph_t graph)
- {
-   unsigned int i;
- 
-   /* Go through the pointer equivalences and unite them to their
-      representative, if they aren't already.  */
-   for (i = 1; i < FIRST_REF_NODE; i++)
-     {
-       unsigned int label = graph->pe[i];
-       if (label)
- 	{
- 	  int label_rep = graph->pe_rep[label];
- 
- 	  if (label_rep == -1)
- 	    continue;
- 
- 	  label_rep = find (label_rep);
- 	  if (label_rep >= 0 && unite (label_rep, find (i)))
- 	    unify_nodes (graph, label_rep, i, false);
- 	}
-     }
- }
- 
- /* Move complex constraints to the GRAPH nodes they belong to.  */
- 
- static void
- move_complex_constraints (constraint_graph_t graph)
- {
-   int i;
-   constraint_t c;
- 
-   FOR_EACH_VEC_ELT (constraints, i, c)
-     {
-       if (c)
- 	{
- 	  struct constraint_expr lhs = c->lhs;
- 	  struct constraint_expr rhs = c->rhs;
- 
- 	  if (lhs.type == DEREF)
- 	    {
- 	      insert_into_complex (graph, lhs.var, c);
- 	    }
- 	  else if (rhs.type == DEREF)
- 	    {
- 	      if (!(get_varinfo (lhs.var)->is_special_var))
- 		insert_into_complex (graph, rhs.var, c);
- 	    }
- 	  else if (rhs.type != ADDRESSOF && lhs.var > anything_id
- 		   && (lhs.offset != 0 || rhs.offset != 0))
- 	    {
- 	      insert_into_complex (graph, rhs.var, c);
- 	    }
- 	}
-     }
- }
- 
- 
- /* Optimize and rewrite complex constraints while performing
-    collapsing of equivalent nodes.  SI is the SCC_INFO that is the
-    result of perform_variable_substitution.  */
- 
- static void
- rewrite_constraints (constraint_graph_t graph,
- 		     class scc_info *si)
- {
-   int i;
-   constraint_t c;
- 
-   if (flag_checking)
-     {
-       for (unsigned int j = 0; j < graph->size; j++)
- 	gcc_assert (find (j) == j);
-     }
- 
-   FOR_EACH_VEC_ELT (constraints, i, c)
-     {
-       struct constraint_expr lhs = c->lhs;
-       struct constraint_expr rhs = c->rhs;
-       unsigned int lhsvar = find (lhs.var);
-       unsigned int rhsvar = find (rhs.var);
-       unsigned int lhsnode, rhsnode;
-       unsigned int lhslabel, rhslabel;
- 
-       lhsnode = si->node_mapping[lhsvar];
-       rhsnode = si->node_mapping[rhsvar];
-       lhslabel = graph->pointer_label[lhsnode];
-       rhslabel = graph->pointer_label[rhsnode];
- 
-       /* See if it is really a non-pointer variable, and if so, ignore
- 	 the constraint.  */
-       if (lhslabel == 0)
- 	{
- 	  if (dump_file && (dump_flags & TDF_DETAILS))
- 	    {
- 
- 	      fprintf (dump_file, "%s is a non-pointer variable, "
- 		       "ignoring constraint:",
- 		       get_varinfo (lhs.var)->name);
- 	      dump_constraint (dump_file, c);
- 	      fprintf (dump_file, "\n");
- 	    }
- 	  constraints[i] = NULL;
- 	  continue;
- 	}
- 
-       if (rhslabel == 0)
- 	{
- 	  if (dump_file && (dump_flags & TDF_DETAILS))
- 	    {
- 
- 	      fprintf (dump_file, "%s is a non-pointer variable, "
- 		       "ignoring constraint:",
- 		       get_varinfo (rhs.var)->name);
- 	      dump_constraint (dump_file, c);
- 	      fprintf (dump_file, "\n");
- 	    }
- 	  constraints[i] = NULL;
- 	  continue;
- 	}
- 
-       lhsvar = find_equivalent_node (graph, lhsvar, lhslabel);
-       rhsvar = find_equivalent_node (graph, rhsvar, rhslabel);
-       c->lhs.var = lhsvar;
-       c->rhs.var = rhsvar;
-     }
- }
- 
- /* Eliminate indirect cycles involving NODE.  Return true if NODE was
-    part of an SCC, false otherwise.  */
- 
- static bool
- eliminate_indirect_cycles (unsigned int node)
- {
-   if (graph->indirect_cycles[node] != -1
-       && !bitmap_empty_p (get_varinfo (node)->solution))
-     {
-       unsigned int i;
-       auto_vec<unsigned> queue;
-       int queuepos;
-       unsigned int to = find (graph->indirect_cycles[node]);
-       bitmap_iterator bi;
- 
-       /* We can't touch the solution set and call unify_nodes
- 	 at the same time, because unify_nodes is going to do
- 	 bitmap unions into it. */
- 
-       EXECUTE_IF_SET_IN_BITMAP (get_varinfo (node)->solution, 0, i, bi)
- 	{
- 	  if (find (i) == i && i != to)
- 	    {
- 	      if (unite (to, i))
- 		queue.safe_push (i);
- 	    }
- 	}
- 
-       for (queuepos = 0;
- 	   queue.iterate (queuepos, &i);
- 	   queuepos++)
- 	{
- 	  unify_nodes (graph, to, i, true);
- 	}
-       return true;
-     }
-   return false;
- }
- 
- /* Solve the constraint graph GRAPH using our worklist solver.
-    This is based on the PW* family of solvers from the "Efficient Field
-    Sensitive Pointer Analysis for C" paper.
-    It works by iterating over all the graph nodes, processing the complex
-    constraints and propagating the copy constraints, until everything stops
-    changed.  This corresponds to steps 6-8 in the solving list given above.  */
- 
- static void
- solve_graph (constraint_graph_t graph)
- {
-   unsigned int size = graph->size;
-   unsigned int i;
-   bitmap pts;
- 
-   changed = BITMAP_ALLOC (NULL);
- 
-   /* Mark all initial non-collapsed nodes as changed.  */
-   for (i = 1; i < size; i++)
-     {
-       varinfo_t ivi = get_varinfo (i);
-       if (find (i) == i && !bitmap_empty_p (ivi->solution)
- 	  && ((graph->succs[i] && !bitmap_empty_p (graph->succs[i]))
- 	      || graph->complex[i].length () > 0))
- 	bitmap_set_bit (changed, i);
-     }
- 
-   /* Allocate a bitmap to be used to store the changed bits.  */
-   pts = BITMAP_ALLOC (&pta_obstack);
- 
-   while (!bitmap_empty_p (changed))
-     {
-       unsigned int i;
-       stats.iterations++;
- 
-       bitmap_obstack_initialize (&iteration_obstack);
- 
-       auto_vec<unsigned> topo_order = compute_topo_order (graph);
-       while (topo_order.length () != 0)
- 	{
- 	  i = topo_order.pop ();
- 
- 	  /* If this variable is not a representative, skip it.  */
- 	  if (find (i) != i)
- 	    continue;
- 
- 	  /* In certain indirect cycle cases, we may merge this
- 	     variable to another.  */
- 	  if (eliminate_indirect_cycles (i) && find (i) != i)
- 	    continue;
- 
- 	  /* If the node has changed, we need to process the
- 	     complex constraints and outgoing edges again.  For complex
- 	     constraints that modify i itself, like the common group of
- 	       callarg = callarg + UNKNOWN;
- 	       callarg = *callarg + UNKNOWN;
- 	       *callarg = callescape;
- 	     make sure to iterate immediately because that maximizes
- 	     cache reuse and expands the graph quickest, leading to
- 	     better visitation order in the next iteration.  */
- 	  while (bitmap_clear_bit (changed, i))
- 	    {
- 	      bitmap solution;
- 	      vec<constraint_t> &complex = graph->complex[i];
- 	      varinfo_t vi = get_varinfo (i);
- 	      bool solution_empty;
- 
- 	      /* Compute the changed set of solution bits.  If anything
- 	         is in the solution just propagate that.  */
- 	      if (bitmap_bit_p (vi->solution, anything_id))
- 		{
- 		  /* If anything is also in the old solution there is
- 		     nothing to do.
- 		     ???  But we shouldn't ended up with "changed" set ...  */
- 		  if (vi->oldsolution
- 		      && bitmap_bit_p (vi->oldsolution, anything_id))
- 		    break;
- 		  bitmap_copy (pts, get_varinfo (find (anything_id))->solution);
- 		}
- 	      else if (vi->oldsolution)
- 		bitmap_and_compl (pts, vi->solution, vi->oldsolution);
- 	      else
- 		bitmap_copy (pts, vi->solution);
- 
- 	      if (bitmap_empty_p (pts))
- 		break;
- 
- 	      if (vi->oldsolution)
- 		bitmap_ior_into (vi->oldsolution, pts);
- 	      else
- 		{
- 		  vi->oldsolution = BITMAP_ALLOC (&oldpta_obstack);
- 		  bitmap_copy (vi->oldsolution, pts);
- 		}
- 
- 	      solution = vi->solution;
- 	      solution_empty = bitmap_empty_p (solution);
- 
- 	      /* Process the complex constraints */
- 	      hash_set<constraint_t> *cvisited = nullptr;
- 	      if (flag_checking)
- 		cvisited = new hash_set<constraint_t>;
- 	      bitmap expanded_pts = NULL;
- 	      for (unsigned j = 0; j < complex.length (); ++j)
- 		{
- 		  constraint_t c = complex[j];
- 		  /* At unification time only the directly involved nodes
- 		     will get their complex constraints updated.  Update
- 		     our complex constraints now but keep the constraint
- 		     vector sorted and clear of duplicates.  Also make
- 		     sure to evaluate each prevailing constraint only once.  */
- 		  unsigned int new_lhs = find (c->lhs.var);
- 		  unsigned int new_rhs = find (c->rhs.var);
- 		  if (c->lhs.var != new_lhs || c->rhs.var != new_rhs)
- 		    {
- 		      constraint tem = *c;
- 		      tem.lhs.var = new_lhs;
- 		      tem.rhs.var = new_rhs;
- 		      unsigned int place
- 			= complex.lower_bound (&tem, constraint_less);
- 		      c->lhs.var = new_lhs;
- 		      c->rhs.var = new_rhs;
- 		      if (place != j)
- 			{
- 			  complex.ordered_remove (j);
- 			  if (j < place)
- 			    --place;
- 			  if (place < complex.length ())
- 			    {
- 			      if (constraint_equal (*complex[place], *c))
- 				{
- 				  j--;
- 				  continue;
- 				}
- 			      else
- 				complex.safe_insert (place, c);
- 			    }
- 			  else
- 			    complex.quick_push (c);
- 			  if (place > j)
- 			    {
- 			      j--;
- 			      continue;
- 			    }
- 			}
- 		    }
- 
- 		  /* The only complex constraint that can change our
- 		     solution to non-empty, given an empty solution,
- 		     is a constraint where the lhs side is receiving
- 		     some set from elsewhere.  */
- 		  if (cvisited && cvisited->add (c))
- 		    gcc_unreachable ();
- 		  if (!solution_empty || c->lhs.type != DEREF)
- 		    do_complex_constraint (graph, c, pts, &expanded_pts);
- 		}
- 	      if (cvisited)
- 		{
- 		  /* When checking, verify the order of constraints is
- 		     maintained and each constraint is evaluated exactly
- 		     once.  */
- 		  for (unsigned j = 1; j < complex.length (); ++j)
- 		    gcc_assert (constraint_less (complex[j-1], complex[j]));
- 		  gcc_assert (cvisited->elements () == complex.length ());
- 		  delete cvisited;
- 		}
- 	      BITMAP_FREE (expanded_pts);
- 
- 	      solution_empty = bitmap_empty_p (solution);
- 
- 	      if (!solution_empty)
- 		{
- 		  bitmap_iterator bi;
- 		  unsigned eff_escaped_id = find (escaped_id);
- 		  unsigned j;
- 
- 		  /* Propagate solution to all successors.  */
- 		  unsigned to_remove = ~0U;
- 		  EXECUTE_IF_IN_NONNULL_BITMAP (graph->succs[i],
- 						0, j, bi)
- 		    {
- 		      if (to_remove != ~0U)
- 			{
- 			  bitmap_clear_bit (graph->succs[i], to_remove);
- 			  to_remove = ~0U;
- 			}
- 		      unsigned int to = find (j);
- 		      if (to != j)
- 			{
- 			  /* Update the succ graph, avoiding duplicate
- 			     work.  */
- 			  to_remove = j;
- 			  if (! bitmap_set_bit (graph->succs[i], to))
- 			    continue;
- 			  /* We eventually end up processing 'to' twice
- 			     as it is undefined whether bitmap iteration
- 			     iterates over bits set during iteration.
- 			     Play safe instead of doing tricks.  */
- 			}
- 		      /* Don't try to propagate to ourselves.  */
- 		      if (to == i)
- 			{
- 			  to_remove = j;
- 			  continue;
- 			}
- 		      /* Early node unification can lead to edges from
- 			 escaped - remove them.  */
- 		      if (i == eff_escaped_id)
- 			{
- 			  to_remove = j;
- 			  if (bitmap_set_bit (get_varinfo (to)->solution,
- 					      escaped_id))
- 			    bitmap_set_bit (changed, to);
- 			  continue;
- 			}
- 
- 		      if (bitmap_ior_into (get_varinfo (to)->solution, pts))
- 			bitmap_set_bit (changed, to);
- 		    }
- 		  if (to_remove != ~0U)
- 		    bitmap_clear_bit (graph->succs[i], to_remove);
- 		}
- 	    }
- 	}
-       bitmap_obstack_release (&iteration_obstack);
-     }
- 
-   BITMAP_FREE (pts);
-   BITMAP_FREE (changed);
-   bitmap_obstack_release (&oldpta_obstack);
- }
- 
- /* Map from trees to variable infos.  */
- static hash_map<tree, varinfo_t> *vi_for_tree;
- 
- 
  /* Insert ID as the variable id for tree T in the vi_for_tree map.  */
  
  static void
--- 711,716 ----
*************** lookup_vi_for_tree (tree t)
*** 3003,3009 ****
    return *slot;
  }
  
! /* Return a printable name for DECL  */
  
  static const char *
  alias_get_name (tree decl)
--- 734,740 ----
    return *slot;
  }
  
! /* Return a printable name for DECL.  */
  
  static const char *
  alias_get_name (tree decl)
*************** process_constraint (constraint_t t)
*** 3191,3200 ****
    if (!get_varinfo (lhs.var)->may_have_pointers)
      return;
  
!   /* This can happen in our IR with things like n->a = *p */
    if (rhs.type == DEREF && lhs.type == DEREF && rhs.var != anything_id)
      {
!       /* Split into tmp = *rhs, *lhs = tmp */
        struct constraint_expr tmplhs;
        tmplhs = new_scalar_tmp_constraint_exp ("doubledereftmp", true);
        process_constraint (new_constraint (tmplhs, rhs));
--- 922,931 ----
    if (!get_varinfo (lhs.var)->may_have_pointers)
      return;
  
!   /* This can happen in our IR with things like n->a = *p.  */
    if (rhs.type == DEREF && lhs.type == DEREF && rhs.var != anything_id)
      {
!       /* Split into tmp = *rhs, *lhs = tmp.  */
        struct constraint_expr tmplhs;
        tmplhs = new_scalar_tmp_constraint_exp ("doubledereftmp", true);
        process_constraint (new_constraint (tmplhs, rhs));
*************** process_constraint (constraint_t t)
*** 3202,3208 ****
      }
    else if ((rhs.type != SCALAR || rhs.offset != 0) && lhs.type == DEREF)
      {
!       /* Split into tmp = &rhs, *lhs = tmp */
        struct constraint_expr tmplhs;
        tmplhs = new_scalar_tmp_constraint_exp ("derefaddrtmp", true);
        process_constraint (new_constraint (tmplhs, rhs));
--- 933,939 ----
      }
    else if ((rhs.type != SCALAR || rhs.offset != 0) && lhs.type == DEREF)
      {
!       /* Split into tmp = &rhs, *lhs = tmp.  */
        struct constraint_expr tmplhs;
        tmplhs = new_scalar_tmp_constraint_exp ("derefaddrtmp", true);
        process_constraint (new_constraint (tmplhs, rhs));
*************** get_constraint_for_component_ref (tree t
*** 3370,3376 ****
    tree forzero;
  
    /* Some people like to do cute things like take the address of
!      &0->a.b */
    forzero = t;
    while (handled_component_p (forzero)
  	 || INDIRECT_REF_P (forzero)
--- 1101,1107 ----
    tree forzero;
  
    /* Some people like to do cute things like take the address of
!      &0->a.b.  */
    forzero = t;
    while (handled_component_p (forzero)
  	 || INDIRECT_REF_P (forzero)
*************** get_constraint_for_component_ref (tree t
*** 3444,3450 ****
      {
        /* In languages like C, you can access one past the end of an
  	 array.  You aren't allowed to dereference it, so we can
! 	 ignore this constraint. When we handle pointer subtraction,
  	 we may have to do something cute here.  */
  
        if (maybe_lt (poly_uint64 (bitpos), get_varinfo (result.var)->fullsize)
--- 1175,1181 ----
      {
        /* In languages like C, you can access one past the end of an
  	 array.  You aren't allowed to dereference it, so we can
! 	 ignore this constraint.  When we handle pointer subtraction,
  	 we may have to do something cute here.  */
  
        if (maybe_lt (poly_uint64 (bitpos), get_varinfo (result.var)->fullsize)
*************** get_constraint_for_component_ref (tree t
*** 3481,3487 ****
  	      results->safe_push (cexpr);
  	    }
  	  else if (results->length () == 0)
! 	    /* Assert that we found *some* field there. The user couldn't be
  	       accessing *only* padding.  */
  	    /* Still the user could access one past the end of an array
  	       embedded in a struct resulting in accessing *only* padding.  */
--- 1212,1218 ----
  	      results->safe_push (cexpr);
  	    }
  	  else if (results->length () == 0)
! 	    /* Assert that we found *some* field there.  The user couldn't be
  	       accessing *only* padding.  */
  	    /* Still the user could access one past the end of an array
  	       embedded in a struct resulting in accessing *only* padding.  */
*************** get_constraint_for_component_ref (tree t
*** 3535,3541 ****
  /* Dereference the constraint expression CONS, and return the result.
     DEREF (ADDRESSOF) = SCALAR
     DEREF (SCALAR) = DEREF
!    DEREF (DEREF) = (temp = DEREF1; result = DEREF(temp))
     This is needed so that we can handle dereferencing DEREF constraints.  */
  
  static void
--- 1266,1272 ----
  /* Dereference the constraint expression CONS, and return the result.
     DEREF (ADDRESSOF) = SCALAR
     DEREF (SCALAR) = DEREF
!    DEREF (DEREF) = (temp = DEREF1; result = DEREF (temp))
     This is needed so that we can handle dereferencing DEREF constraints.  */
  
  static void
*************** get_constraint_for_1 (tree t, vec<ce_s>
*** 3594,3600 ****
       point to anything by itself.  That is, of course, unless it is an
       integer constant being treated as a pointer, in which case, we
       will return that this is really the addressof anything.  This
!      happens below, since it will fall into the default case. The only
       case we know something about an integer treated like a pointer is
       when it is the NULL pointer, and then we just say it points to
       NULL.
--- 1325,1331 ----
       point to anything by itself.  That is, of course, unless it is an
       integer constant being treated as a pointer, in which case, we
       will return that this is really the addressof anything.  This
!      happens below, since it will fall into the default case.  The only
       case we know something about an integer treated like a pointer is
       when it is the NULL pointer, and then we just say it points to
       NULL.
*************** get_constraint_for_1 (tree t, vec<ce_s>
*** 3745,3751 ****
  		  tmp.truncate (0);
  		}
  	      /* We do not know whether the constructor was complete,
! 	         so technically we have to add &NOTHING or &ANYTHING
  		 like we do for an empty constructor as well.  */
  	      return;
  	    }
--- 1476,1482 ----
  		  tmp.truncate (0);
  		}
  	      /* We do not know whether the constructor was complete,
! 		 so technically we have to add &NOTHING or &ANYTHING
  		 like we do for an empty constructor as well.  */
  	      return;
  	    }
*************** get_function_part_constraint (varinfo_t
*** 4144,4150 ****
  /* Produce constraints for argument ARG of call STMT with eaf flags
     FLAGS.  RESULTS is array holding constraints for return value.
     CALLESCAPE_ID is variable where call loocal escapes are added.
!    WRITES_GLOVEL_MEMORY is true if callee may write global memory. */
  
  static void
  handle_call_arg (gcall *stmt, tree arg, vec<ce_s> *results, int flags,
--- 1875,1881 ----
  /* Produce constraints for argument ARG of call STMT with eaf flags
     FLAGS.  RESULTS is array holding constraints for return value.
     CALLESCAPE_ID is variable where call loocal escapes are added.
!    WRITES_GLOVEL_MEMORY is true if callee may write global memory.  */
  
  static void
  handle_call_arg (gcall *stmt, tree arg, vec<ce_s> *results, int flags,
*************** handle_lhs_call (gcall *stmt, tree lhs,
*** 4510,4516 ****
        rhsc.truncate (0);
        vi = make_heapvar ("HEAP", true);
        /* We are marking allocated storage local, we deal with it becoming
!          global by escaping and setting of vars_contains_escaped_heap.  */
        DECL_EXTERNAL (vi->decl) = 0;
        vi->is_global_var = 0;
        /* If this is not a real malloc call assume the memory was
--- 2241,2247 ----
        rhsc.truncate (0);
        vi = make_heapvar ("HEAP", true);
        /* We are marking allocated storage local, we deal with it becoming
! 	 global by escaping and setting of vars_contains_escaped_heap.  */
        DECL_EXTERNAL (vi->decl) = 0;
        vi->is_global_var = 0;
        /* If this is not a real malloc call assume the memory was
*************** find_func_aliases_for_builtin_call (stru
*** 4698,4705 ****
  	}
        case BUILT_IN_STACK_SAVE:
        case BUILT_IN_STACK_RESTORE:
!         /* Nothing interesting happens.  */
!         return true;
        case BUILT_IN_ALLOCA:
        case BUILT_IN_ALLOCA_WITH_ALIGN:
        case BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX:
--- 2429,2436 ----
  	}
        case BUILT_IN_STACK_SAVE:
        case BUILT_IN_STACK_RESTORE:
! 	/* Nothing interesting happens.  */
! 	return true;
        case BUILT_IN_ALLOCA:
        case BUILT_IN_ALLOCA_WITH_ALIGN:
        case BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX:
*************** find_func_aliases_for_builtin_call (stru
*** 4723,4729 ****
  	  return true;
  	}
        case BUILT_IN_POSIX_MEMALIGN:
!         {
  	  tree ptrptr = gimple_call_arg (t, 0);
  	  get_constraint_for (ptrptr, &lhsc);
  	  do_deref (&lhsc);
--- 2454,2460 ----
  	  return true;
  	}
        case BUILT_IN_POSIX_MEMALIGN:
! 	{
  	  tree ptrptr = gimple_call_arg (t, 0);
  	  get_constraint_for (ptrptr, &lhsc);
  	  do_deref (&lhsc);
*************** find_func_aliases_for_builtin_call (stru
*** 4806,4812 ****
  	  }
  	break;
        /* String / character search functions return a pointer into the
!          source string or NULL.  */
        case BUILT_IN_INDEX:
        case BUILT_IN_STRCHR:
        case BUILT_IN_STRRCHR:
--- 2537,2543 ----
  	  }
  	break;
        /* String / character search functions return a pointer into the
! 	 source string or NULL.  */
        case BUILT_IN_INDEX:
        case BUILT_IN_STRCHR:
        case BUILT_IN_STRRCHR:
*************** find_func_aliases_for_builtin_call (stru
*** 4827,4833 ****
  	  }
  	return true;
        /* Pure functions that return something not based on any object and
!          that use the memory pointed to by their arguments (but not
  	 transitively).  */
        case BUILT_IN_STRCMP:
        case BUILT_IN_STRCMP_EQ:
--- 2558,2564 ----
  	  }
  	return true;
        /* Pure functions that return something not based on any object and
! 	 that use the memory pointed to by their arguments (but not
  	 transitively).  */
        case BUILT_IN_STRCMP:
        case BUILT_IN_STRCMP_EQ:
*************** find_func_aliases (struct function *fn,
*** 5192,5198 ****
  	}
      }
    /* In IPA mode, we need to generate constraints to pass call
!      arguments through their calls.   There are two cases,
       either a GIMPLE_CALL returning a value, or just a plain
       GIMPLE_CALL when we are not.
  
--- 2923,2929 ----
  	}
      }
    /* In IPA mode, we need to generate constraints to pass call
!      arguments through their calls.  There are two cases,
       either a GIMPLE_CALL returning a value, or just a plain
       GIMPLE_CALL when we are not.
  
*************** find_func_clobbers (struct function *fn,
*** 5445,5451 ****
  	  || (TREE_CODE (tem) == MEM_REF
  	      && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR
  		   && auto_var_in_fn_p
! 		        (TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl))))
  	{
  	  struct constraint_expr lhsc, *rhsp;
  	  unsigned i;
--- 3176,3182 ----
  	  || (TREE_CODE (tem) == MEM_REF
  	      && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR
  		   && auto_var_in_fn_p
! 			(TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl))))
  	{
  	  struct constraint_expr lhsc, *rhsp;
  	  unsigned i;
*************** find_func_clobbers (struct function *fn,
*** 5474,5480 ****
  	  || (TREE_CODE (tem) == MEM_REF
  	      && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR
  		   && auto_var_in_fn_p
! 		        (TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl))))
  	{
  	  struct constraint_expr lhs, *rhsp;
  	  unsigned i;
--- 3205,3211 ----
  	  || (TREE_CODE (tem) == MEM_REF
  	      && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR
  		   && auto_var_in_fn_p
! 			(TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl))))
  	{
  	  struct constraint_expr lhs, *rhsp;
  	  unsigned i;
*************** find_func_clobbers (struct function *fn,
*** 5786,5850 ****
  }
  
  
- /* Find the first varinfo in the same variable as START that overlaps with
-    OFFSET.  Return NULL if we can't find one.  */
- 
- static varinfo_t
- first_vi_for_offset (varinfo_t start, unsigned HOST_WIDE_INT offset)
- {
-   /* If the offset is outside of the variable, bail out.  */
-   if (offset >= start->fullsize)
-     return NULL;
- 
-   /* If we cannot reach offset from start, lookup the first field
-      and start from there.  */
-   if (start->offset > offset)
-     start = get_varinfo (start->head);
- 
-   while (start)
-     {
-       /* We may not find a variable in the field list with the actual
- 	 offset when we have glommed a structure to a variable.
- 	 In that case, however, offset should still be within the size
- 	 of the variable. */
-       if (offset >= start->offset
- 	  && (offset - start->offset) < start->size)
- 	return start;
- 
-       start = vi_next (start);
-     }
- 
-   return NULL;
- }
- 
- /* Find the first varinfo in the same variable as START that overlaps with
-    OFFSET.  If there is no such varinfo the varinfo directly preceding
-    OFFSET is returned.  */
- 
- static varinfo_t
- first_or_preceding_vi_for_offset (varinfo_t start,
- 				  unsigned HOST_WIDE_INT offset)
- {
-   /* If we cannot reach offset from start, lookup the first field
-      and start from there.  */
-   if (start->offset > offset)
-     start = get_varinfo (start->head);
- 
-   /* We may not find a variable in the field list with the actual
-      offset when we have glommed a structure to a variable.
-      In that case, however, offset should still be within the size
-      of the variable.
-      If we got beyond the offset we look for return the field
-      directly preceding offset which may be the last field.  */
-   while (start->next
- 	 && offset >= start->offset
- 	 && !((offset - start->offset) < start->size))
-     start = vi_next (start);
- 
-   return start;
- }
- 
- 
  /* This structure is used during pushing fields onto the fieldstack
     to track the offset of the field, since bitpos_of_field gives it
     relative to its immediate containing type, and we want it relative
--- 3517,3522 ----
*************** struct fieldoff
*** 5871,5877 ****
  typedef struct fieldoff fieldoff_s;
  
  
! /* qsort comparison function for two fieldoff's PA and PB */
  
  static int
  fieldoff_compare (const void *pa, const void *pb)
--- 3543,3549 ----
  typedef struct fieldoff fieldoff_s;
  
  
! /* qsort comparison function for two fieldoff's PA and PB.  */
  
  static int
  fieldoff_compare (const void *pa, const void *pb)
*************** create_variable_info_for (tree decl, con
*** 6599,6636 ****
    return id;
  }
  
- /* Print out the points-to solution for VAR to FILE.  */
- 
- static void
- dump_solution_for_var (FILE *file, unsigned int var)
- {
-   varinfo_t vi = get_varinfo (var);
-   unsigned int i;
-   bitmap_iterator bi;
- 
-   /* Dump the solution for unified vars anyway, this avoids difficulties
-      in scanning dumps in the testsuite.  */
-   fprintf (file, "%s = { ", vi->name);
-   vi = get_varinfo (find (var));
-   EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, i, bi)
-     fprintf (file, "%s ", get_varinfo (i)->name);
-   fprintf (file, "}");
- 
-   /* But note when the variable was unified.  */
-   if (vi->id != var)
-     fprintf (file, " same as %s", vi->name);
- 
-   fprintf (file, "\n");
- }
- 
- /* Print the points-to solution for VAR to stderr.  */
- 
- DEBUG_FUNCTION void
- debug_solution_for_var (unsigned int var)
- {
-   dump_solution_for_var (stderr, var);
- }
- 
  /* Register the constraints for function parameter related VI.  */
  
  static void
--- 4271,4276 ----
*************** struct shared_bitmap_hasher : free_ptr_h
*** 6718,6724 ****
  			    const shared_bitmap_info *);
  };
  
! /* Hash function for a shared_bitmap_info_t */
  
  inline hashval_t
  shared_bitmap_hasher::hash (const shared_bitmap_info *bi)
--- 4358,4364 ----
  			    const shared_bitmap_info *);
  };
  
! /* Hash function for a shared_bitmap_info_t.  */
  
  inline hashval_t
  shared_bitmap_hasher::hash (const shared_bitmap_info *bi)
*************** shared_bitmap_hasher::hash (const shared
*** 6726,6732 ****
    return bi->hashcode;
  }
  
! /* Equality function for two shared_bitmap_info_t's. */
  
  inline bool
  shared_bitmap_hasher::equal (const shared_bitmap_info *sbi1,
--- 4366,4372 ----
    return bi->hashcode;
  }
  
! /* Equality function for two shared_bitmap_info_t's.  */
  
  inline bool
  shared_bitmap_hasher::equal (const shared_bitmap_info *sbi1,
*************** set_uids_in_ptset (bitmap into, bitmap f
*** 6784,6791 ****
  {
    unsigned int i;
    bitmap_iterator bi;
!   varinfo_t escaped_vi = get_varinfo (find (escaped_id));
!   varinfo_t escaped_return_vi = get_varinfo (find (escaped_return_id));
    bool everything_escaped
      = escaped_vi->solution && bitmap_bit_p (escaped_vi->solution, anything_id);
  
--- 4424,4431 ----
  {
    unsigned int i;
    bitmap_iterator bi;
!   varinfo_t escaped_vi = get_varinfo (var_rep[escaped_id]);
!   varinfo_t escaped_return_vi = get_varinfo (var_rep[escaped_return_id]);
    bool everything_escaped
      = escaped_vi->solution && bitmap_bit_p (escaped_vi->solution, anything_id);
  
*************** find_what_var_points_to (tree fndecl, va
*** 6883,6889 ****
  
    /* This variable may have been collapsed, let's get the real
       variable.  */
!   vi = get_varinfo (find (orig_vi->id));
  
    /* See if we have already computed the solution and return it.  */
    pt_solution **slot = &final_solutions->get_or_insert (vi);
--- 4523,4529 ----
  
    /* This variable may have been collapsed, let's get the real
       variable.  */
!   vi = get_varinfo (var_rep[orig_vi->id]);
  
    /* See if we have already computed the solution and return it.  */
    pt_solution **slot = &final_solutions->get_or_insert (vi);
*************** find_what_var_points_to (tree fndecl, va
*** 6910,6916 ****
  	      else
  		pt->escaped = 1;
  	      /* Expand some special vars of ESCAPED in-place here.  */
! 	      varinfo_t evi = get_varinfo (find (escaped_id));
  	      if (bitmap_bit_p (evi->solution, nonlocal_id))
  		pt->nonlocal = 1;
  	    }
--- 4550,4556 ----
  	      else
  		pt->escaped = 1;
  	      /* Expand some special vars of ESCAPED in-place here.  */
! 	      varinfo_t evi = get_varinfo (var_rep[escaped_id]);
  	      if (bitmap_bit_p (evi->solution, nonlocal_id))
  		pt->nonlocal = 1;
  	    }
*************** pt_solution_includes_global (struct pt_s
*** 7137,7143 ****
        || pt->nonlocal
        || pt->vars_contains_nonlocal
        /* The following is a hack to make the malloc escape hack work.
!          In reality we'd need different sets for escaped-through-return
  	 and escaped-to-callees and passes would need to be updated.  */
        || pt->vars_contains_escaped_heap)
      return true;
--- 4777,4783 ----
        || pt->nonlocal
        || pt->vars_contains_nonlocal
        /* The following is a hack to make the malloc escape hack work.
! 	 In reality we'd need different sets for escaped-through-return
  	 and escaped-to-callees and passes would need to be updated.  */
        || pt->vars_contains_escaped_heap)
      return true;
*************** pt_solutions_intersect (struct pt_soluti
*** 7273,7324 ****
    return res;
  }
  
- /* Dump stats information to OUTFILE.  */
- 
- static void
- dump_sa_stats (FILE *outfile)
- {
-   fprintf (outfile, "Points-to Stats:\n");
-   fprintf (outfile, "Total vars:               %d\n", stats.total_vars);
-   fprintf (outfile, "Non-pointer vars:          %d\n",
- 	   stats.nonpointer_vars);
-   fprintf (outfile, "Statically unified vars:  %d\n",
- 	   stats.unified_vars_static);
-   fprintf (outfile, "Dynamically unified vars: %d\n",
- 	   stats.unified_vars_dynamic);
-   fprintf (outfile, "Iterations:               %d\n", stats.iterations);
-   fprintf (outfile, "Number of edges:          %d\n", stats.num_edges);
-   fprintf (outfile, "Number of implicit edges: %d\n",
- 	   stats.num_implicit_edges);
-   fprintf (outfile, "Number of avoided edges: %d\n",
- 	   stats.num_avoided_edges);
- }
- 
- /* Dump points-to information to OUTFILE.  */
- 
- static void
- dump_sa_points_to_info (FILE *outfile)
- {
-   fprintf (outfile, "\nPoints-to sets\n\n");
- 
-   for (unsigned i = 1; i < varmap.length (); i++)
-     {
-       varinfo_t vi = get_varinfo (i);
-       if (!vi->may_have_pointers)
- 	continue;
-       dump_solution_for_var (outfile, i);
-     }
- }
- 
- 
- /* Debug points-to information to stderr.  */
- 
- DEBUG_FUNCTION void
- debug_sa_points_to_info (void)
- {
-   dump_sa_points_to_info (stderr);
- }
- 
  
  /* Initialize the always-existing constraint variables for NULL
     ANYTHING, READONLY, and INTEGER */
--- 4913,4918 ----
*************** init_base_vars (void)
*** 7511,7517 ****
    process_constraint (new_constraint (lhs, rhs));
  }
  
! /* Initialize things necessary to perform PTA */
  
  static void
  init_alias_vars (void)
--- 5105,5111 ----
    process_constraint (new_constraint (lhs, rhs));
  }
  
! /* Initialize things necessary to perform PTA.  */
  
  static void
  init_alias_vars (void)
*************** init_alias_vars (void)
*** 7520,7526 ****
  
    bitmap_obstack_initialize (&pta_obstack);
    bitmap_obstack_initialize (&oldpta_obstack);
-   bitmap_obstack_initialize (&predbitmap_obstack);
  
    constraints.create (8);
    varmap.create (8);
--- 5114,5119 ----
*************** init_alias_vars (void)
*** 7537,7680 ****
    gcc_obstack_init (&final_solutions_obstack);
  }
  
- /* Remove the REF and ADDRESS edges from GRAPH, as well as all the
-    predecessor edges.  */
- 
- static void
- remove_preds_and_fake_succs (constraint_graph_t graph)
- {
-   unsigned int i;
- 
-   /* Clear the implicit ref and address nodes from the successor
-      lists.  */
-   for (i = 1; i < FIRST_REF_NODE; i++)
-     {
-       if (graph->succs[i])
- 	bitmap_clear_range (graph->succs[i], FIRST_REF_NODE,
- 			    FIRST_REF_NODE * 2);
-     }
- 
-   /* Free the successor list for the non-ref nodes.  */
-   for (i = FIRST_REF_NODE + 1; i < graph->size; i++)
-     {
-       if (graph->succs[i])
- 	BITMAP_FREE (graph->succs[i]);
-     }
- 
-   /* Now reallocate the size of the successor list as, and blow away
-      the predecessor bitmaps.  */
-   graph->size = varmap.length ();
-   graph->succs = XRESIZEVEC (bitmap, graph->succs, graph->size);
- 
-   free (graph->implicit_preds);
-   graph->implicit_preds = NULL;
-   free (graph->preds);
-   graph->preds = NULL;
-   bitmap_obstack_release (&predbitmap_obstack);
- }
- 
- /* Solve the constraint set.  */
- 
- static void
- solve_constraints (void)
- {
-   class scc_info *si;
- 
-   /* Sort varinfos so that ones that cannot be pointed to are last.
-      This makes bitmaps more efficient.  */
-   unsigned int *map = XNEWVEC (unsigned int, varmap.length ());
-   for (unsigned i = 0; i < integer_id + 1; ++i)
-     map[i] = i;
-   /* Start with address-taken vars, followed by not address-taken vars
-      to move vars never appearing in the points-to solution bitmaps last.  */
-   unsigned j = integer_id + 1;
-   for (unsigned i = integer_id + 1; i < varmap.length (); ++i)
-     if (varmap[varmap[i]->head]->address_taken)
-       map[i] = j++;
-   for (unsigned i = integer_id + 1; i < varmap.length (); ++i)
-     if (! varmap[varmap[i]->head]->address_taken)
-       map[i] = j++;
-   /* Shuffle varmap according to map.  */
-   for (unsigned i = integer_id + 1; i < varmap.length (); ++i)
-     {
-       while (map[varmap[i]->id] != i)
- 	std::swap (varmap[i], varmap[map[varmap[i]->id]]);
-       gcc_assert (bitmap_empty_p (varmap[i]->solution));
-       varmap[i]->id = i;
-       varmap[i]->next = map[varmap[i]->next];
-       varmap[i]->head = map[varmap[i]->head];
-     }
-   /* Finally rewrite constraints.  */
-   for (unsigned i = 0; i < constraints.length (); ++i)
-     {
-       constraints[i]->lhs.var = map[constraints[i]->lhs.var];
-       constraints[i]->rhs.var = map[constraints[i]->rhs.var];
-     }
-   free (map);
- 
-   if (dump_file)
-     fprintf (dump_file,
- 	     "\nCollapsing static cycles and doing variable "
- 	     "substitution\n");
- 
-   init_graph (varmap.length () * 2);
- 
-   if (dump_file)
-     fprintf (dump_file, "Building predecessor graph\n");
-   build_pred_graph ();
- 
-   if (dump_file)
-     fprintf (dump_file, "Detecting pointer and location "
- 	     "equivalences\n");
-   si = perform_var_substitution (graph);
- 
-   if (dump_file)
-     fprintf (dump_file, "Rewriting constraints and unifying "
- 	     "variables\n");
-   rewrite_constraints (graph, si);
- 
-   build_succ_graph ();
- 
-   free_var_substitution_info (si);
- 
-   /* Attach complex constraints to graph nodes.  */
-   move_complex_constraints (graph);
- 
-   if (dump_file)
-     fprintf (dump_file, "Uniting pointer but not location equivalent "
- 	     "variables\n");
-   unite_pointer_equivalences (graph);
- 
-   if (dump_file)
-     fprintf (dump_file, "Finding indirect cycles\n");
-   find_indirect_cycles (graph);
- 
-   /* Implicit nodes and predecessors are no longer necessary at this
-      point. */
-   remove_preds_and_fake_succs (graph);
- 
-   if (dump_file && (dump_flags & TDF_GRAPH))
-     {
-       fprintf (dump_file, "\n\n// The constraint graph before solve-graph "
- 	       "in dot format:\n");
-       dump_constraint_graph (dump_file);
-       fprintf (dump_file, "\n\n");
-     }
- 
-   if (dump_file)
-     fprintf (dump_file, "Solving graph\n");
- 
-   solve_graph (graph);
- 
-   if (dump_file && (dump_flags & TDF_GRAPH))
-     {
-       fprintf (dump_file, "\n\n// The constraint graph after solve-graph "
- 	       "in dot format:\n");
-       dump_constraint_graph (dump_file);
-       fprintf (dump_file, "\n\n");
-     }
- }
- 
  /* Create points-to sets for the current function.  See the comments
     at the start of the file for an algorithmic overview.  */
  
--- 5130,5135 ----
*************** compute_points_to_sets (void)
*** 7845,7852 ****
  static void
  delete_points_to_sets (void)
  {
-   unsigned int i;
- 
    delete shared_bitmap_table;
    shared_bitmap_table = NULL;
    if (dump_file && (dump_flags & TDF_STATS))
--- 5300,5305 ----
*************** delete_points_to_sets (void)
*** 7858,7873 ****
    bitmap_obstack_release (&pta_obstack);
    constraints.release ();
  
!   for (i = 0; i < graph->size; i++)
!     graph->complex[i].release ();
!   free (graph->complex);
! 
!   free (graph->rep);
!   free (graph->succs);
!   free (graph->pe);
!   free (graph->pe_rep);
!   free (graph->indirect_cycles);
!   free (graph);
  
    varmap.release ();
    variable_info_pool.release ();
--- 5311,5317 ----
    bitmap_obstack_release (&pta_obstack);
    constraints.release ();
  
!   free (var_rep);
  
    varmap.release ();
    variable_info_pool.release ();
*************** visit_loadstore (gimple *, tree base, tr
*** 7914,7927 ****
  	  if (! vi)
  	    return false;
  
! 	  vi = get_varinfo (find (vi->id));
  	  if (bitmap_intersect_p (rvars, vi->solution)
  	      || (escaped_p && bitmap_bit_p (vi->solution, escaped_id)))
  	    return false;
  	}
  
        /* Do not overwrite existing cliques (that includes clique, base
!          pairs we just set).  */
        if (MR_DEPENDENCE_CLIQUE (base) == 0)
  	{
  	  MR_DEPENDENCE_CLIQUE (base) = clique;
--- 5358,5371 ----
  	  if (! vi)
  	    return false;
  
! 	  vi = get_varinfo (var_rep[vi->id]);
  	  if (bitmap_intersect_p (rvars, vi->solution)
  	      || (escaped_p && bitmap_bit_p (vi->solution, escaped_id)))
  	    return false;
  	}
  
        /* Do not overwrite existing cliques (that includes clique, base
! 	 pairs we just set).  */
        if (MR_DEPENDENCE_CLIQUE (base) == 0)
  	{
  	  MR_DEPENDENCE_CLIQUE (base) = clique;
*************** compute_dependence_clique (void)
*** 8050,8056 ****
        varinfo_t vi = lookup_vi_for_tree (p);
        if (!vi)
  	continue;
!       vi = get_varinfo (find (vi->id));
        bitmap_iterator bi;
        unsigned j;
        varinfo_t restrict_var = NULL;
--- 5494,5500 ----
        varinfo_t vi = lookup_vi_for_tree (p);
        if (!vi)
  	continue;
!       vi = get_varinfo (var_rep[vi->id]);
        bitmap_iterator bi;
        unsigned j;
        varinfo_t restrict_var = NULL;
*************** compute_dependence_clique (void)
*** 8101,8111 ****
  					      maybe_set_dependence_info);
  	  if (used)
  	    {
! 	      /* Add all subvars to the set of restrict pointed-to set. */
  	      for (unsigned sv = restrict_var->head; sv != 0;
  		   sv = get_varinfo (sv)->next)
  		bitmap_set_bit (rvars, sv);
! 	      varinfo_t escaped = get_varinfo (find (escaped_id));
  	      if (bitmap_bit_p (escaped->solution, restrict_var->id))
  		escaped_p = true;
  	    }
--- 5545,5555 ----
  					      maybe_set_dependence_info);
  	  if (used)
  	    {
! 	      /* Add all subvars to the set of restrict pointed-to set.  */
  	      for (unsigned sv = restrict_var->head; sv != 0;
  		   sv = get_varinfo (sv)->next)
  		bitmap_set_bit (rvars, sv);
! 	      varinfo_t escaped = get_varinfo (var_rep[escaped_id]);
  	      if (bitmap_bit_p (escaped->solution, restrict_var->id))
  		escaped_p = true;
  	    }
*************** struct pt_solution ipa_escaped_pt
*** 8261,8267 ****
    = { true, false, false, false, false, false,
        false, false, false, false, false, NULL };
  
! /* Associate node with varinfo DATA. Worker for
     cgraph_for_symbol_thunks_and_aliases.  */
  static bool
  associate_varinfo_to_alias (struct cgraph_node *node, void *data)
--- 5705,5711 ----
    = { true, false, false, false, false, false,
        false, false, false, false, false, NULL };
  
! /* Associate node with varinfo DATA.  Worker for
     cgraph_for_symbol_thunks_and_aliases.  */
  static bool
  associate_varinfo_to_alias (struct cgraph_node *node, void *data)
*************** associate_varinfo_to_alias (struct cgrap
*** 8275,8385 ****
    return false;
  }
  
- /* Dump varinfo VI to FILE.  */
- 
- static void
- dump_varinfo (FILE *file, varinfo_t vi)
- {
-   if (vi == NULL)
-     return;
- 
-   fprintf (file, "%u: %s\n", vi->id, vi->name);
- 
-   const char *sep = " ";
-   if (vi->is_artificial_var)
-     fprintf (file, "%sartificial", sep);
-   if (vi->is_special_var)
-     fprintf (file, "%sspecial", sep);
-   if (vi->is_unknown_size_var)
-     fprintf (file, "%sunknown-size", sep);
-   if (vi->is_full_var)
-     fprintf (file, "%sfull", sep);
-   if (vi->is_heap_var)
-     fprintf (file, "%sheap", sep);
-   if (vi->may_have_pointers)
-     fprintf (file, "%smay-have-pointers", sep);
-   if (vi->only_restrict_pointers)
-     fprintf (file, "%sonly-restrict-pointers", sep);
-   if (vi->is_restrict_var)
-     fprintf (file, "%sis-restrict-var", sep);
-   if (vi->is_global_var)
-     fprintf (file, "%sglobal", sep);
-   if (vi->is_ipa_escape_point)
-     fprintf (file, "%sipa-escape-point", sep);
-   if (vi->is_fn_info)
-     fprintf (file, "%sfn-info", sep);
-   if (vi->ruid)
-     fprintf (file, "%srestrict-uid:%u", sep, vi->ruid);
-   if (vi->next)
-     fprintf (file, "%snext:%u", sep, vi->next);
-   if (vi->head != vi->id)
-     fprintf (file, "%shead:%u", sep, vi->head);
-   if (vi->offset)
-     fprintf (file, "%soffset:" HOST_WIDE_INT_PRINT_DEC, sep, vi->offset);
-   if (vi->size != ~HOST_WIDE_INT_0U)
-     fprintf (file, "%ssize:" HOST_WIDE_INT_PRINT_DEC, sep, vi->size);
-   if (vi->fullsize != ~HOST_WIDE_INT_0U && vi->fullsize != vi->size)
-     fprintf (file, "%sfullsize:" HOST_WIDE_INT_PRINT_DEC, sep,
- 	     vi->fullsize);
-   fprintf (file, "\n");
- 
-   if (vi->solution && !bitmap_empty_p (vi->solution))
-     {
-       bitmap_iterator bi;
-       unsigned i;
-       fprintf (file, " solution: {");
-       EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, i, bi)
- 	fprintf (file, " %u", i);
-       fprintf (file, " }\n");
-     }
- 
-   if (vi->oldsolution && !bitmap_empty_p (vi->oldsolution)
-       && !bitmap_equal_p (vi->solution, vi->oldsolution))
-     {
-       bitmap_iterator bi;
-       unsigned i;
-       fprintf (file, " oldsolution: {");
-       EXECUTE_IF_SET_IN_BITMAP (vi->oldsolution, 0, i, bi)
- 	fprintf (file, " %u", i);
-       fprintf (file, " }\n");
-     }
- }
- 
- /* Dump varinfo VI to stderr.  */
- 
- DEBUG_FUNCTION void
- debug_varinfo (varinfo_t vi)
- {
-   dump_varinfo (stderr, vi);
- }
- 
- /* Dump varmap to FILE.  */
- 
- static void
- dump_varmap (FILE *file)
- {
-   if (varmap.length () == 0)
-     return;
- 
-   fprintf (file, "variables:\n");
- 
-   for (unsigned int i = 0; i < varmap.length (); ++i)
-     {
-       varinfo_t vi = get_varinfo (i);
-       dump_varinfo (file, vi);
-     }
- 
-   fprintf (file, "\n");
- }
- 
- /* Dump varmap to stderr.  */
- 
- DEBUG_FUNCTION void
- debug_varmap (void)
- {
-   dump_varmap (stderr);
- }
- 
  /* Compute whether node is refered to non-locally.  Worker for
     cgraph_for_symbol_thunks_and_aliases.  */
  static bool
--- 5719,5724 ----
*************** ipa_pta_execute (void)
*** 8493,8499 ****
        varinfo_t vi = get_vi_for_tree (var->decl);
  
        /* For the purpose of IPA PTA unit-local globals are not
!          escape points.  */
        bool nonlocal_p = (DECL_EXTERNAL (var->decl)
  			 || TREE_PUBLIC (var->decl)
  			 || var->used_from_other_partition
--- 5832,5838 ----
        varinfo_t vi = get_vi_for_tree (var->decl);
  
        /* For the purpose of IPA PTA unit-local globals are not
! 	 escape points.  */
        bool nonlocal_p = (DECL_EXTERNAL (var->decl)
  			 || TREE_PUBLIC (var->decl)
  			 || var->used_from_other_partition
*************** ipa_pta_execute (void)
*** 8592,8598 ****
  	for (varinfo_t ai = first_vi_for_offset (fi, fi_parm_base);
  	     ai; ai = vi_next (ai))
  	  {
! 	    varinfo_t vi = get_varinfo (find (ai->id));
  	    bitmap_iterator bi;
  	    unsigned j;
  	    EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, j, bi)
--- 5931,5937 ----
  	for (varinfo_t ai = first_vi_for_offset (fi, fi_parm_base);
  	     ai; ai = vi_next (ai))
  	  {
! 	    varinfo_t vi = get_varinfo (var_rep[ai->id]);
  	    bitmap_iterator bi;
  	    unsigned j;
  	    EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, j, bi)
*************** ipa_pta_execute (void)
*** 8608,8619 ****
  	      }
  	  }
        /* As well as global variables which are another way of passing
!          arguments to recursive invocations.  */
        else if (fi->is_global_var)
  	{
  	  for (varinfo_t ai = fi; ai; ai = vi_next (ai))
  	    {
! 	      varinfo_t vi = get_varinfo (find (ai->id));
  	      bitmap_iterator bi;
  	      unsigned j;
  	      EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, j, bi)
--- 5947,5958 ----
  	      }
  	  }
        /* As well as global variables which are another way of passing
! 	 arguments to recursive invocations.  */
        else if (fi->is_global_var)
  	{
  	  for (varinfo_t ai = fi; ai; ai = vi_next (ai))
  	    {
! 	      varinfo_t vi = get_varinfo (var_rep[ai->id]);
  	      bitmap_iterator bi;
  	      unsigned j;
  	      EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, j, bi)
*************** ipa_pta_execute (void)
*** 8708,8717 ****
  		{
  		  *gimple_call_clobber_set (stmt)
  		     = find_what_var_points_to
! 		         (node->decl, first_vi_for_offset (fi, fi_clobbers));
  		  *gimple_call_use_set (stmt)
  		     = find_what_var_points_to
! 		         (node->decl, first_vi_for_offset (fi, fi_uses));
  		}
  	      /* Handle direct calls to external functions.  */
  	      else if (decl && (!fi || fi->decl))
--- 6047,6056 ----
  		{
  		  *gimple_call_clobber_set (stmt)
  		     = find_what_var_points_to
! 			 (node->decl, first_vi_for_offset (fi, fi_clobbers));
  		  *gimple_call_use_set (stmt)
  		     = find_what_var_points_to
! 			 (node->decl, first_vi_for_offset (fi, fi_uses));
  		}
  	      /* Handle direct calls to external functions.  */
  	      else if (decl && (!fi || fi->decl))
*************** ipa_pta_execute (void)
*** 8738,8744 ****
  		    }
  
  		  pt = gimple_call_clobber_set (stmt);
! 		  if (gimple_call_flags (stmt) & (ECF_CONST|ECF_PURE|ECF_NOVOPS))
  		    memset (pt, 0, sizeof (struct pt_solution));
  		  else if ((vi = lookup_call_clobber_vi (stmt)) != NULL)
  		    {
--- 6077,6084 ----
  		    }
  
  		  pt = gimple_call_clobber_set (stmt);
! 		  if (gimple_call_flags (stmt) &
! 		      (ECF_CONST|ECF_PURE|ECF_NOVOPS))
  		    memset (pt, 0, sizeof (struct pt_solution));
  		  else if ((vi = lookup_call_clobber_vi (stmt)) != NULL)
  		    {
*************** ipa_pta_execute (void)
*** 8763,8769 ****
  		{
  		  /* We need to accumulate all clobbers/uses of all possible
  		     callees.  */
! 		  fi = get_varinfo (find (fi->id));
  		  /* If we cannot constrain the set of functions we'll end up
  		     calling we end up using/clobbering everything.  */
  		  if (bitmap_bit_p (fi->solution, anything_id)
--- 6103,6109 ----
  		{
  		  /* We need to accumulate all clobbers/uses of all possible
  		     callees.  */
! 		  fi = get_varinfo (var_rep[fi->id]);
  		  /* If we cannot constrain the set of functions we'll end up
  		     calling we end up using/clobbering everything.  */
  		  if (bitmap_bit_p (fi->solution, anything_id)
*************** ipa_pta_execute (void)
*** 8823,8829 ****
        fn->gimple_df->ipa_pta = true;
  
        /* We have to re-set the final-solution cache after each function
!          because what is a "global" is dependent on function context.  */
        final_solutions->empty ();
        obstack_free (&final_solutions_obstack, NULL);
        gcc_obstack_init (&final_solutions_obstack);
--- 6163,6169 ----
        fn->gimple_df->ipa_pta = true;
  
        /* We have to re-set the final-solution cache after each function
! 	 because what is a "global" is dependent on function context.  */
        final_solutions->empty ();
        obstack_free (&final_solutions_obstack, NULL);
        gcc_obstack_init (&final_solutions_obstack);
diff -Nrcpad gcc-16-20250713/gcc/tree-ssa-structalias.h gcc-16-20250720/gcc/tree-ssa-structalias.h
*** gcc-16-20250713/gcc/tree-ssa-structalias.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/gcc/tree-ssa-structalias.h	Sun Jul 20 22:32:31 2025
***************
*** 0 ****
--- 1,217 ----
+ /* Tree based points-to analysis
+    Copyright (C) 2005-2025 Free Software Foundation, Inc.
+    Contributed by Daniel Berlin <dberlin@dberlin.org>
+ 
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify
+    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.
+ 
+    GCC is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ /* NOTE: This file declares the internal interface of the points-to analyzer.
+    Outward-facing function declarations can be found in tree-ssa-alias.h.  */
+ 
+ #ifndef TREE_SSA_STRUCTALIAS_H
+ #define TREE_SSA_STRUCTALIAS_H
+ 
+ namespace pointer_analysis {
+ 
+ enum constraint_expr_type {SCALAR, DEREF, ADDRESSOF};
+ 
+ /* Static IDs for the special variables.  Variable ID zero is unused
+    and used as terminator for the sub-variable chain.  */
+ enum { nothing_id = 1, anything_id = 2, string_id = 3,
+        escaped_id = 4, nonlocal_id = 5, escaped_return_id = 6,
+        storedanything_id = 7, integer_id = 8 };
+ 
+ /* Use 0x8000... as special unknown offset.  */
+ #define UNKNOWN_OFFSET HOST_WIDE_INT_MIN
+ 
+ /* An expression that appears in a constraint.  */
+ 
+ struct constraint_expr
+ {
+   /* Constraint type.  */
+   constraint_expr_type type;
+ 
+   /* Variable we are referring to in the constraint.  */
+   unsigned int var;
+ 
+   /* Offset, in bits, of this constraint from the beginning of
+      variables it ends up referring to.
+ 
+      IOW, in a deref constraint, we would deref, get the result set,
+      then add OFFSET to each member.  */
+   HOST_WIDE_INT offset;
+ };
+ typedef struct constraint_expr ce_s;
+ 
+ /* Our set constraints are made up of two constraint expressions, one
+    LHS, and one RHS.
+ 
+    As described in the introduction in tree-ssa-structalias.cc, our set
+    constraints each represent an operation between set valued variables.
+ */
+ struct constraint
+ {
+   struct constraint_expr lhs;
+   struct constraint_expr rhs;
+ };
+ typedef struct constraint *constraint_t;
+ 
+ struct variable_info
+ {
+   /* ID of this variable.  */
+   unsigned int id;
+ 
+   /* True if this is a variable created by the constraint analysis, such as
+      heap variables and constraints we had to break up.  */
+   unsigned int is_artificial_var : 1;
+ 
+   /* True if this is a special variable whose solution set should not be
+      changed.  */
+   unsigned int is_special_var : 1;
+ 
+   /* True for variables whose size is not known or variable.  */
+   unsigned int is_unknown_size_var : 1;
+ 
+   /* True for (sub-)fields that represent a whole variable.  */
+   unsigned int is_full_var : 1;
+ 
+   /* True if this is a heap variable.  */
+   unsigned int is_heap_var : 1;
+ 
+   /* True if this is a register variable.  */
+   unsigned int is_reg_var : 1;
+ 
+   /* True if this field may contain pointers.  */
+   unsigned int may_have_pointers : 1;
+ 
+   /* True if this field has only restrict qualified pointers.  */
+   unsigned int only_restrict_pointers : 1;
+ 
+   /* True if this represents a heap var created for a restrict qualified
+      pointer.  */
+   unsigned int is_restrict_var : 1;
+ 
+   /* True if this represents a global variable.  */
+   unsigned int is_global_var : 1;
+ 
+   /* True if this represents a module escape point for IPA analysis.  */
+   unsigned int is_ipa_escape_point : 1;
+ 
+   /* True if this represents a IPA function info.  */
+   unsigned int is_fn_info : 1;
+ 
+   /* True if this appears as RHS in a ADDRESSOF constraint.  */
+   unsigned int address_taken : 1;
+ 
+   /* ???  Store somewhere better.  */
+   unsigned short ruid;
+ 
+   /* The ID of the variable for the next field in this structure
+      or zero for the last field in this structure.  */
+   unsigned next;
+ 
+   /* The ID of the variable for the first field in this structure.  */
+   unsigned head;
+ 
+   /* Offset of this variable, in bits, from the base variable.  */
+   unsigned HOST_WIDE_INT offset;
+ 
+   /* Size of the variable, in bits.  */
+   unsigned HOST_WIDE_INT size;
+ 
+   /* Full size of the base variable, in bits.  */
+   unsigned HOST_WIDE_INT fullsize;
+ 
+   /* In IPA mode the shadow UID in case the variable needs to be duplicated in
+      the final points-to solution because it reaches its containing
+      function recursively.  Zero if none is needed.  */
+   unsigned int shadow_var_uid;
+ 
+   /* Name of this variable.  */
+   const char *name;
+ 
+   /* Tree that this variable is associated with.  */
+   tree decl;
+ 
+   /* Points-to set for this variable.  */
+   bitmap solution;
+ 
+   /* Old points-to set for this variable.  */
+   bitmap oldsolution;
+ };
+ typedef struct variable_info *varinfo_t;
+ 
+ struct constraint_stats
+ {
+   unsigned int total_vars;
+   unsigned int nonpointer_vars;
+   unsigned int unified_vars_static;
+   unsigned int unified_vars_dynamic;
+   unsigned int iterations;
+   unsigned int num_edges;
+   unsigned int num_implicit_edges;
+   unsigned int num_avoided_edges;
+   unsigned int points_to_sets_created;
+ };
+ 
+ extern struct constraint_stats stats;
+ 
+ extern bitmap_obstack pta_obstack;
+ extern bitmap_obstack oldpta_obstack;
+ 
+ extern vec<varinfo_t> varmap;
+ extern vec<constraint_t> constraints;
+ extern unsigned int *var_rep;
+ 
+ 
+ /* Return the varmap element N.  */
+ 
+ inline varinfo_t
+ get_varinfo (unsigned int n)
+ {
+   return varmap[n];
+ }
+ 
+ /* Return the next variable in the list of sub-variables of VI
+    or NULL if VI is the last sub-variable.  */
+ 
+ inline varinfo_t
+ vi_next (varinfo_t vi)
+ {
+   return get_varinfo (vi->next);
+ }
+ 
+ varinfo_t first_vi_for_offset (varinfo_t start,
+ 			       unsigned HOST_WIDE_INT offset);
+ varinfo_t first_or_preceding_vi_for_offset (varinfo_t start,
+ 					    unsigned HOST_WIDE_INT offset);
+ void dump_constraint (FILE *file, constraint_t c);
+ void dump_constraints (FILE *file, int from);
+ void dump_solution_for_var (FILE *file, unsigned int var);
+ void dump_sa_stats (FILE *outfile);
+ void dump_sa_points_to_info (FILE *outfile);
+ void dump_varinfo (FILE *file, varinfo_t vi);
+ void dump_varmap (FILE *file);
+ void debug_constraint (constraint_t);
+ void debug_constraints (void);
+ void debug_solution_for_var (unsigned int);
+ void debug_sa_points_to_info (void);
+ void debug_varinfo (varinfo_t);
+ void debug_varmap (void);
+ 
+ } // namespace pointer_analysis
+ 
+ #endif /* TREE_SSA_STRUCTALIAS_H  */
diff -Nrcpad gcc-16-20250713/gcc/tree-vect-loop.cc gcc-16-20250720/gcc/tree-vect-loop.cc
*** gcc-16-20250713/gcc/tree-vect-loop.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree-vect-loop.cc	Sun Jul 20 22:32:31 2025
*************** vect_determine_vectype_for_stmt_1 (vec_i
*** 191,202 ****
  
    if (stmt_vectype)
      {
-       if (known_le (TYPE_VECTOR_SUBPARTS (stmt_vectype), 1U))
- 	return opt_result::failure_at (STMT_VINFO_STMT (stmt_info),
- 				       "not vectorized: unsupported "
- 				       "data-type in %G",
- 				       STMT_VINFO_STMT (stmt_info));
- 
        if (STMT_VINFO_VECTYPE (stmt_info))
  	/* The only case when a vectype had been already set is for stmts
  	   that contain a data ref, or for "pattern-stmts" (stmts generated
--- 191,196 ----
*************** vect_set_stmts_vectype (loop_vec_info lo
*** 303,310 ****
  				 scalar_type);
  
  	      vectype = get_vectype_for_scalar_type (loop_vinfo, scalar_type);
! 	      if (!vectype
! 		  || known_le (TYPE_VECTOR_SUBPARTS (vectype), 1U))
  		return opt_result::failure_at (phi,
  					       "not vectorized: unsupported "
  					       "data-type %T\n",
--- 297,303 ----
  				 scalar_type);
  
  	      vectype = get_vectype_for_scalar_type (loop_vinfo, scalar_type);
! 	      if (!vectype)
  		return opt_result::failure_at (phi,
  					       "not vectorized: unsupported "
  					       "data-type %T\n",
*************** vectorizable_induction (loop_vec_info lo
*** 9831,9836 ****
--- 9824,9830 ----
      }
    tree stept = TREE_TYPE (step_expr);
    tree step_vectype = get_same_sized_vectype (stept, vectype);
+   stept = TREE_TYPE (step_vectype);
  
    /* Check for target support of the vectorized arithmetic used here.  */
    if (!target_supports_op_p (step_vectype, PLUS_EXPR, optab_default)
*************** vectorizable_induction (loop_vec_info lo
*** 10285,10293 ****
     helper function for vectorizable_live_operation.  */
  
  static tree
! vectorizable_live_operation_1 (loop_vec_info loop_vinfo,
! 			       stmt_vec_info stmt_info, basic_block exit_bb,
! 			       tree vectype, int ncopies, slp_tree slp_node,
  			       tree bitsize, tree bitstart, tree vec_lhs,
  			       tree lhs_type, gimple_stmt_iterator *exit_gsi)
  {
--- 10279,10286 ----
     helper function for vectorizable_live_operation.  */
  
  static tree
! vectorizable_live_operation_1 (loop_vec_info loop_vinfo, basic_block exit_bb,
! 			       tree vectype, slp_tree slp_node,
  			       tree bitsize, tree bitstart, tree vec_lhs,
  			       tree lhs_type, gimple_stmt_iterator *exit_gsi)
  {
*************** vectorizable_live_operation_1 (loop_vec_
*** 10318,10325 ****
  
  	 where VEC_LHS is the vectorized live-out result and MASK is
  	 the loop mask for the final iteration.  */
!       gcc_assert (ncopies == 1
! 		  && (!slp_node || SLP_TREE_LANES (slp_node) == 1));
        gimple_seq tem = NULL;
        gimple_stmt_iterator gsi = gsi_last (tem);
        tree len = vect_get_loop_len (loop_vinfo, &gsi,
--- 10311,10317 ----
  
  	 where VEC_LHS is the vectorized live-out result and MASK is
  	 the loop mask for the final iteration.  */
!       gcc_assert (SLP_TREE_LANES (slp_node) == 1);
        gimple_seq tem = NULL;
        gimple_stmt_iterator gsi = gsi_last (tem);
        tree len = vect_get_loop_len (loop_vinfo, &gsi,
*************** vectorizable_live_operation_1 (loop_vec_
*** 10354,10361 ****
  
  	 where VEC_LHS is the vectorized live-out result and MASK is
  	 the loop mask for the final iteration.  */
!       gcc_assert (!slp_node || SLP_TREE_LANES (slp_node) == 1);
!       tree scalar_type = TREE_TYPE (STMT_VINFO_VECTYPE (stmt_info));
        gimple_seq tem = NULL;
        gimple_stmt_iterator gsi = gsi_last (tem);
        tree mask = vect_get_loop_mask (loop_vinfo, &gsi,
--- 10346,10353 ----
  
  	 where VEC_LHS is the vectorized live-out result and MASK is
  	 the loop mask for the final iteration.  */
!       gcc_assert (SLP_TREE_LANES (slp_node) == 1);
!       tree scalar_type = TREE_TYPE (vectype);
        gimple_seq tem = NULL;
        gimple_stmt_iterator gsi = gsi_last (tem);
        tree mask = vect_get_loop_mask (loop_vinfo, &gsi,
*************** vectorizable_live_operation (vec_info *v
*** 10401,10411 ****
    loop_vec_info loop_vinfo = dyn_cast <loop_vec_info> (vinfo);
    imm_use_iterator imm_iter;
    tree lhs, lhs_type, bitsize;
!   tree vectype = (slp_node
! 		  ? SLP_TREE_VECTYPE (slp_node)
! 		  : STMT_VINFO_VECTYPE (stmt_info));
    poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype);
-   int ncopies;
    gimple *use_stmt;
    use_operand_p use_p;
    auto_vec<tree> vec_oprnds;
--- 10393,10400 ----
    loop_vec_info loop_vinfo = dyn_cast <loop_vec_info> (vinfo);
    imm_use_iterator imm_iter;
    tree lhs, lhs_type, bitsize;
!   tree vectype = SLP_TREE_VECTYPE (slp_node);
    poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype);
    gimple *use_stmt;
    use_operand_p use_p;
    auto_vec<tree> vec_oprnds;
*************** vectorizable_live_operation (vec_info *v
*** 10424,10430 ****
  	return true;
        /* For SLP reductions we vectorize the epilogue for all involved stmts
  	 together.  */
!       if (slp_node && !REDUC_GROUP_FIRST_ELEMENT (stmt_info) && slp_index != 0)
  	return true;
        stmt_vec_info reduc_info = info_for_reduction (loop_vinfo, stmt_info);
        gcc_assert (reduc_info->is_reduc_info);
--- 10413,10419 ----
  	return true;
        /* For SLP reductions we vectorize the epilogue for all involved stmts
  	 together.  */
!       if (!REDUC_GROUP_FIRST_ELEMENT (stmt_info) && slp_index != 0)
  	return true;
        stmt_vec_info reduc_info = info_for_reduction (loop_vinfo, stmt_info);
        gcc_assert (reduc_info->is_reduc_info);
*************** vectorizable_live_operation (vec_info *v
*** 10442,10448 ****
  	 block, but we have to find an alternate exit first.  */
        if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo))
  	{
! 	  slp_tree phis_node = slp_node ? slp_node_instance->reduc_phis : NULL;
  	  for (auto exit : get_loop_exit_edges (LOOP_VINFO_LOOP (loop_vinfo)))
  	    if (exit != LOOP_VINFO_IV_EXIT (loop_vinfo))
  	      {
--- 10431,10437 ----
  	 block, but we have to find an alternate exit first.  */
        if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo))
  	{
! 	  slp_tree phis_node = slp_node_instance->reduc_phis;
  	  for (auto exit : get_loop_exit_edges (LOOP_VINFO_LOOP (loop_vinfo)))
  	    if (exit != LOOP_VINFO_IV_EXIT (loop_vinfo))
  	      {
*************** vectorizable_live_operation (vec_info *v
*** 10473,10504 ****
        return true;
      }
  
!   if (slp_node)
!     ncopies = 1;
!   else
!     ncopies = vect_get_num_copies (loop_vinfo, vectype);
! 
!   if (slp_node)
!     {
!       gcc_assert (slp_index >= 0);
  
!       /* Get the last occurrence of the scalar index from the concatenation of
! 	 all the slp vectors. Calculate which slp vector it is and the index
! 	 within.  */
!       int num_scalar = SLP_TREE_LANES (slp_node);
!       int num_vec = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
!       poly_uint64 pos = (num_vec * nunits) - num_scalar + slp_index;
  
!       /* Calculate which vector contains the result, and which lane of
! 	 that vector we need.  */
!       if (!can_div_trunc_p (pos, nunits, &vec_entry, &vec_index))
! 	{
! 	  if (dump_enabled_p ())
! 	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 			     "Cannot determine which vector holds the"
! 			     " final result.\n");
! 	  return false;
! 	}
      }
  
    if (!vec_stmt_p)
--- 10462,10485 ----
        return true;
      }
  
!   gcc_assert (slp_index >= 0);
  
!   /* Get the last occurrence of the scalar index from the concatenation of
!      all the slp vectors. Calculate which slp vector it is and the index
!      within.  */
!   int num_scalar = SLP_TREE_LANES (slp_node);
!   int num_vec = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
!   poly_uint64 pos = (num_vec * nunits) - num_scalar + slp_index;
  
!   /* Calculate which vector contains the result, and which lane of
!      that vector we need.  */
!   if (!can_div_trunc_p (pos, nunits, &vec_entry, &vec_index))
!     {
!       if (dump_enabled_p ())
! 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 			 "Cannot determine which vector holds the"
! 			 " final result.\n");
!       return false;
      }
  
    if (!vec_stmt_p)
*************** vectorizable_live_operation (vec_info *v
*** 10506,10512 ****
        /* No transformation required.  */
        if (loop_vinfo && LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo))
  	{
! 	  if (slp_node && SLP_TREE_LANES (slp_node) != 1)
  	    {
  	      if (dump_enabled_p ())
  		dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
--- 10487,10493 ----
        /* No transformation required.  */
        if (loop_vinfo && LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo))
  	{
! 	  if (SLP_TREE_LANES (slp_node) != 1)
  	    {
  	      if (dump_enabled_p ())
  		dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
*************** vectorizable_live_operation (vec_info *v
*** 10515,10522 ****
  				 "the loop.\n");
  	      LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false;
  	    }
! 	  else if (ncopies > 1
! 		   || (slp_node && SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) > 1))
  	    {
  	      if (dump_enabled_p ())
  		dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
--- 10496,10502 ----
  				 "the loop.\n");
  	      LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false;
  	    }
! 	  else if (SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) > 1)
  	    {
  	      if (dump_enabled_p ())
  		dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
*************** vectorizable_live_operation (vec_info *v
*** 10526,10533 ****
  	    }
  	  else
  	    {
- 	      gcc_assert (ncopies == 1
- 			  && (!slp_node || SLP_TREE_LANES (slp_node) == 1));
  	      if (direct_internal_fn_supported_p (IFN_EXTRACT_LAST, vectype,
  						  OPTIMIZE_FOR_SPEED))
  		vect_record_loop_mask (loop_vinfo,
--- 10506,10511 ----
*************** vectorizable_live_operation (vec_info *v
*** 10569,10608 ****
    bitsize = vector_element_bits_tree (vectype);
  
    /* Get the vectorized lhs of STMT and the lane to use (counted in bits).  */
!   tree vec_lhs, vec_lhs0, bitstart;
!   gimple *vec_stmt, *vec_stmt0;
!   if (slp_node)
!     {
!       gcc_assert (!loop_vinfo
! 		  || ((!LOOP_VINFO_FULLY_MASKED_P (loop_vinfo)
! 		       && !LOOP_VINFO_FULLY_WITH_LENGTH_P (loop_vinfo))
! 		      || SLP_TREE_LANES (slp_node) == 1));
! 
!       /* Get the correct slp vectorized stmt.  */
!       vec_lhs = SLP_TREE_VEC_DEFS (slp_node)[vec_entry];
!       vec_stmt = SSA_NAME_DEF_STMT (vec_lhs);
! 
!       /* In case we need to early break vectorize also get the first stmt.  */
!       vec_lhs0 = SLP_TREE_VEC_DEFS (slp_node)[0];
!       vec_stmt0 = SSA_NAME_DEF_STMT (vec_lhs0);
  
!       /* Get entry to use.  */
!       bitstart = bitsize_int (vec_index);
!       bitstart = int_const_binop (MULT_EXPR, bitsize, bitstart);
!     }
!   else
!     {
!       /* For multiple copies, get the last copy.  */
!       vec_stmt = STMT_VINFO_VEC_STMTS (stmt_info).last ();
!       vec_lhs = gimple_get_lhs (vec_stmt);
  
!       /* In case we need to early break vectorize also get the first stmt.  */
!       vec_stmt0 = STMT_VINFO_VEC_STMTS (stmt_info)[0];
!       vec_lhs0 = gimple_get_lhs (vec_stmt0);
  
!       /* Get the last lane in the vector.  */
!       bitstart = int_const_binop (MULT_EXPR, bitsize, bitsize_int (nunits - 1));
!     }
  
    if (loop_vinfo)
      {
--- 10547,10567 ----
    bitsize = vector_element_bits_tree (vectype);
  
    /* Get the vectorized lhs of STMT and the lane to use (counted in bits).  */
!   gcc_assert (!loop_vinfo
! 	      || ((!LOOP_VINFO_FULLY_MASKED_P (loop_vinfo)
! 		   && !LOOP_VINFO_FULLY_WITH_LENGTH_P (loop_vinfo))
! 		  || SLP_TREE_LANES (slp_node) == 1));
  
!   /* Get the correct slp vectorized stmt.  */
!   tree vec_lhs = SLP_TREE_VEC_DEFS (slp_node)[vec_entry];
!   gimple *vec_stmt = SSA_NAME_DEF_STMT (vec_lhs);
  
!   /* In case we need to early break vectorize also get the first stmt.  */
!   tree vec_lhs0 = SLP_TREE_VEC_DEFS (slp_node)[0];
  
!   /* Get entry to use.  */
!   tree bitstart = bitsize_int (vec_index);
!   bitstart = int_const_binop (MULT_EXPR, bitsize, bitstart);
  
    if (loop_vinfo)
      {
*************** vectorizable_live_operation (vec_info *v
*** 10651,10658 ****
  
  	      gimple_stmt_iterator exit_gsi;
  	      tree new_tree
! 		= vectorizable_live_operation_1 (loop_vinfo, stmt_info,
! 						 e->dest, vectype, ncopies,
  						 slp_node, bitsize,
  						 tmp_bitstart, tmp_vec_lhs,
  						 lhs_type, &exit_gsi);
--- 10610,10617 ----
  
  	      gimple_stmt_iterator exit_gsi;
  	      tree new_tree
! 		= vectorizable_live_operation_1 (loop_vinfo,
! 						 e->dest, vectype,
  						 slp_node, bitsize,
  						 tmp_bitstart, tmp_vec_lhs,
  						 lhs_type, &exit_gsi);
diff -Nrcpad gcc-16-20250713/gcc/tree-vect-slp.cc gcc-16-20250720/gcc/tree-vect-slp.cc
*** gcc-16-20250713/gcc/tree-vect-slp.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree-vect-slp.cc	Sun Jul 20 22:32:31 2025
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1114,1119 ****
--- 1114,1129 ----
        matches[0] = false;
        return false;
      }
+   if (is_a <bb_vec_info> (vinfo)
+       && known_le (TYPE_VECTOR_SUBPARTS (vectype), 1U))
+     {
+       if (dump_enabled_p ())
+ 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ 			 "Build SLP failed: not using single lane "
+ 			 "vector type %T\n", vectype);
+       matches[0] = false;
+       return false;
+     }
    /* Record nunits required but continue analysis, producing matches[]
       as if nunits was not an issue.  This allows splitting of groups
       to happen.  */
*************** vect_make_slp_decision (loop_vec_info lo
*** 7576,7595 ****
    hash_set<slp_tree> visited;
    FOR_EACH_VEC_ELT (slp_instances, i, instance)
      {
!       /* FORNOW: SLP if you can.  */
        /* All unroll factors have the form:
  
  	   GET_MODE_SIZE (vinfo->vector_mode) * X
  
  	 for some rational X, so they must have a common multiple.  */
!       vect_update_slp_vf_for_node (SLP_INSTANCE_TREE (instance),
! 				   unrolling_factor, visited);
  
        /* Mark all the stmts that belong to INSTANCE as PURE_SLP stmts.  Later we
  	 call vect_detect_hybrid_slp () to find stmts that need hybrid SLP and
  	 loop-based vectorization.  Such stmts will be marked as HYBRID.  */
!       vect_mark_slp_stmts (loop_vinfo, SLP_INSTANCE_TREE (instance));
!       decided_to_slp++;
      }
  
    LOOP_VINFO_SLP_UNROLLING_FACTOR (loop_vinfo) = unrolling_factor;
--- 7586,7610 ----
    hash_set<slp_tree> visited;
    FOR_EACH_VEC_ELT (slp_instances, i, instance)
      {
!       slp_tree root = SLP_INSTANCE_TREE (instance);
! 
        /* All unroll factors have the form:
  
  	   GET_MODE_SIZE (vinfo->vector_mode) * X
  
  	 for some rational X, so they must have a common multiple.  */
!       vect_update_slp_vf_for_node (root, unrolling_factor, visited);
  
        /* Mark all the stmts that belong to INSTANCE as PURE_SLP stmts.  Later we
  	 call vect_detect_hybrid_slp () to find stmts that need hybrid SLP and
  	 loop-based vectorization.  Such stmts will be marked as HYBRID.  */
!       vect_mark_slp_stmts (loop_vinfo, root);
! 
!       /* If all instances ended up with vector(1) T roots make sure to
! 	 not vectorize.  RVV for example relies on loop vectorization
! 	 when some instances are essentially kept scalar.  See PR121048.  */
!       if (known_gt (TYPE_VECTOR_SUBPARTS (SLP_TREE_VECTYPE (root)), 1U))
! 	decided_to_slp++;
      }
  
    LOOP_VINFO_SLP_UNROLLING_FACTOR (loop_vinfo) = unrolling_factor;
diff -Nrcpad gcc-16-20250713/gcc/tree-vect-stmts.cc gcc-16-20250720/gcc/tree-vect-stmts.cc
*** gcc-16-20250713/gcc/tree-vect-stmts.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree-vect-stmts.cc	Sun Jul 20 22:32:31 2025
*************** vectorizable_conversion (vec_info *vinfo
*** 5460,5465 ****
--- 5460,5466 ----
    vec<tree> vec_oprnds1 = vNULL;
    tree vop0;
    bb_vec_info bb_vinfo = dyn_cast <bb_vec_info> (vinfo);
+   loop_vec_info loop_vinfo = dyn_cast <loop_vec_info> (vinfo);
    int multi_step_cvt = 0;
    vec<tree> interm_types = vNULL;
    tree intermediate_type, cvt_type = NULL_TREE;
*************** vectorizable_conversion (vec_info *vinfo
*** 5802,5807 ****
--- 5803,5822 ----
        gcc_unreachable ();
      }
  
+   if (modifier == WIDEN
+       && loop_vinfo
+       && LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo)
+       && (code1 == VEC_WIDEN_MULT_EVEN_EXPR
+ 	  || widening_evenodd_fn_p (code1)))
+     {
+       if (dump_enabled_p ())
+ 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ 			 "can't use a fully-masked loop because"
+ 			 " widening operation on even/odd elements"
+ 			 " mixes up lanes.\n");
+       LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false;
+     }
+ 
    if (!vec_stmt)		/* transformation not required.  */
      {
        if (!vect_maybe_update_slp_op_vectype (slp_op0, vectype_in)
*************** vectorizable_operation (vec_info *vinfo,
*** 6705,6711 ****
    poly_uint64 nunits_in;
    poly_uint64 nunits_out;
    tree vectype_out;
-   int vec_num;
    int i;
    vec<tree> vec_oprnds0 = vNULL;
    vec<tree> vec_oprnds1 = vNULL;
--- 6720,6725 ----
*************** vectorizable_operation (vec_info *vinfo,
*** 6877,6883 ****
  
    /* Multiple types in SLP are handled by creating the appropriate number of
       vectorized stmts for each SLP node.  */
!   vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
  
    /* Reject attempts to combine mask types with nonmask types, e.g. if
       we have an AND between a (nonmask) boolean loaded from memory and
--- 6891,6897 ----
  
    /* Multiple types in SLP are handled by creating the appropriate number of
       vectorized stmts for each SLP node.  */
!   auto vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
  
    /* Reject attempts to combine mask types with nonmask types, e.g. if
       we have an AND between a (nonmask) boolean loaded from memory and
*************** vectorizable_operation (vec_info *vinfo,
*** 7229,7235 ****
  	      && code == BIT_AND_EXPR
  	      && VECTOR_BOOLEAN_TYPE_P (vectype))
  	    {
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op0, 1 }))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num, vectype, i);
--- 7243,7249 ----
  	      && code == BIT_AND_EXPR
  	      && VECTOR_BOOLEAN_TYPE_P (vectype))
  	    {
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op0, vec_num }))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num, vectype, i);
*************** vectorizable_operation (vec_info *vinfo,
*** 7238,7244 ****
  					   vop0, gsi);
  		}
  
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op1, 1 }))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num, vectype, i);
--- 7252,7258 ----
  					   vop0, gsi);
  		}
  
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op1, vec_num }))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num, vectype, i);
*************** vect_analyze_stmt (vec_info *vinfo,
*** 13364,13370 ****
        need extra handling, except for vectorizable reductions.  */
    if (!bb_vinfo
        && STMT_VINFO_TYPE (stmt_info) != reduc_vec_info_type
!       && STMT_VINFO_TYPE (stmt_info) != lc_phi_info_type
        && (!node->ldst_lanes || SLP_TREE_CODE (node) == VEC_PERM_EXPR)
        && !can_vectorize_live_stmts (as_a <loop_vec_info> (vinfo),
  				    node, node_instance,
--- 13378,13385 ----
        need extra handling, except for vectorizable reductions.  */
    if (!bb_vinfo
        && STMT_VINFO_TYPE (stmt_info) != reduc_vec_info_type
!       && (STMT_VINFO_TYPE (stmt_info) != lc_phi_info_type
! 	  || STMT_VINFO_DEF_TYPE (stmt_info) == vect_internal_def)
        && (!node->ldst_lanes || SLP_TREE_CODE (node) == VEC_PERM_EXPR)
        && !can_vectorize_live_stmts (as_a <loop_vec_info> (vinfo),
  				    node, node_instance,
diff -Nrcpad gcc-16-20250713/gcc/tree.cc gcc-16-20250720/gcc/tree.cc
*** gcc-16-20250713/gcc/tree.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree.cc	Sun Jul 20 22:32:31 2025
*************** along with GCC; see the file COPYING3.
*** 32,37 ****
--- 32,38 ----
  #include "coretypes.h"
  #include "backend.h"
  #include "target.h"
+ #include "memmodel.h"
  #include "tm_p.h"
  #include "tree.h"
  #include "gimple.h"
*************** get_target_clone_attr_len (tree arglist)
*** 15419,15424 ****
--- 15420,15484 ----
    return str_len_sum;
  }
  
+ /* Returns an auto_vec of string_slices containing the version strings from
+    ARGLIST.  DEFAULT_COUNT is incremented for each default version found.  */
+ 
+ auto_vec<string_slice>
+ get_clone_attr_versions (const tree arglist, int *default_count)
+ {
+   gcc_assert (TREE_CODE (arglist) == TREE_LIST);
+   auto_vec<string_slice> versions;
+ 
+   static const char separator_str[] = {TARGET_CLONES_ATTR_SEPARATOR, 0};
+   string_slice separators = string_slice (separator_str);
+ 
+   for (tree arg = arglist; arg; arg = TREE_CHAIN (arg))
+     {
+       string_slice str = string_slice (TREE_STRING_POINTER (TREE_VALUE (arg)));
+       while (str.is_valid ())
+ 	{
+ 	  string_slice attr = string_slice::tokenize (&str, separators);
+ 	  attr = attr.strip ();
+ 
+ 	  if (attr == "default" && default_count)
+ 	    (*default_count)++;
+ 	  versions.safe_push (attr);
+ 	}
+     }
+   return versions;
+ }
+ 
+ /* Returns an auto_vec of string_slices containing the version strings from
+    the target_clone attribute from DECL.  DEFAULT_COUNT is incremented for each
+    default version found.  */
+ auto_vec<string_slice>
+ get_clone_versions (const tree decl, int *default_count)
+ {
+   tree attr = lookup_attribute ("target_clones", DECL_ATTRIBUTES (decl));
+   if (!attr)
+     return auto_vec<string_slice> ();
+   tree arglist = TREE_VALUE (attr);
+   return get_clone_attr_versions (arglist, default_count);
+ }
+ 
+ /* If DECL has a target_version attribute, returns a string_slice containing the
+    attribute value.  Otherwise, returns string_slice::invalid.
+    Only works for target_version due to target attributes allowing multiple
+    string arguments to specify one target.  */
+ string_slice
+ get_target_version (const tree decl)
+ {
+   gcc_assert (!TARGET_HAS_FMV_TARGET_ATTRIBUTE);
+ 
+   tree attr = lookup_attribute ("target_version", DECL_ATTRIBUTES (decl));
+ 
+   if (!attr)
+     return string_slice::invalid ();
+ 
+   return string_slice (TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))))
+ 	   .strip ();
+ }
+ 
  void
  tree_cc_finalize (void)
  {
diff -Nrcpad gcc-16-20250713/gcc/tree.h gcc-16-20250720/gcc/tree.h
*** gcc-16-20250713/gcc/tree.h	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/tree.h	Sun Jul 20 22:32:31 2025
*************** along with GCC; see the file COPYING3.
*** 22,27 ****
--- 22,28 ----
  
  #include "tree-core.h"
  #include "options.h"
+ #include "vec.h"
  
  /* Convert a target-independent built-in function code to a combined_fn.  */
  
*************** class auto_suppress_location_wrappers
*** 2232,2237 ****
--- 2233,2244 ----
  #define OMP_CLAUSE_OPERAND(NODE, I)				\
  	OMP_CLAUSE_ELT_CHECK (NODE, I)
  
+ /* True if the clause decl NODE contains an OpenMP iterator.  */
+ #define OMP_ITERATOR_DECL_P(NODE) \
+ 	(TREE_CODE (NODE) == TREE_LIST				\
+ 	 && TREE_PURPOSE (NODE)					\
+ 	 && TREE_CODE (TREE_PURPOSE (NODE)) == TREE_VEC)
+ 
  /* In a BLOCK (scope) node:
     Variables declared in the scope NODE.  */
  #define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->block.vars)
*************** extern tree get_attr_nonstring_decl (tre
*** 7082,7085 ****
--- 7089,7102 ----
  
  extern int get_target_clone_attr_len (tree);
  
+ /* Returns the version string for a decl with target_version attribute.
+    Returns an invalid string_slice if no attribute is present.  */
+ extern string_slice get_target_version (const tree);
+ /* Returns a vector of the version strings from a target_clones attribute on
+    a decl.  Can also record the number of default versions found.  */
+ extern auto_vec<string_slice> get_clone_versions (const tree, int * = NULL);
+ /* Returns a vector of the version strings from a target_clones attribute
+    directly.  */
+ extern auto_vec<string_slice> get_clone_attr_versions (const tree, int *);
+ 
  #endif  /* GCC_TREE_H  */
diff -Nrcpad gcc-16-20250713/gcc/vec.cc gcc-16-20250720/gcc/vec.cc
*** gcc-16-20250713/gcc/vec.cc	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/vec.cc	Sun Jul 20 22:32:31 2025
*************** dump_vec_loc_statistics (void)
*** 176,181 ****
--- 176,249 ----
    vec_mem_desc.dump (VEC_ORIGIN);
  }
  
+ /* Gets the next token from STR delimited by DELIMS (deliminator not included
+    in returned string).
+ 
+    Updates STR to be the remaining string after the given token.
+ 
+    STR and DELIMS must both be valid string_slices.
+ 
+    If there aren't any of the chars in DELIM in STR (ie no more tokens in STR)
+    then returns the string, and updates STR to be invalid.  */
+ string_slice
+ string_slice::tokenize (string_slice *str, string_slice delims)
+ {
+   const char *ptr = str->begin ();
+ 
+   gcc_assert (str->is_valid () && delims.is_valid ());
+ 
+   for (; ptr < str->end (); ptr++)
+     for (char c : delims)
+       if (*ptr == c)
+ 	{
+ 	  /* Update the input string to be the remaining string.  */
+ 	  const char *str_begin = str->begin ();
+ 	  *str = string_slice (ptr  + 1, str->end ());
+ 	  return string_slice (str_begin, ptr);
+ 	}
+ 
+   /* If no deliminators between the start and end, return the whole string.  */
+   string_slice res = *str;
+   *str = string_slice::invalid ();
+   return res;
+ }
+ 
+ /* Compares the string_slices STR1 and STR2 giving a lexograpical ordering.
+    Returns -1 if STR1 comes before STR2, 1 if STR1 comes after, and 0 if the
+    string_slices have the same contents.  */
+ 
+ int
+ string_slice::strcmp (string_slice str1, string_slice str2)
+ {
+   for (unsigned int i = 0; i < str1.size () && i < str2.size (); i++)
+     {
+       if (str1[i] < str2[i])
+ 	return -1;
+       if (str1[i] > str2[i])
+ 	return 1;
+     }
+ 
+   if (str1.size () < str2.size ())
+     return -1;
+   if (str1.size () > str2.size ())
+     return 1;
+   return 0;
+ }
+ 
+ string_slice
+ string_slice::strip ()
+ {
+   const char *start = this->begin ();
+   const char *end = this->end ();
+ 
+   while (start < end && ISSPACE (*start))
+     start++;
+   while (end > start && ISSPACE (*(end-1)))
+     end--;
+ 
+   return string_slice (start, end);
+ }
+ 
  #if CHECKING_P
  /* Report qsort comparator CMP consistency check failure with P1, P2, P3 as
     witness elements.  */
*************** test_auto_alias ()
*** 584,589 ****
--- 652,810 ----
    ASSERT_EQ (val, 0);
  }
  
+ static void
+ test_string_slice_initializers ()
+ {
+   string_slice str1 = string_slice ();
+   ASSERT_TRUE (str1.is_valid ());
+   ASSERT_EQ (str1.size (), 0);
+ 
+   string_slice str2 = string_slice ("Test string");
+   ASSERT_TRUE (str2.is_valid ());
+   ASSERT_EQ (str2.size (), 11);
+ 
+   string_slice str3 = "Test string the second";
+   ASSERT_TRUE (str3.is_valid ());
+   ASSERT_EQ (str3.size (), 22);
+ 
+   string_slice str4 = string_slice ("Test string", 4);
+   ASSERT_TRUE (str4.is_valid ());
+   ASSERT_EQ (str4.size (), 4);
+ }
+ 
+ static void
+ test_string_slice_tokenize ()
+ {
+   string_slice test_string_slice = "";
+   string_slice test_delims = ",";
+ 
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims), "");
+   ASSERT_FALSE (test_string_slice.is_valid ());
+ 
+   test_string_slice = ",";
+   test_delims = ",";
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims),
+ 	     string_slice (""));
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims),
+ 	     string_slice (""));
+   ASSERT_FALSE (test_string_slice.is_valid ());
+ 
+   test_string_slice = ",test.,.test, ,  test  ";
+   test_delims = ",.";
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims), "");
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims), "test");
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims), "");
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims), "");
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims), "test");
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims), " ");
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims),
+ 	     "  test  ");
+   ASSERT_FALSE (test_string_slice.is_valid ());
+ 
+   const char *test_string
+     = "This is the test string, it \0 is for testing, 123 ,,";
+   test_string_slice = string_slice (test_string, 52);
+   test_delims = string_slice (",\0", 2);
+ 
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims),
+ 	     "This is the test string");
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims),
+ 	     " it ");
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims),
+ 	     " is for testing");
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims),
+ 	     " 123 ");
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims),
+ 	     "");
+   ASSERT_EQ (string_slice::tokenize (&test_string_slice, test_delims),
+ 	     "");
+   ASSERT_FALSE (test_string_slice.is_valid ());
+ }
+ 
+ static void
+ test_string_slice_strcmp ()
+ {
+   ASSERT_EQ (string_slice::strcmp (string_slice (),
+ 				   string_slice ()), 0);
+   ASSERT_EQ (string_slice::strcmp (string_slice ("test"),
+ 				   string_slice ()), 1);
+   ASSERT_EQ (string_slice::strcmp (string_slice (),
+ 				   string_slice ("test")), -1);
+   ASSERT_EQ (string_slice::strcmp (string_slice ("test"),
+ 				   string_slice ("test")), 0);
+   ASSERT_EQ (string_slice::strcmp (string_slice ("a"),
+ 				   string_slice ("b")), -1);
+   ASSERT_EQ (string_slice::strcmp (string_slice ("b"),
+ 				   string_slice ("a")), 1);
+   ASSERT_EQ (string_slice::strcmp (string_slice ("ab", 1),
+ 				   string_slice ("a")), 0);
+   ASSERT_EQ (string_slice::strcmp (string_slice ("ab", 2),
+ 				   string_slice ("a")), 1);
+ }
+ 
+ static void
+ test_string_slice_equality ()
+ {
+   ASSERT_TRUE (string_slice () == string_slice ());
+   ASSERT_FALSE (string_slice ("test") == string_slice ());
+   ASSERT_FALSE ("test" == string_slice ());
+   ASSERT_FALSE (string_slice () == string_slice ("test"));
+   ASSERT_FALSE (string_slice () == "test");
+   ASSERT_TRUE (string_slice ("test") == string_slice ("test"));
+   ASSERT_TRUE ("test" == string_slice ("test"));
+   ASSERT_TRUE (string_slice ("test") == "test");
+   ASSERT_FALSE (string_slice ("a") == string_slice ("b"));
+   ASSERT_FALSE ("a" == string_slice ("b"));
+   ASSERT_FALSE (string_slice ("a") == "b");
+   ASSERT_FALSE (string_slice ("b") == string_slice ("a"));
+   ASSERT_TRUE (string_slice ("ab", 1) == string_slice ("a"));
+   ASSERT_TRUE (string_slice ("ab", 1) == "a");
+   ASSERT_FALSE (string_slice ("ab", 2) == string_slice ("a"));
+   ASSERT_FALSE (string_slice ("ab", 2) == "a");
+ }
+ 
+ static void
+ test_string_slice_inequality ()
+ {
+   ASSERT_FALSE (string_slice () != string_slice ());
+   ASSERT_TRUE (string_slice ("test") != string_slice ());
+   ASSERT_TRUE ("test" != string_slice ());
+   ASSERT_TRUE (string_slice () != string_slice ("test"));
+   ASSERT_TRUE (string_slice () != "test");
+   ASSERT_FALSE (string_slice ("test") != string_slice ("test"));
+   ASSERT_FALSE ("test" != string_slice ("test"));
+   ASSERT_FALSE (string_slice ("test") != "test");
+   ASSERT_TRUE (string_slice ("a") != string_slice ("b"));
+   ASSERT_TRUE ("a" != string_slice ("b"));
+   ASSERT_TRUE (string_slice ("a") != "b");
+   ASSERT_TRUE (string_slice ("b") != string_slice ("a"));
+   ASSERT_FALSE (string_slice ("ab", 1) != string_slice ("a"));
+   ASSERT_FALSE (string_slice ("ab", 1) != "a");
+   ASSERT_TRUE (string_slice ("ab", 2) != string_slice ("a"));
+   ASSERT_TRUE (string_slice ("ab", 2) != "a");
+ }
+ 
+ static void
+ test_string_slice_invalid ()
+ {
+   ASSERT_FALSE (string_slice::invalid ().is_valid ());
+   ASSERT_FALSE (string_slice (NULL, 1).is_valid ());
+   ASSERT_TRUE (string_slice (NULL, (size_t) 0).is_valid ());
+   ASSERT_TRUE (string_slice ("Test", (size_t) 0).is_valid ());
+   ASSERT_TRUE (string_slice ().is_valid ());
+ }
+ 
+ static void
+ test_string_slice_strip ()
+ {
+   ASSERT_EQ (string_slice ("   test   ").strip (), string_slice ("test"));
+   ASSERT_EQ (string_slice ("\t   test string\t   \n ").strip (),
+ 	     string_slice ("test string"));
+   ASSERT_EQ (string_slice ("test").strip (), string_slice ("test"));
+   ASSERT_EQ (string_slice ().strip (), string_slice ());
+   ASSERT_EQ (string_slice ("\t  \n \t   ").strip (), string_slice ());
+ }
+ 
  /* Run all of the selftests within this file.  */
  
  void
*************** vec_cc_tests ()
*** 604,609 ****
--- 825,837 ----
    test_reverse ();
    test_auto_delete_vec ();
    test_auto_alias ();
+   test_string_slice_initializers ();
+   test_string_slice_tokenize ();
+   test_string_slice_strcmp ();
+   test_string_slice_equality ();
+   test_string_slice_inequality ();
+   test_string_slice_invalid ();
+   test_string_slice_strip ();
  }
  
  } // namespace selftest
diff -Nrcpad gcc-16-20250713/gcc/vec.h gcc-16-20250720/gcc/vec.h
*** gcc-16-20250713/gcc/vec.h	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/gcc/vec.h	Sun Jul 20 22:32:31 2025
*************** make_array_slice (T *base, unsigned int
*** 2495,2498 ****
--- 2495,2544 ----
  # pragma GCC poison m_vec m_vecpfx m_vecdata
  #endif
  
+ /* string_slice inherits from array_slice, specifically to refer to a substring
+    of a character array.
+    It includes some string like helpers.  */
+ class string_slice : public array_slice<const char>
+ {
+ public:
+   string_slice () : array_slice<const char> () {}
+   string_slice (const char *str) : array_slice (str, strlen (str)) {}
+   explicit string_slice (const char *str, size_t len)
+     : array_slice (str, len) {}
+   explicit string_slice (const char *start, const char *end)
+     : array_slice (start, end - start) {}
+ 
+   friend bool operator== (const string_slice &lhs, const string_slice &rhs)
+   {
+     if (!lhs.is_valid () || !rhs.is_valid ())
+       return false;
+     if (lhs.size () != rhs.size ())
+       return false;
+     return memcmp (lhs.begin (), rhs.begin (), lhs.size ()) == 0;
+   }
+ 
+   friend bool operator!= (const string_slice &lhs, const string_slice &rhs)
+   {
+     return !(lhs == rhs);
+   }
+ 
+   /* Returns an invalid string_slice.  */
+   static string_slice invalid ()
+   {
+     return string_slice (nullptr, ~0U);
+   }
+ 
+   /* tokenize is used to split a string by some deliminator into
+      string_slice's.  Similarly to the posix strtok_r.but without modifying the
+      input string, and returning all tokens which may be empty in the case
+      of an empty input string of consecutive deliminators.  */
+   static string_slice tokenize (string_slice *str, string_slice delims);
+ 
+   /* Removes white space from the front and back of the string_slice.  */
+   string_slice strip ();
+ 
+   /* Compares two string_slices in lexographical ordering.  */
+   static int strcmp (string_slice str1, string_slice str2);
+ };
+ 
  #endif // GCC_VEC_H
diff -Nrcpad gcc-16-20250713/libgcc/ChangeLog gcc-16-20250720/libgcc/ChangeLog
*** gcc-16-20250713/libgcc/ChangeLog	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/libgcc/ChangeLog	Sun Jul 20 22:32:32 2025
***************
*** 1,3 ****
--- 1,14 ----
+ 2025-07-17  Richard Sandiford  <richard.sandiford@arm.com>
+ 	    Yury Khrustalev  <yury.khrustalev@arm.com>
+ 
+ 	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state):
+ 	If a signal was raised while there was an uncommitted lazy save,
+ 	commit the save as part of the unwind process.
+ 
+ 2025-07-16  John Ericson  <git@JohnEricson.me>
+ 
+ 	* Makefile.in:  Delete dead `MACHMODE_H` variable
+ 
  2025-07-10  Jan Dubiec  <jdx@o2.pl>
  
  	PR target/116363
diff -Nrcpad gcc-16-20250713/libgcc/Makefile.in gcc-16-20250720/libgcc/Makefile.in
*** gcc-16-20250713/libgcc/Makefile.in	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/libgcc/Makefile.in	Sun Jul 20 22:32:32 2025
*************** AWK = @AWK@
*** 193,199 ****
  GCC_FOR_TARGET = $(CC)
  LIPO = @LIPO@
  LIPO_FOR_TARGET = $(LIPO)
- MACHMODE_H = machmode.h mode-classes.def insn-modes.h
  NM = @NM@
  NM_FOR_TARGET = $(NM)
  RANLIB_FOR_TARGET = $(RANLIB)
--- 193,198 ----
*************** export INSTALL_DATA
*** 220,226 ****
  export LIB1ASMSRC
  export LIBGCC2_CFLAGS
  export LIPO_FOR_TARGET
- export MACHMODE_H
  export NM_FOR_TARGET
  export STRIP_FOR_TARGET
  export RANLIB_FOR_TARGET
--- 219,224 ----
diff -Nrcpad gcc-16-20250713/libgcc/config/aarch64/linux-unwind.h gcc-16-20250720/libgcc/config/aarch64/linux-unwind.h
*** gcc-16-20250713/libgcc/config/aarch64/linux-unwind.h	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/libgcc/config/aarch64/linux-unwind.h	Sun Jul 20 22:32:32 2025
***************
*** 27,33 ****
  
  #include <signal.h>
  #include <sys/ucontext.h>
! 
  
  /* Since insns are always stored LE, on a BE system the opcodes will
     be loaded byte-reversed.  Therefore, define two sets of opcodes,
--- 27,33 ----
  
  #include <signal.h>
  #include <sys/ucontext.h>
! #include <stdint.h>
  
  /* Since insns are always stored LE, on a BE system the opcodes will
     be loaded byte-reversed.  Therefore, define two sets of opcodes,
***************
*** 43,48 ****
--- 43,64 ----
  
  #define MD_FALLBACK_FRAME_STATE_FOR aarch64_fallback_frame_state
  
+ #ifndef FPSIMD_MAGIC
+ #define FPSIMD_MAGIC 0x46508001
+ #endif
+ 
+ #ifndef TPIDR2_MAGIC
+ #define TPIDR2_MAGIC 0x54504902
+ #endif
+ 
+ #ifndef ZA_MAGIC
+ #define ZA_MAGIC 0x54366345
+ #endif
+ 
+ #ifndef EXTRA_MAGIC
+ #define EXTRA_MAGIC 0x45585401
+ #endif
+ 
  static _Unwind_Reason_Code
  aarch64_fallback_frame_state (struct _Unwind_Context *context,
  			      _Unwind_FrameState * fs)
*************** aarch64_fallback_frame_state (struct _Un
*** 58,63 ****
--- 74,94 ----
      ucontext_t uc;
    };
  
+   struct tpidr2_block
+   {
+     uint64_t za_save_buffer;
+     uint16_t num_za_save_slices;
+     uint8_t reserved[6];
+   };
+ 
+   struct za_block
+   {
+     struct _aarch64_ctx head;
+     uint16_t vl;
+     uint16_t reserved[3];
+     uint64_t data;
+   };
+ 
    struct rt_sigframe *rt_;
    _Unwind_Ptr new_cfa;
    unsigned *pc = context->ra;
*************** aarch64_fallback_frame_state (struct _Un
*** 103,113 ****
--- 134,148 ----
       field can be used to skip over unrecognized context extensions.
       The end of the context sequence is marked by a context with magic
       0 or size 0.  */
+   struct tpidr2_block *tpidr2 = 0;
+   struct za_block *za_ctx = 0;
+ 
    for (extension_marker = (struct _aarch64_ctx *) &sc->__reserved;
         extension_marker->magic;
         extension_marker = (struct _aarch64_ctx *)
         ((unsigned char *) extension_marker + extension_marker->size))
      {
+     restart:
        if (extension_marker->magic == FPSIMD_MAGIC)
  	{
  	  struct fpsimd_context *ctx =
*************** aarch64_fallback_frame_state (struct _Un
*** 139,150 ****
--- 174,256 ----
  	      fs->regs.reg[AARCH64_DWARF_V0 + i].loc.offset = offset;
  	    }
  	}
+       else if (extension_marker->magic == TPIDR2_MAGIC)
+ 	{
+ 	  /* A TPIDR2 context.
+ 
+ 	     All the casting is to support big-endian ILP32.  We could read
+ 	     directly into TPIDR2 otherwise.  */
+ 	  struct { struct _aarch64_ctx h; uint64_t tpidr2; } *ctx
+ 		  = (void *)extension_marker;
+ #if defined (__ILP32__)
+ 	  tpidr2 = (struct tpidr2_block *) (uintptr_t) ctx->tpidr2;
+ #else
+ 	  tpidr2 = (struct tpidr2_block *) ctx->tpidr2;
+ #endif
+ 	}
+       else if (extension_marker->magic == ZA_MAGIC)
+ 	/* A ZA context.  We interpret this later.  */
+ 	za_ctx = (void *)extension_marker;
+       else if (extension_marker->magic == EXTRA_MAGIC)
+ 	{
+ 	  /* Extra context.  The ABI guarantees that the next _aarch64_ctx
+ 	     in the current list will be the zero terminator, so we can simply
+ 	     switch to the new list and continue from there.  The new list is
+ 	     also zero-terminated.
+ 
+ 	     As above, the casting is to support big-endian ILP32.  */
+ 	  struct { struct _aarch64_ctx h; uint64_t next; } *ctx
+ 		  = (void *)extension_marker;
+ #if defined (__ILP32__)
+ 	  extension_marker = (struct _aarch64_ctx *) (uintptr_t) ctx->next;
+ #else
+ 	  extension_marker = (struct _aarch64_ctx *) ctx->next;
+ #endif
+ 	  goto restart;
+ 	}
        else
  	{
  	  /* There is context provided that we do not recognize!  */
  	}
      }
  
+   /* Signal handlers are entered with ZA in the off state (TPIDR2_ELO==0 and
+      PSTATE.ZA==0).  The normal process when transitioning from ZA being
+      dormant to ZA being off is to commit the lazy save; see the AAPCS64
+      for details.  However, this is not done when entering a signal handler.
+      Instead, linux saves the old contents of ZA and TPIDR2_EL0 to the
+      sigcontext without interpreting them further.
+ 
+      Therefore, if a signal handler throws an exception to code outside the
+      signal handler, the unwinder must commit the lazy save after the fact.
+      Committing a lazy save means:
+ 
+      (1) Storing the contents of ZA into the buffer provided by TPIDR2_EL0.
+      (2) Setting TPIDR2_EL0 to zero.
+      (3) Turning ZA off.
+ 
+      (2) and (3) have already been done by the call to __libgcc_arm_za_disable.
+      (1) involves copying data from the ZA sigcontext entry to the
+      corresponding lazy save buffer.  */
+   if (tpidr2 && za_ctx && tpidr2->za_save_buffer)
+     {
+       /* There is a 16-bit vector length (measured in bytes) at ZA_CTX + 8.
+ 	 The data itself starts at ZA_CTX + 16.
+ 	 As above, the casting is to support big-endian ILP32.  */
+       uint16_t vl = za_ctx->vl;
+ #if defined (__ILP32__)
+       void *save_buffer = (void *) (uintptr_t) tpidr2->za_save_buffer;
+       const void *za_buffer = (void *) (uintptr_t) &za_ctx->data;
+ #else
+       void *save_buffer = (void *) tpidr2->za_save_buffer;
+       const void *za_buffer = (void *) &za_ctx->data;
+ #endif
+       uint64_t num_slices = tpidr2->num_za_save_slices;
+       if (num_slices > vl)
+ 	num_slices = vl;
+       memcpy (save_buffer, za_buffer, num_slices * vl);
+     }
+ 
    fs->regs.how[31] = REG_SAVED_OFFSET;
    fs->regs.reg[31].loc.offset = (_Unwind_Ptr) & (sc->sp) - new_cfa;
  
diff -Nrcpad gcc-16-20250713/libgcc/config/libbid/ChangeLog gcc-16-20250720/libgcc/config/libbid/ChangeLog
*** gcc-16-20250713/libgcc/config/libbid/ChangeLog	Sun Jul 13 22:32:44 2025
--- gcc-16-20250720/libgcc/config/libbid/ChangeLog	Sun Jul 20 22:32:32 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-07-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	* bid_binarydecimal.c (__mul_10x256_to_256): Mark c3 as being
+ 	used.
+ 
  2025-05-15  liuhongt  <hongtao.liu@intel.com>
  
  	* bid128_string.c (MIN_DIGITS): New macro.
diff -Nrcpad gcc-16-20250713/libgcc/config/libbid/bid_binarydecimal.c gcc-16-20250720/libgcc/config/libbid/bid_binarydecimal.c
*** gcc-16-20250713/libgcc/config/libbid/bid_binarydecimal.c	Sun Jul 13 22:32:45 2025
--- gcc-16-20250720/libgcc/config/libbid/bid_binarydecimal.c	Sun Jul 20 22:32:32 2025
*************** UINT64 CY;
*** 132,137 ****
--- 132,138 ----
    __mul_10x64(p1,c1,a1,c0);                                     \
    __mul_10x64(p2,c2,a2,c1);                                     \
    __mul_10x64(p3,c3,a3,c2);                                     \
+   (void)c3;							\
  }
  
  // Set up indices for low and high parts, depending on the endian-ness.
diff -Nrcpad gcc-16-20250713/libgcobol/ChangeLog gcc-16-20250720/libgcobol/ChangeLog
*** gcc-16-20250713/libgcobol/ChangeLog	Sun Jul 13 22:32:45 2025
--- gcc-16-20250720/libgcobol/ChangeLog	Sun Jul 20 22:32:32 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-07-13  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* common-defs.h (PTRCAST): Moved here from libgcobol.h.
+ 	* libgcobol.h (PTRCAST): Deleted.
+ 
  2025-07-10  James K. Lowden  <jklowden@cobolworx.com>
  
  	* common-defs.h (cdf_enabled_exceptions): Use new CDF state.
diff -Nrcpad gcc-16-20250713/libgomp/ChangeLog gcc-16-20250720/libgomp/ChangeLog
*** gcc-16-20250713/libgomp/ChangeLog	Sun Jul 13 22:32:46 2025
--- gcc-16-20250720/libgomp/ChangeLog	Sun Jul 20 22:32:34 2025
***************
*** 1,3 ****
--- 1,20 ----
+ 2025-07-18  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	PR target/121156
+ 	* config/gcn/bar.c (gomp_team_barrier_wait_end): Remove unused
+ 	"generation" variable.
+ 	(gomp_team_barrier_wait_cancel_end): Likewise.
+ 
+ 2025-07-17  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	PR target/119692
+ 	* testsuite/libgomp.c++/pr119692-1-4.C: '{ dg-timeout 10 { target offload_device } }'.
+ 	* testsuite/libgomp.c++/pr119692-1-5.C: Likewise.
+ 	* testsuite/libgomp.c++/target-exceptions-bad_cast-1.C: Likewise.
+ 	* testsuite/libgomp.c++/target-exceptions-bad_cast-2.C: Likewise.
+ 	* testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C: Likewise.
+ 	* testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C: Likewise.
+ 
  2025-06-24  Tobias Burnus  <tburnus@baylibre.com>
  
  	* libgomp.texi (acc_attach, acc_detach): Update for Fortran
diff -Nrcpad gcc-16-20250713/libgomp/config/gcn/bar.c gcc-16-20250720/libgomp/config/gcn/bar.c
*** gcc-16-20250713/libgomp/config/gcn/bar.c	Sun Jul 13 22:32:46 2025
--- gcc-16-20250720/libgomp/config/gcn/bar.c	Sun Jul 20 22:32:34 2025
*************** gomp_team_barrier_wake (gomp_barrier_t *
*** 79,85 ****
  void
  gomp_team_barrier_wait_end (gomp_barrier_t *bar, gomp_barrier_state_t state)
  {
!   unsigned int generation, gen;
  
    if (__builtin_expect (state & BAR_WAS_LAST, 0))
      {
--- 79,85 ----
  void
  gomp_team_barrier_wait_end (gomp_barrier_t *bar, gomp_barrier_state_t state)
  {
!   unsigned int gen;
  
    if (__builtin_expect (state & BAR_WAS_LAST, 0))
      {
*************** gomp_team_barrier_wait_end (gomp_barrier
*** 105,111 ****
  	}
      }
  
-   generation = state;
    state &= ~BAR_CANCELLED;
    int retry = 100;
    do
--- 105,110 ----
*************** gomp_team_barrier_wait_end (gomp_barrier
*** 128,134 ****
  	  gomp_barrier_handle_tasks (state);
  	  gen = __atomic_load_n (&bar->generation, MEMMODEL_ACQUIRE);
  	}
-       generation |= gen & BAR_WAITING_FOR_TASK;
      }
    while (gen != state + BAR_INCR);
  }
--- 127,132 ----
*************** bool
*** 152,158 ****
  gomp_team_barrier_wait_cancel_end (gomp_barrier_t *bar,
  				   gomp_barrier_state_t state)
  {
!   unsigned int generation, gen;
  
    if (__builtin_expect (state & BAR_WAS_LAST, 0))
      {
--- 150,156 ----
  gomp_team_barrier_wait_cancel_end (gomp_barrier_t *bar,
  				   gomp_barrier_state_t state)
  {
!   unsigned int gen;
  
    if (__builtin_expect (state & BAR_WAS_LAST, 0))
      {
*************** gomp_team_barrier_wait_cancel_end (gomp_
*** 184,190 ****
    if (__builtin_expect (state & BAR_CANCELLED, 0))
      return true;
  
-   generation = state;
    int retry = 100;
    do
      {
--- 182,187 ----
*************** gomp_team_barrier_wait_cancel_end (gomp_
*** 209,215 ****
  	  gomp_barrier_handle_tasks (state);
  	  gen = __atomic_load_n (&bar->generation, MEMMODEL_RELAXED);
  	}
-       generation |= gen & BAR_WAITING_FOR_TASK;
      }
    while (gen != state + BAR_INCR);
  
--- 206,211 ----
diff -Nrcpad gcc-16-20250713/libgomp/testsuite/libgomp.c++/pr119692-1-4.C gcc-16-20250720/libgomp/testsuite/libgomp.c++/pr119692-1-4.C
*** gcc-16-20250713/libgomp/testsuite/libgomp.c++/pr119692-1-4.C	Sun Jul 13 22:32:46 2025
--- gcc-16-20250720/libgomp/testsuite/libgomp.c++/pr119692-1-4.C	Sun Jul 20 22:32:34 2025
***************
*** 5,11 ****
     { dg-xfail-run-if PR119692 { offload_device } } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 } ... to make sure that happens quickly.  */
  /* { dg-additional-options -fdump-tree-gimple } */
  
  #include "pr119692-1-1.C"
--- 5,11 ----
     { dg-xfail-run-if PR119692 { offload_device } } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 { target offload_device } } ... to make sure that happens quickly.  */
  /* { dg-additional-options -fdump-tree-gimple } */
  
  #include "pr119692-1-1.C"
diff -Nrcpad gcc-16-20250713/libgomp/testsuite/libgomp.c++/pr119692-1-5.C gcc-16-20250720/libgomp/testsuite/libgomp.c++/pr119692-1-5.C
*** gcc-16-20250713/libgomp/testsuite/libgomp.c++/pr119692-1-5.C	Sun Jul 13 22:32:46 2025
--- gcc-16-20250720/libgomp/testsuite/libgomp.c++/pr119692-1-5.C	Sun Jul 20 22:32:34 2025
***************
*** 5,11 ****
     { dg-xfail-run-if PR119692 { offload_device } } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 } ... to make sure that happens quickly.  */
  /* { dg-additional-options -fdump-tree-gimple } */
  
  #include "pr119692-1-1.C"
--- 5,11 ----
     { dg-xfail-run-if PR119692 { offload_device } } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 { target offload_device } } ... to make sure that happens quickly.  */
  /* { dg-additional-options -fdump-tree-gimple } */
  
  #include "pr119692-1-1.C"
diff -Nrcpad gcc-16-20250713/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C gcc-16-20250720/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C
*** gcc-16-20250713/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C	Sun Jul 13 22:32:46 2025
--- gcc-16-20250720/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C	Sun Jul 20 22:32:34 2025
***************
*** 25,28 ****
     { dg-shouldfail {'std::bad_cast' exception} } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 } ... to make sure that happens quickly.  */
--- 25,28 ----
     { dg-shouldfail {'std::bad_cast' exception} } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 { target offload_device } } ... to make sure that happens quickly.  */
diff -Nrcpad gcc-16-20250713/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2.C gcc-16-20250720/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2.C
*** gcc-16-20250713/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2.C	Sun Jul 13 22:32:46 2025
--- gcc-16-20250720/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2.C	Sun Jul 20 22:32:34 2025
***************
*** 24,27 ****
     { dg-shouldfail {'MyException' exception} { offload_device } } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 } ... to make sure that happens quickly.  */
--- 24,27 ----
     { dg-shouldfail {'MyException' exception} { offload_device } } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 { target offload_device } } ... to make sure that happens quickly.  */
diff -Nrcpad gcc-16-20250713/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C gcc-16-20250720/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C
*** gcc-16-20250713/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C	Sun Jul 13 22:32:46 2025
--- gcc-16-20250720/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C	Sun Jul 20 22:32:34 2025
*************** int main()
*** 54,57 ****
     { dg-shouldfail {'std::bad_cast' exception} } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 } ... to make sure that happens quickly.  */
--- 54,57 ----
     { dg-shouldfail {'std::bad_cast' exception} } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 { target offload_device } } ... to make sure that happens quickly.  */
diff -Nrcpad gcc-16-20250713/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C gcc-16-20250720/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C
*** gcc-16-20250713/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C	Sun Jul 13 22:32:46 2025
--- gcc-16-20250720/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C	Sun Jul 20 22:32:34 2025
*************** int main()
*** 60,63 ****
     { dg-shouldfail {'std::bad_cast' exception} { ! openacc_host_selected } } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 } ... to make sure that happens quickly.  */
--- 60,63 ----
     { dg-shouldfail {'std::bad_cast' exception} { ! openacc_host_selected } } */
  /* There are configurations where we 'WARNING: program timed out.' while in
     'dynamic_cast', see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692#c6>.
!    { dg-timeout 10 { target offload_device } } ... to make sure that happens quickly.  */
diff -Nrcpad gcc-16-20250713/libstdc++-v3/ChangeLog gcc-16-20250720/libstdc++-v3/ChangeLog
*** gcc-16-20250713/libstdc++-v3/ChangeLog	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/ChangeLog	Sun Jul 20 22:32:36 2025
***************
*** 1,3 ****
--- 1,333 ----
+ 2025-07-18  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/stl_iterator_base_types.h (__any_input_iterator):
+ 	Only define when __cpp_lib_concepts is defined.
+ 
+ 2025-07-18  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/manual/appendix_contributing.xml: Remove Paolo from
+ 	list of maintainers to contact about contributing.
+ 	* doc/html/manual/appendix_contributing.html: Regenerate.
+ 
+ 2025-07-18  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/manual/build_hacking.xml: Document that
+ 	windows_zones-map.h is a generated file.
+ 	* doc/html/manual/appendix_porting.html: Regenerate.
+ 
+ 2025-07-18  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/119137
+ 	* include/std/inplace_vector (inplace_vector::operator=):
+ 	Qualify call to std::addressof.
+ 
+ 2025-07-18  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/121154
+ 	* include/bits/chrono_io.h (_ChronoSpec::_M_time_point): Remove.
+ 	(_ChronoSpec::_M_needs_ok_check): Define
+ 	(__formatter_chrono::_M_parse): Set _M_needs_ok_check.
+ 	(__formatter_chrono::_M_check_ok): Check values also for debug mode,
+ 	and return __string_view.
+ 	(__formatter_chrono::_M_format_to): Handle results of _M_check_ok.
+ 	(__formatter_chrono::_M_wi, __formatter_chrono::_M_a_A)
+ 	(__formatter_chrono::_M_b_B, __formatter_chrono::_M_C_y_Y)
+ 	(__formatter_chrono::_M_d_e, __formatter_chrono::_M_F):
+ 	Removed handling of _M_debug.
+ 	(__formatter_chrono::__M_m): Print zero unpadded in _M_debug mode.
+ 	(__formatter_duration::_S_spec_for): Remove _M_time_point refernce.
+ 	(__formatter_duration::_M_parse): Override _M_needs_ok_check.
+ 	* testsuite/std/time/month/io.cc: Test for localized !ok() values.
+ 	* testsuite/std/time/weekday/io.cc: Test for localized !ok() values.
+ 
+ 2025-07-18  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/121150
+ 	* testsuite/20_util/hash/int128.cc: Cast expected values to
+ 	size_t.
+ 
+ 2025-07-18  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/unicode.h (_Utf_iterator::operator--): Reorder
+ 	conditions and update position after reading a code unit.
+ 	(_Utf_iterator::_M_read_reverse): Define.
+ 	(_Utf_iterator::_M_read_utf8): Return extracted code point.
+ 	(_Utf_iterator::_M_read_reverse_utf8): Define.
+ 	(_Utf_iterator::_M_read_reverse_utf16): Define.
+ 	(_Utf_iterator::_M_read_reverse_utf32): Define.
+ 	* testsuite/ext/unicode/view.cc: Add checks for reversed views
+ 	and reverse iteration.
+ 
+ 2025-07-18  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/unicode.h (_Utf_iterator): Reorder data members
+ 	to be more compact.
+ 
+ 2025-07-18  Jonathan Wakely  <jwakely@redhat.com>
+ 	    Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/119137
+ 	* doc/doxygen/user.cfg.in (INPUT): Add new header.
+ 	* include/Makefile.am: Add new header.
+ 	* include/Makefile.in: Regenerate.
+ 	* include/bits/stl_iterator_base_types.h (__any_input_iterator):
+ 	Define.
+ 	* include/bits/version.def (inplace_vector): Define.
+ 	* include/bits/version.h: Regenerate.
+ 	* include/precompiled/stdc++.h: Include new header.
+ 	* src/c++23/std.cc.in: Export contents if new header.
+ 	* include/std/inplace_vector: New file.
+ 	* testsuite/23_containers/inplace_vector/access/capacity.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/access/elem.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/access/elem_neg.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/cons/1.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/cons/from_range.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/cons/throws.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/copy.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/erasure.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/modifiers/assign.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/modifiers/erase.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc:
+ 	New file.
+ 	* testsuite/23_containers/inplace_vector/modifiers/single_insert.cc:
+ 	New file.
+ 	* testsuite/23_containers/inplace_vector/move.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/relops.cc: New file.
+ 	* testsuite/23_containers/inplace_vector/version.cc: New file.
+ 	* testsuite/util/testsuite_iterators.h (input_iterator_wrapper::base):
+ 	Define.
+ 
+ 2025-07-17  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/96710
+ 	* doc/xml/manual/evolution.xml: Document change or __int128.
+ 	* doc/html/manual/api.html: Regenerate.
+ 
+ 2025-07-17  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	PR libstdc++/121061
+ 	* include/std/mdspan (extents::extents): Perform conversion to
+ 	index_type of an r-value reference.
+ 	(layout_left::mapping::operator()): Ditto.
+ 	(layout_right::mapping::operator()): Ditto.
+ 	(layout_stride::mapping::operator()): Ditto.
+ 	* testsuite/23_containers/mdspan/extents/custom_integer.cc: Add
+ 	tests for RValueInt and MutatingInt.
+ 	* testsuite/23_containers/mdspan/int_like.h (RValueInt): Add.
+ 	* testsuite/23_containers/mdspan/layouts/mapping.cc: Test with
+ 	RValueInt.
+ 	* testsuite/23_containers/mdspan/mdspan.cc: Ditto.
+ 
+ 2025-07-17  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	PR libstdc++/121061
+ 	* include/std/mdspan (extents::extents): Fix constraint to
+ 	prevent non-const conversion to index_type.
+ 	(layout_stride::mapping::mapping): Ditto.
+ 	(mdspan::mdspan): Ditto.
+ 	(mdspan::operator[]): Ditto.
+ 	* testsuite/23_containers/mdspan/extents/custom_integer.cc: Add
+ 	test for MutatingInt.
+ 	* testsuite/23_containers/mdspan/int_like.h (MutatingInt): Add.
+ 	* testsuite/23_containers/mdspan/layouts/mapping.cc: Add test for
+ 	MutatingInt.
+ 	* testsuite/23_containers/mdspan/layouts/stride.cc: Ditto.
+ 	* testsuite/23_containers/mdspan/mdspan.cc: Ditto.
+ 
+ 2025-07-17  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	PR libstdc++/121061
+ 	* testsuite/23_containers/mdspan/extents/custom_integer.cc:
+ 	Enable checking with different custom integers. Improve
+ 	checking non-existence of overloads for incompatible custom
+ 	integers.
+ 	* testsuite/23_containers/mdspan/layouts/mapping.cc: ditto. Also
+ 	improve reuse of int_like.h.
+ 	* testsuite/23_containers/mdspan/layouts/stride.cc: ditto.
+ 	* testsuite/23_containers/mdspan/mdspan.cc: ditto.
+ 	* testsuite/23_containers/mdspan/extents/int_like.h: Rename (old
+ 	name).
+ 	* testsuite/23_containers/mdspan/int_like.h: Rename (new name).
+ 	(ThrowingInt): Add.
+ 	(NotIntLike): Add.
+ 
+ 2025-07-17  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/unicode.h (__unicode::_Utf_iterator): Add
+ 	comments.
+ 	(__unicode:_Utf_iterator::operator++()): Check whether to
+ 	iterate over the buffer first.
+ 
+ 2025-07-17  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/121097
+ 	* include/c_global/cmath (hypot): Use __promote_3 instead of
+ 	__promoted.
+ 
+ 2025-07-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/bitset (__bitset::__string) [__cpp_lib_bitset]:
+ 	Change alias to refer to basic_string_view instead.
+ 
+ 2025-07-16  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/121114
+ 	* include/bits/version.def (constexpr_exceptions): Add no_stdname
+ 	and changed value.
+ 	* include/bits/version.h: Regenerated.
+ 	* testsuite/18_support/exception/version.cc: Test that macro is
+ 	not exported.
+ 
+ 2025-07-15  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/move.h (swap): Replace enable_if with concepts
+ 	when available, and with __enable_if_t alias otherwise.
+ 
+ 2025-07-15  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/ranges_base.h (ranges::advance(i, n, bound)):
+ 	Ensure that observable side effects on iterators match what is
+ 	specified in the standard.
+ 
+ 2025-07-15  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/119962
+ 	* include/std/ranges (join_view::_Iterator::_M_outer): Initialize.
+ 	(lazy_split_view::_OuterIter::_M_current): Initialize.
+ 	(join_with_view::_Iterator::_M_outer_it): Initialize.
+ 	* testsuite/std/ranges/adaptors/join.cc (test15): New test.
+ 	* testsuite/std/ranges/adaptors/join_with/1.cc (test05): New test.
+ 	* testsuite/std/ranges/adaptors/lazy_split.cc (test13): New test.
+ 
+ 2025-07-15  Björn Schäpers  <bjoern@hazardy.de>
+ 
+ 	PR libstdc++/108409
+ 	* scripts/gen_windows_zones_map.py: New file, generates
+ 	windows_zones-map.h.
+ 	* src/c++20/windows_zones-map.h: New file, contains the look up
+ 	table.
+ 	* src/c++20/tzdb.cc (tzdb::current_zone): Add Windows code path.
+ 
+ 2025-07-15  Björn Schäpers  <bjoern@hazardy.de>
+ 
+ 	* src/c++20/tzdb.cc (zoneinfo_file): On Windows look relative
+ 	from the DLL path for the time zone information.
+ 
+ 2025-07-15  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/25_algorithms/copy/debug/constexpr_neg.cc:
+ 	* testsuite/25_algorithms/copy_backward/debug/constexpr_neg.cc:
+ 	* testsuite/25_algorithms/equal/debug/constexpr_neg.cc:
+ 	* testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc:
+ 	* testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc:
+ 	* testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc:
+ 	* testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc:
+ 	* testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc:
+ 	* testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc:
+ 
+ 2025-07-15  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/121024
+ 	* include/bits/ranges_uninitialized.h (ranges::destroy): Do not
+ 	optimize away trivial destructors during constant evaluation.
+ 	(ranges::destroy_n): Likewise.
+ 	* testsuite/20_util/specialized_algorithms/destroy/121024.cc:
+ 	New test.
+ 
+ 2025-07-15  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/experimental/memory (swap, make_observer_ptr): Add
+ 	constexpr.
+ 	(operator==, operator!=, operator<, operator>, operator<=)
+ 	(operator>=): Likewise.
+ 	* testsuite/experimental/memory/observer_ptr/make_observer.cc:
+ 	Checks for constant evaluation.
+ 	* testsuite/experimental/memory/observer_ptr/relops/relops.cc:
+ 	Likewise.
+ 	* testsuite/experimental/memory/observer_ptr/swap/swap.cc:
+ 	Likewise.
+ 
+ 2025-07-15  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/type_traits (__make_unsigned_selector): Add
+ 	unsigned __int128 to type list.
+ 	* testsuite/20_util/make_unsigned/int128.cc: New test.
+ 
+ 2025-07-15  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/96710
+ 	* include/bits/functional_hash.h (hash<__int128>): Define for
+ 	strict modes.
+ 	(hash<unsigned __int128>): Likewise.
+ 	* testsuite/20_util/hash/int128.cc: New test.
+ 
+ 2025-07-15  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/110739
+ 	* include/bits/chrono_io.h (__formatter_chrono::_S_weekdays)
+ 	(__formatter_chrono::_S_months, __formatter_chrono::_S_fill_ampm):
+ 	Define.
+ 	(__formatter_chrono::_M_format_to): Do not pass context parameter
+ 	to functions listed below.
+ 	(__formatter_chrono::_M_a_A, __formatter_chrono::_M_b_B): Implement
+ 	using harcoded list of names, and remove format context parameter.
+ 	(__formatter_chrono::_M_p, __formatter_chrono::_M_r): Implement
+ 	using _S_fill_ampm.
+ 	(__formatter_chrono::_M_c): Removed format context parameter.
+ 	(__formatter_chrono::_M_subsecs): Call __ctx.locale() directly,
+ 	instead of _M_locale and do not compare with locale::classic().
+ 	Add [[unlikely]] attributes.
+ 	(__formatter_chrono::_M_locale): Move to __formatter_duration.
+ 	(__formatter_duration::_M_locale): Moved from __formatter_chrono.
+ 
+ 2025-07-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/stl_pair.h (swap): Add comment to deleted
+ 	overload.
+ 	* include/bits/unique_ptr.h (swap): Likewise.
+ 	* include/std/array (swap): Likewise.
+ 	* include/std/optional (swap): Likewise.
+ 	* include/std/tuple (swap): Likewise.
+ 	* include/std/variant (swap): Likewise.
+ 	* testsuite/23_containers/array/tuple_interface/get_neg.cc:
+ 	Adjust dg-error line numbers.
+ 
+ 2025-07-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/pstl/algorithm_impl.h (__for_each_n_it_serial):
+ 	Protect against overloaded comma operator.
+ 	(__brick_walk2): Likewise.
+ 	(__brick_walk2_n): Likewise.
+ 	(__brick_walk3): Likewise.
+ 	(__brick_move_destroy::operator()): Likewise.
+ 	(__brick_calc_mask_1): Likewise.
+ 	(__brick_copy_by_mask): Likewise.
+ 	(__brick_partition_by_mask): Likewise.
+ 	(__brick_calc_mask_2): Likewise.
+ 	(__brick_reverse): Likewise.
+ 	(__pattern_partial_sort_copy): Likewise.
+ 	* include/pstl/memory_impl.h (__brick_uninitialized_move):
+ 	Likewise.
+ 	(__brick_uninitialized_copy): Likewise.
+ 	* include/pstl/numeric_impl.h (__brick_transform_scan):
+ 	Likewise.
+ 
+ 2025-07-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/117785
+ 	* include/bits/version.def (constexpr_exceptions): Define
+ 	correct value.
+ 	* include/bits/version.h: Regenerate.
+ 	* libsupc++/exception: Check correct value.
+ 	* testsuite/18_support/exception/version.cc: New test.
+ 
+ 2025-07-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* libsupc++/exception_ptr.h (make_exception_ptr): Return null
+ 	for consteval when -fno-exceptions is used.
+ 	(exception_ptr_cast): Likewise. Allow consteval path to work
+ 	with -fno-rtti.
+ 
  2025-07-11  Jakub Jelinek  <jakub@redhat.com>
  
  	* libsupc++/exception_ptr.h: Implement C++26 P3748R0 - Inspecting
diff -Nrcpad gcc-16-20250713/libstdc++-v3/doc/doxygen/user.cfg.in gcc-16-20250720/libstdc++-v3/doc/doxygen/user.cfg.in
*** gcc-16-20250713/libstdc++-v3/doc/doxygen/user.cfg.in	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/doc/doxygen/user.cfg.in	Sun Jul 20 22:32:36 2025
*************** INPUT                  = @srcdir@/doc/do
*** 869,874 ****
--- 869,875 ----
                           include/functional \
                           include/future \
                           include/generator \
+                          include/inplace_vector \
                           include/iomanip \
                           include/ios \
                           include/iosfwd \
diff -Nrcpad gcc-16-20250713/libstdc++-v3/doc/html/manual/api.html gcc-16-20250720/libstdc++-v3/doc/html/manual/api.html
*** gcc-16-20250713/libstdc++-v3/doc/html/manual/api.html	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/doc/html/manual/api.html	Sun Jul 20 22:32:36 2025
*************** Nested <code class="code">result_type</c
*** 512,515 ****
--- 512,518 ----
  </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_16"></a><code class="constant">16</code></h3></div></div></div><p>
  Deprecated the non-standard overload of <code class="code">std::fabs</code> for
  <code class="code">std::complex</code> arguments.
+ </p><p>
+ Made <code class="code">std::is_integral_v&lt;__int128&gt;</code> true for strict
+ <code class="code">-std</code> dialects.
  </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
diff -Nrcpad gcc-16-20250713/libstdc++-v3/doc/html/manual/appendix_contributing.html gcc-16-20250720/libstdc++-v3/doc/html/manual/appendix_contributing.html
*** gcc-16-20250713/libstdc++-v3/doc/html/manual/appendix_contributing.html	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/doc/html/manual/appendix_contributing.html	Sun Jul 20 22:32:36 2025
***************
*** 60,72 ****
        this question would be appreciated.
      </p><p>
        Please contact
-       Paolo Carlini at <code class="email">&lt;<a class="email" href="mailto:paolo.carlini@oracle.com">paolo.carlini@oracle.com</a>&gt;</code>
-       or
        Jonathan Wakely at <code class="email">&lt;<a class="email" href="mailto:jwakely+assign@redhat.com">jwakely+assign@redhat.com</a>&gt;</code>
        if you are confused about the assignment or have general licensing
        questions. When requesting an assignment form from
        <code class="email">&lt;<a class="email" href="mailto:assign@gnu.org">assign@gnu.org</a>&gt;</code>, please CC the libstdc++
!       maintainers above so that progress can be monitored.
      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="list.getting"></a>Getting Sources</h3></div></div></div><p>
        <a class="link" href="https://gcc.gnu.org/gitwrite.html" target="_top">Getting write access
  	(look for "Write after approval")</a>
--- 60,70 ----
        this question would be appreciated.
      </p><p>
        Please contact
        Jonathan Wakely at <code class="email">&lt;<a class="email" href="mailto:jwakely+assign@redhat.com">jwakely+assign@redhat.com</a>&gt;</code>
        if you are confused about the assignment or have general licensing
        questions. When requesting an assignment form from
        <code class="email">&lt;<a class="email" href="mailto:assign@gnu.org">assign@gnu.org</a>&gt;</code>, please CC the libstdc++
!       maintainer above so that progress can be monitored.
      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="list.getting"></a>Getting Sources</h3></div></div></div><p>
        <a class="link" href="https://gcc.gnu.org/gitwrite.html" target="_top">Getting write access
  	(look for "Write after approval")</a>
diff -Nrcpad gcc-16-20250713/libstdc++-v3/doc/html/manual/appendix_porting.html gcc-16-20250720/libstdc++-v3/doc/html/manual/appendix_porting.html
*** gcc-16-20250713/libstdc++-v3/doc/html/manual/appendix_porting.html	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/doc/html/manual/appendix_porting.html	Sun Jul 20 22:32:36 2025
*************** baseline file.
*** 497,500 ****
--- 497,507 ----
     See <a class="xref" href="configure.html" title="Configure">Configuring</a> for the
     <code class="code">--with-libstdcxx-zoneinfo</code> option that determines whether
     this file is used.
+    </p></li><li class="listitem"><p>
+    The header file
+    <code class="filename">src/c++20/windows_zones-map.h</code>
+    is generated by the Python script
+    <code class="filename">scripts/gen_windows_zones_map.py</code>
+    using the XML file <a class="link" href="https://github.com/unicode-org/cldr/blob/main/common/supplemental/windowsZones.xml" target="_top">https://github.com/unicode-org/cldr/blob/main/common/supplemental/windowsZones.xml</a>
+    from the Unicode CLDR Project.
     </p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Notes </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Writing and Generating Documentation</td></tr></table></div></body></html>
\ No newline at end of file
diff -Nrcpad gcc-16-20250713/libstdc++-v3/doc/xml/manual/appendix_contributing.xml gcc-16-20250720/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
*** gcc-16-20250713/libstdc++-v3/doc/xml/manual/appendix_contributing.xml	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/doc/xml/manual/appendix_contributing.xml	Sun Jul 20 22:32:36 2025
***************
*** 113,125 ****
  
      <para>
        Please contact
-       Paolo Carlini at <email>paolo.carlini@oracle.com</email>
-       or
        Jonathan Wakely at <email>jwakely+assign@redhat.com</email>
        if you are confused about the assignment or have general licensing
        questions. When requesting an assignment form from
        <email>assign@gnu.org</email>, please CC the libstdc++
!       maintainers above so that progress can be monitored.
      </para>
    </section>
  
--- 113,123 ----
  
      <para>
        Please contact
        Jonathan Wakely at <email>jwakely+assign@redhat.com</email>
        if you are confused about the assignment or have general licensing
        questions. When requesting an assignment form from
        <email>assign@gnu.org</email>, please CC the libstdc++
!       maintainer above so that progress can be monitored.
      </para>
    </section>
  
diff -Nrcpad gcc-16-20250713/libstdc++-v3/doc/xml/manual/build_hacking.xml gcc-16-20250720/libstdc++-v3/doc/xml/manual/build_hacking.xml
*** gcc-16-20250713/libstdc++-v3/doc/xml/manual/build_hacking.xml	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/doc/xml/manual/build_hacking.xml	Sun Jul 20 22:32:36 2025
*************** baseline file.
*** 742,747 ****
--- 742,758 ----
     this file is used.
     </para>
   </listitem>
+  <listitem>
+    <para>
+    The header file
+    <filename class="headerfile">src/c++20/windows_zones-map.h</filename>
+    is generated by the Python script
+    <filename>scripts/gen_windows_zones_map.py</filename>
+    using the XML file <link xmlns:xlink="http://www.w3.org/1999/xlink"
+      xlink:href="https://github.com/unicode-org/cldr/blob/main/common/supplemental/windowsZones.xml"/>
+    from the Unicode CLDR Project.
+    </para>
+  </listitem>
  </itemizedlist>
  
  </section> <!-- Generated files -->
diff -Nrcpad gcc-16-20250713/libstdc++-v3/doc/xml/manual/evolution.xml gcc-16-20250720/libstdc++-v3/doc/xml/manual/evolution.xml
*** gcc-16-20250713/libstdc++-v3/doc/xml/manual/evolution.xml	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/doc/xml/manual/evolution.xml	Sun Jul 20 22:32:36 2025
*************** Nested <code>result_type</code> and <cod
*** 1157,1162 ****
--- 1157,1167 ----
  Deprecated the non-standard overload of <code>std::fabs</code> for
  <code>std::complex</code> arguments.
  </para>
+ 
+ <para>
+ Made <code>std::is_integral_v&lt;__int128&gt;</code> true for strict
+ <code>-std</code> dialects.
+ </para>
  </section>
  
  </section>
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/Makefile.am gcc-16-20250720/libstdc++-v3/include/Makefile.am
*** gcc-16-20250713/libstdc++-v3/include/Makefile.am	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/Makefile.am	Sun Jul 20 22:32:36 2025
*************** std_headers = \
*** 77,82 ****
--- 77,83 ----
  	${std_srcdir}/forward_list \
  	${std_srcdir}/fstream \
  	${std_srcdir}/future \
+ 	${std_srcdir}/inplace_vector \
  	${std_srcdir}/iomanip \
  	${std_srcdir}/ios \
  	${std_srcdir}/iosfwd \
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/Makefile.in gcc-16-20250720/libstdc++-v3/include/Makefile.in
*** gcc-16-20250713/libstdc++-v3/include/Makefile.in	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/Makefile.in	Sun Jul 20 22:32:36 2025
*************** std_freestanding = \
*** 433,438 ****
--- 433,439 ----
  @GLIBCXX_HOSTED_TRUE@	${std_srcdir}/forward_list \
  @GLIBCXX_HOSTED_TRUE@	${std_srcdir}/fstream \
  @GLIBCXX_HOSTED_TRUE@	${std_srcdir}/future \
+ @GLIBCXX_HOSTED_TRUE@	${std_srcdir}/inplace_vector \
  @GLIBCXX_HOSTED_TRUE@	${std_srcdir}/iomanip \
  @GLIBCXX_HOSTED_TRUE@	${std_srcdir}/ios \
  @GLIBCXX_HOSTED_TRUE@	${std_srcdir}/iosfwd \
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/bits/chrono_io.h gcc-16-20250720/libstdc++-v3/include/bits/chrono_io.h
*** gcc-16-20250713/libstdc++-v3/include/bits/chrono_io.h	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/bits/chrono_io.h	Sun Jul 20 22:32:36 2025
*************** namespace __format
*** 280,287 ****
        // in the format-spec, e.g. "{:L%a}" is localized and locale-specific,
        // but "{:L}" is only localized and "{:%a}" is only locale-specific.
        unsigned _M_locale_specific : 1;
!       // Indicates that we are handling time_point.
!       unsigned _M_time_point : 1;
        // Indicates that duration should be treated as floating point.
        unsigned _M_floating_point_rep : 1;
        // Indicate that duration uses user-defined representation.
--- 280,288 ----
        // in the format-spec, e.g. "{:L%a}" is localized and locale-specific,
        // but "{:L}" is only localized and "{:%a}" is only locale-specific.
        unsigned _M_locale_specific : 1;
!       // Indicates if parts that are checked for ok come directly from the
!       // input, instead of being computed.
!       unsigned _M_needs_ok_check : 1;
        // Indicates that duration should be treated as floating point.
        unsigned _M_floating_point_rep : 1;
        // Indicate that duration uses user-defined representation.
*************** namespace __format
*** 570,576 ****
  
  	  _ChronoSpec<_CharT> __spec = __def;
  
! 	  auto __finalize = [this, &__spec] {
  	    _M_spec = __spec;
  	  };
  
--- 571,585 ----
  
  	  _ChronoSpec<_CharT> __spec = __def;
  
! 	  auto __finalize = [this, &__spec, &__def] {
! 	    using enum _ChronoParts;
!             _ChronoParts __checked 
! 	      = __spec._M_debug ? _YearMonthDay|_IndexedWeekday
! 	                        : _Month|_Weekday;
! 	    // n.b. for calendar types __def._M_needed contains only parts
! 	    // copied from the input, remaining ones are computed, and thus ok
! 	    __spec._M_needs_ok_check 
! 	      = __spec._M_needs(__def._M_needed & __checked);
  	    _M_spec = __spec;
  	  };
  
*************** namespace __format
*** 821,830 ****
  	    __throw_format_error("chrono format error: unescaped '%' in "
  				 "chrono-specs");
  
! 	  _M_spec = __spec;
! 	  _M_spec._M_chrono_specs
! 		 = __string_view(__chrono_specs, __first - __chrono_specs);
  
  	  return __first;
  	}
  
--- 830,839 ----
  	    __throw_format_error("chrono format error: unescaped '%' in "
  				 "chrono-specs");
  
! 	  __spec._M_chrono_specs
! 	    = __string_view(__chrono_specs, __first - __chrono_specs);
  
+ 	  __finalize();
  	  return __first;
  	}
  
*************** namespace __format
*** 881,896 ****
        _S_empty_fs()
        { return _Runtime_format_string<_CharT>(_S_empty_spec); }
  
!       // Return the formatting locale.
!       template<typename _FormatContext>
! 	std::locale
! 	_M_locale(_FormatContext& __fc) const
! 	{
! 	  if (!_M_spec._M_localized)
! 	    return std::locale::classic();
! 	  else
! 	    return __fc.locale();
! 	}
  
      private:
        template<typename _OutIter>
--- 890,921 ----
        _S_empty_fs()
        { return _Runtime_format_string<_CharT>(_S_empty_spec); }
  
!       static constexpr const _CharT* _S_weekdays[]
!       {
! 	_GLIBCXX_WIDEN("Sunday"),
! 	_GLIBCXX_WIDEN("Monday"),
! 	_GLIBCXX_WIDEN("Tuesday"),
! 	_GLIBCXX_WIDEN("Wednesday"),
! 	_GLIBCXX_WIDEN("Thursday"),
! 	_GLIBCXX_WIDEN("Friday"),
! 	_GLIBCXX_WIDEN("Saturday"),
!       };
! 
!       static constexpr const _CharT* _S_months[]
!       {
! 	_GLIBCXX_WIDEN("January"),
! 	_GLIBCXX_WIDEN("February"),
! 	_GLIBCXX_WIDEN("March"),
! 	_GLIBCXX_WIDEN("April"),
! 	_GLIBCXX_WIDEN("May"),
! 	_GLIBCXX_WIDEN("June"),
! 	_GLIBCXX_WIDEN("July"),
! 	_GLIBCXX_WIDEN("August"),
! 	_GLIBCXX_WIDEN("September"),
! 	_GLIBCXX_WIDEN("October"),
! 	_GLIBCXX_WIDEN("November"),
! 	_GLIBCXX_WIDEN("December"),
!       };
  
      private:
        template<typename _OutIter>
*************** namespace __format
*** 956,985 ****
  	  return __out;
  	}
  
!       void
!       _M_check_ok(const _ChronoData<_CharT>& __t, _CharT __conv) const
        {
! 	// n.b. for time point all date parts are computed, so
! 	// they are always ok.
! 	if (_M_spec._M_time_point || _M_spec._M_debug)
! 	  return;
  
  	switch (__conv)
  	{
  	case 'a':
  	case 'A':
  	  if (!__t._M_weekday.ok()) [[unlikely]]
! 	    __throw_format_error("format error: invalid weekday");
! 	  return;
  	case 'b':
  	case 'h':
  	case 'B':
  	  if (!__t._M_month.ok()) [[unlikely]]
! 	    __throw_format_error("format error: invalid month");
! 	  return;
  	default:
! 	  return;
  	}
        }
  
        template<typename _OutIter, typename _FormatContext>
--- 981,1051 ----
  	  return __out;
  	}
  
!       __string_view
!       _M_check_ok(const _ChronoData<_CharT>& __t, _CharT& __conv) const
        {
! 	if (!_M_spec._M_debug)
! 	  {
! 	    switch (__conv)
! 	    {
! 	    case 'a':
! 	    case 'A':
! 	      if (!__t._M_weekday.ok()) [[unlikely]]
! 		__throw_format_error("format error: invalid weekday");
! 	      break;
! 	    case 'b':
! 	    case 'h':
! 	    case 'B':
! 	      if (!__t._M_month.ok()) [[unlikely]]
! 		__throw_format_error("format error: invalid month");
! 	      break;
! 	    default:
! 	      break;
! 	    }
! 	    return __string_view();
! 	  }
  
  	switch (__conv)
  	{
+ 	// %\0 is extension for handling weekday index
+ 	case '\0':
+ 	  if (__t._M_weekday_index < 1 || __t._M_weekday_index > 5) [[unlikely]]
+ 	    return _GLIBCXX_WIDEN("index");
+ 	  break;
  	case 'a':
  	case 'A':
  	  if (!__t._M_weekday.ok()) [[unlikely]]
! 	    {
! 	      __conv = 'w'; // print as decimal number
! 	      return _GLIBCXX_WIDEN("weekday");
! 	    }
! 	  break;
  	case 'b':
  	case 'h':
  	case 'B':
  	  if (!__t._M_month.ok()) [[unlikely]]
! 	    {
! 	      __conv = 'm'; // print as decimal number
! 	      return _GLIBCXX_WIDEN("month");
! 	    }
! 	  break;
! 	case 'd':
! 	case 'e':
! 	  if (!__t._M_day.ok()) [[unlikely]]
! 	    return _GLIBCXX_WIDEN("day");
! 	  break;
! 	case 'F':
! 	  if (!(__t._M_year/__t._M_month/__t._M_day).ok()) [[unlikely]]
! 	    return _GLIBCXX_WIDEN("date");
! 	  break;
! 	case 'Y':
! 	  if (!__t._M_year.ok()) [[unlikely]]
! 	    return _GLIBCXX_WIDEN("year");
! 	  break;
  	default:
! 	  break;
  	}
+ 	return __string_view();
        }
  
        template<typename _OutIter, typename _FormatContext>
*************** namespace __format
*** 1038,1046 ****
  	  do
  	    {
  	      _CharT __c = *__first++;
! 	      _M_check_ok(__t, __c);
  
! 	      if (__use_locale_fmt && _S_localized_spec(__c, __mod)) [[unlikely]]
  		__out = _M_locale_fmt(std::move(__out), __fc.locale(),
  				      __tm, __c, __mod);
  	      else switch (__c)
--- 1104,1115 ----
  	  do
  	    {
  	      _CharT __c = *__first++;
! 	      __string_view __invalid;
! 	      if (_M_spec._M_needs_ok_check)
! 		__invalid = _M_check_ok(__t, __c);
  
! 	      if (__invalid.empty() &&__use_locale_fmt
! 		    && _S_localized_spec(__c, __mod)) [[unlikely]]
  		__out = _M_locale_fmt(std::move(__out), __fc.locale(),
  				      __tm, __c, __mod);
  	      else switch (__c)
*************** namespace __format
*** 1051,1065 ****
  		  break;
  		case 'a':
  		case 'A':
! 		  __out = _M_a_A(__t._M_weekday, std::move(__out), __fc, __c == 'A');
  		  break;
  		case 'b':
  		case 'h':
  		case 'B':
! 		  __out = _M_b_B(__t._M_month, std::move(__out), __fc, __c == 'B');
  		  break;
  		case 'c':
! 		  __out = _M_c(__t, std::move(__out), __fc);
  		  break;
  		case 'C':
  		case 'y':
--- 1120,1134 ----
  		  break;
  		case 'a':
  		case 'A':
! 		  __out = _M_a_A(__t._M_weekday, std::move(__out), __c == 'A');
  		  break;
  		case 'b':
  		case 'h':
  		case 'B':
! 		  __out = _M_b_B(__t._M_month, std::move(__out), __c == 'B');
  		  break;
  		case 'c':
! 		  __out = _M_c(__t, std::move(__out));
  		  break;
  		case 'C':
  		case 'y':
*************** namespace __format
*** 1095,1101 ****
  		  __out = _M_M(__t._M_minutes, __print_sign());
  		  break;
  		case 'p':
! 		  __out = _M_p(__t._M_hours, std::move(__out), __fc);
  		  break;
  		case 'q':
  		  __out = _M_q(__t._M_unit_suffix, std::move(__out));
--- 1164,1170 ----
  		  __out = _M_M(__t._M_minutes, __print_sign());
  		  break;
  		case 'p':
! 		  __out = _M_p(__t._M_hours, std::move(__out));
  		  break;
  		case 'q':
  		  __out = _M_q(__t._M_unit_suffix, std::move(__out));
*************** namespace __format
*** 1104,1110 ****
  		  __out = _M_Q(__t, __print_sign(), __fc);
  		  break;
  		case 'r':
! 		  __out = _M_r(__t, __print_sign(), __fc);
  		  break;
  		case 'R':
  		case 'X':
--- 1173,1179 ----
  		  __out = _M_Q(__t, __print_sign(), __fc);
  		  break;
  		case 'r':
! 		  __out = _M_r(__t, __print_sign());
  		  break;
  		case 'R':
  		case 'X':
*************** namespace __format
*** 1148,1153 ****
--- 1217,1230 ----
  		  __first = __last;
  		  break;
  		}
+ 
+ 	      if (!__invalid.empty())
+ 		{
+ 		  constexpr __string_view __pref = _GLIBCXX_WIDEN(" is not a valid ");
+ 		  __out = __format::__write(std::move(__out), __pref);
+ 		  __out = __format::__write(std::move(__out), __invalid);
+ 		}
+ 
  	      __mod = _CharT();
  	      // Scan for next '%' and write out everything before it.
  	      __string_view __str(__first, __last - __first);
*************** namespace __format
*** 1177,1253 ****
  	  // %\0 Extension to format weekday index, used only by empty format spec
  	  _CharT __buf[3];
  	  __out = __format::__write(std::move(__out), _S_str_d1(__buf, __wi));
- 	  if (_M_spec._M_debug && (__wi < 1 || __wi > 5))
- 	    __out = __format::__write(std::move(__out),
- 		      __string_view(_GLIBCXX_WIDEN(" is not a valid index")));
  	  return std::move(__out);
  	}
  
!       template<typename _OutIter, typename _FormatContext>
  	_OutIter
! 	_M_a_A(chrono::weekday __wd, _OutIter __out,
! 	       _FormatContext& __ctx, bool __full) const
  	{
  	  // %a Locale's abbreviated weekday name.
  	  // %A Locale's full weekday name.
! 	  if (_M_spec._M_debug && !__wd.ok())
! 	    {
! 	      _CharT __buf[3];
! 	      __out = __format::__write(std::move(__out),
! 					_S_str_d1(__buf, __wd.c_encoding()));
! 	      return __format::__write(std::move(__out),
! 			__string_view(_GLIBCXX_WIDEN(" is not a valid weekday")));
! 	    }
! 
! 	  locale __loc = _M_locale(__ctx);
! 	  const auto& __tp = use_facet<__timepunct<_CharT>>(__loc);
! 	  const _CharT* __days[7];
! 	  if (__full)
! 	    __tp._M_days(__days);
! 	  else
! 	    __tp._M_days_abbreviated(__days);
! 	  __string_view __str(__days[__wd.c_encoding()]);
! 	  return _M_write(std::move(__out), __loc, __str);
  	}
  
!       template<typename _OutIter, typename _FormatContext>
  	_OutIter
! 	_M_b_B(chrono::month __m, _OutIter __out,
! 	       _FormatContext& __ctx, bool __full) const
  	{
  	  // %b Locale's abbreviated month name.
  	  // %B Locale's full month name.
! 	  if (_M_spec._M_debug && !__m.ok())
! 	    {
! 	      _CharT __buf[3];
! 	      __out = __format::__write(std::move(__out),
! 					_S_str_d1(__buf, (unsigned)__m));
! 	      return __format::__write(std::move(__out),
! 			__string_view(_GLIBCXX_WIDEN(" is not a valid month")));
! 	    }
! 
! 	  locale __loc = _M_locale(__ctx);
! 	  const auto& __tp = use_facet<__timepunct<_CharT>>(__loc);
! 	  const _CharT* __months[12];
! 	  if (__full)
! 	    __tp._M_months(__months);
! 	  else
! 	    __tp._M_months_abbreviated(__months);
! 	  __string_view __str(__months[(unsigned)__m - 1]);
! 	  return _M_write(std::move(__out), __loc, __str);
  	}
  
!       template<typename _OutIter, typename _FormatContext>
  	_OutIter
! 	_M_c(const _ChronoData<_CharT>& __t, _OutIter __out,
! 	     _FormatContext& __ctx) const
  	{
  	  // %c  Locale's date and time representation, for C-locale: %a %b %e %T %Y
  	  // %Ec Locale's alternate date and time representation, for C-locale same as above
  
! 	  __out = _M_a_A(__t._M_weekday, std::move(__out), __ctx, false);
  	  *__out = _S_space;
! 	  __out = _M_b_B(__t._M_month, std::move(++__out), __ctx, false);
  	  *__out = _S_space;
  	  __out = _M_d_e(__t._M_day, std::move(++__out), 'e');
  	  *__out = _S_space;
--- 1254,1296 ----
  	  // %\0 Extension to format weekday index, used only by empty format spec
  	  _CharT __buf[3];
  	  __out = __format::__write(std::move(__out), _S_str_d1(__buf, __wi));
  	  return std::move(__out);
  	}
  
!       template<typename _OutIter>
  	_OutIter
! 	_M_a_A(chrono::weekday __wd, _OutIter __out, bool __full) const
  	{
  	  // %a Locale's abbreviated weekday name.
  	  // %A Locale's full weekday name.
! 	  __string_view __str = _S_weekdays[__wd.c_encoding()];
! 	  if (!__full)
! 	    __str = __str.substr(0, 3);
! 	  return __format::__write(std::move(__out), __str);
  	}
  
!       template<typename _OutIter>
  	_OutIter
! 	_M_b_B(chrono::month __m, _OutIter __out, bool __full) const
  	{
  	  // %b Locale's abbreviated month name.
  	  // %B Locale's full month name.
! 	  __string_view __str = _S_months[(unsigned)__m - 1];
! 	  if (!__full)
! 	    __str = __str.substr(0, 3);
! 	  return __format::__write(std::move(__out), __str);
  	}
  
!       template<typename _OutIter>
  	_OutIter
! 	_M_c(const _ChronoData<_CharT>& __t, _OutIter __out) const
  	{
  	  // %c  Locale's date and time representation, for C-locale: %a %b %e %T %Y
  	  // %Ec Locale's alternate date and time representation, for C-locale same as above
  
! 	  __out = _M_a_A(__t._M_weekday, std::move(__out), false);
  	  *__out = _S_space;
! 	  __out = _M_b_B(__t._M_month, std::move(++__out), false);
  	  *__out = _S_space;
  	  __out = _M_d_e(__t._M_day, std::move(++__out), 'e');
  	  *__out = _S_space;
*************** namespace __format
*** 1300,1309 ****
  		}
  	      __out = __format::__write(std::move(__out), __sv);
  	    }
- 
- 	  if (_M_spec._M_debug && __conv == 'Y' && !__y.ok()) [[unlikely]]
- 	    __out = __format::__write(std::move(__out),
- 		      __string_view(_GLIBCXX_WIDEN(" is not a valid year")));
  	  return __out;
  	}
  
--- 1343,1348 ----
*************** namespace __format
*** 1362,1370 ****
  	    }
  
  	  __out = __format::__write(std::move(__out), __sv);
- 	  if (_M_spec._M_debug && !__d.ok()) [[unlikely]]
- 	    __out = __format::__write(std::move(__out),
- 		      __string_view(_GLIBCXX_WIDEN(" is not a valid day")));
  	  return std::move(__out);
  	}
  
--- 1401,1406 ----
*************** namespace __format
*** 1401,1409 ****
  	      __out = __format::__write(std::move(__out), __sv);
  	    }
  
- 	  if (_M_spec._M_debug && !(__t._M_year/__t._M_month/__t._M_day).ok())
- 	    __out = __format::__write(std::move(__out),
- 		      __string_view(_GLIBCXX_WIDEN(" is not a valid date")));
  	  return std::move(__out);
  	}
  
--- 1437,1442 ----
*************** namespace __format
*** 1471,1478 ****
  	{
  	  // %m  month as a decimal number.
  	  // %Om Locale's alternative representation.
- 
  	  auto __i = (unsigned)__m;
  
  	  _CharT __buf[3];
  	  return __format::__write(std::move(__out), _S_str_d2(__buf, __i));
--- 1504,1513 ----
  	{
  	  // %m  month as a decimal number.
  	  // %Om Locale's alternative representation.
  	  auto __i = (unsigned)__m;
+ 	  if (__i == 0 && _M_spec._M_debug) [[unlikely]]
+ 	    // 0 should not be padded to two digits
+ 	    return __format::__write(std::move(__out), _S_digit(0));
  
  	  _CharT __buf[3];
  	  return __format::__write(std::move(__out), _S_str_d2(__buf, __i));
*************** namespace __format
*** 1489,1508 ****
  	  return __format::__write(std::move(__out), _S_two_digits(__i));
  	}
  
!       template<typename _OutIter, typename _FormatContext>
  	_OutIter
! 	_M_p(chrono::hours __h, _OutIter __out, _FormatContext& __ctx) const
  	{
  	  // %p The locale's equivalent of the AM/PM designations.
- 	  auto __hi =  __h.count();
- 	  if (__hi >= 24) [[unlikely]]
- 	    __hi %= 24;
  
! 	  locale __loc = _M_locale(__ctx);
! 	  const auto& __tp = use_facet<__timepunct<_CharT>>(__loc);
! 	  const _CharT* __ampm[2];
! 	  __tp._M_am_pm(__ampm);
! 	  return _M_write(std::move(__out), __loc, __ampm[__hi >= 12]);
  	}
  
        template<typename _OutIter>
--- 1524,1538 ----
  	  return __format::__write(std::move(__out), _S_two_digits(__i));
  	}
  
!       template<typename _OutIter>
  	_OutIter
! 	_M_p(chrono::hours __h, _OutIter __out) const
  	{
  	  // %p The locale's equivalent of the AM/PM designations.
  
! 	  _CharT __buf[2];
! 	  _S_fill_ampm(__buf, __h);
! 	  return __format::__write(std::move(__out), __string_view(__buf, 2));
  	}
  
        template<typename _OutIter>
*************** namespace __format
*** 1522,1548 ****
  	  return std::vformat_to(std::move(__out), _S_empty_spec, __t._M_ereps);
  	}
  
!       template<typename _OutIter, typename _FormatContext>
  	_OutIter
! 	_M_r(const _ChronoData<_CharT>& __t, _OutIter __out,
! 	     _FormatContext& __ctx) const
  	{
  	  // %r Locale's 12-hour clock time, for C-locale: %I:%M:%S %p
  	  auto __hi = __t._M_hours.count() % 12;
  	  if (__hi == 0)
  	    __hi = 12;
  
! 	  _CharT __buf[9];
  	  __buf[2] = _S_colon;
  	  __buf[5] = _S_colon;
  	  __buf[8] = _S_space;
  	  _S_fill_two_digits(__buf, __hi);
  	  _S_fill_two_digits(__buf + 3, __t._M_minutes.count());
  	  _S_fill_two_digits(__buf + 6, __t._M_seconds.count());
  
! 	  __string_view __sv(__buf, 9);
! 	  __out = __format::__write(std::move(__out), __sv);
! 	  return _M_p(__t._M_hours, std::move(__out), __ctx);
  	}
  
        template<typename _OutIter>
--- 1552,1576 ----
  	  return std::vformat_to(std::move(__out), _S_empty_spec, __t._M_ereps);
  	}
  
!       template<typename _OutIter>
  	_OutIter
! 	_M_r(const _ChronoData<_CharT>& __t, _OutIter __out) const
  	{
  	  // %r Locale's 12-hour clock time, for C-locale: %I:%M:%S %p
  	  auto __hi = __t._M_hours.count() % 12;
  	  if (__hi == 0)
  	    __hi = 12;
  
! 	  _CharT __buf[11];
  	  __buf[2] = _S_colon;
  	  __buf[5] = _S_colon;
  	  __buf[8] = _S_space;
  	  _S_fill_two_digits(__buf, __hi);
  	  _S_fill_two_digits(__buf + 3, __t._M_minutes.count());
  	  _S_fill_two_digits(__buf + 6, __t._M_seconds.count());
+ 	  _S_fill_ampm(__buf + 9, __t._M_hours);
  
! 	  return __format::__write(std::move(__out), __string_view(__buf, 11));
  	}
  
        template<typename _OutIter>
*************** namespace __format
*** 1606,1614 ****
  	    return __out;
  
  	  _CharT __dot = _S_dot;
! 	  if (_M_spec._M_localized)
! 	    if (auto __loc = __ctx.locale(); __loc != locale::classic())
  	    {
  	      const auto& __np = use_facet<numpunct<_CharT>>(__loc);
  	      __dot = __np.decimal_point();
  	    }
--- 1634,1642 ----
  	    return __out;
  
  	  _CharT __dot = _S_dot;
! 	  if (_M_spec._M_localized) [[unlikely]]
  	    {
+ 	      auto __loc = __ctx.locale();
  	      const auto& __np = use_facet<numpunct<_CharT>>(__loc);
  	      __dot = __np.decimal_point();
  	    }
*************** namespace __format
*** 1618,1625 ****
  	  if (_M_spec._M_floating_point_rep)
  	    {
  	      _Str_sink<_CharT> __sink;
! 	      if (_M_spec._M_localized && _M_spec._M_custom_rep)
! 		 std::vformat_to(__sink.out(), _M_locale(__ctx),
  				 _GLIBCXX_WIDEN("{1:0.{2}Lf}"), __t._M_ereps);
  	      else
  		 std::vformat_to(__sink.out(),
--- 1646,1653 ----
  	  if (_M_spec._M_floating_point_rep)
  	    {
  	      _Str_sink<_CharT> __sink;
! 	      if (_M_spec._M_localized && _M_spec._M_custom_rep) [[unlikely]]
! 		 std::vformat_to(__sink.out(), __ctx.locale(),
  				 _GLIBCXX_WIDEN("{1:0.{2}Lf}"), __t._M_ereps);
  	      else
  		 std::vformat_to(__sink.out(),
*************** namespace __format
*** 1778,1783 ****
--- 1806,1825 ----
  	__buf[1] = __sv[1];
        }
  
+       // Fills __buf[0] and __buf[1] with "AM", "PM" depending on __h.
+       [[__gnu__::__always_inline__]]
+       static void
+       _S_fill_ampm(_CharT* __buf, chrono::hours __h)
+       {
+ 	auto __hi =  __h.count();
+ 	if (__hi >= 24) [[unlikely]]
+ 	  __hi %= 24;
+ 
+ 	constexpr const _CharT* __apm = _GLIBCXX_WIDEN("APM");
+ 	__buf[0] = __apm[__hi >= 12];
+ 	__buf[1] = __apm[2];
+       }
+ 
        // Returns decimal representation of __n.
        // Returned string_view may point to __buf.
        [[__gnu__::__always_inline__]]
*************** namespace __format
*** 1842,1848 ****
  	  using enum _ChronoParts;
  
  	  _ChronoSpec<_CharT> __res{};
- 	  __res._M_time_point = (__parts & _DateTime) == _DateTime;
  	  __res._M_floating_point_rep = chrono::treat_as_floating_point_v<_Rep>;
  	  __res._M_custom_rep = !is_arithmetic_v<_Rep>;
  	  __res._M_prec = chrono::hh_mm_ss<_Duration>::fractional_width;
--- 1884,1889 ----
*************** namespace __format
*** 1879,1885 ****
  	};
  
        using __formatter_chrono<_CharT>::__formatter_chrono;
-       using __formatter_chrono<_CharT>::_M_locale;
        using __formatter_chrono<_CharT>::_M_spec;
  
        template<typename _Duration, typename _ParseContext>
--- 1920,1925 ----
*************** namespace __format
*** 1892,1897 ****
--- 1932,1941 ----
  
  	  auto __res
  	    = __formatter_chrono<_CharT>::_M_parse(__pc, __parts, __def);
+ 	  // n.b. durations do not contain date parts, and for time point all
+ 	  // date parts are computed, and they are always ok.
+ 	  _M_spec._M_needs_ok_check = false;
+ 
  	  // check for custom floating point durations, if digits of output
  	  // will contain subseconds, then formatters must support specifying
  	  // precision.
*************** namespace __format
*** 1909,1914 ****
--- 1953,1969 ----
  	  return __res;
  	}
  
+       // Return the formatting locale.
+       template<typename _FormatContext>
+ 	std::locale
+ 	_M_locale(_FormatContext& __fc) const
+ 	{
+ 	  if (!_M_spec._M_localized)
+ 	    return std::locale::classic();
+ 	  else
+ 	    return __fc.locale();
+ 	}
+ 
        // Format duration for empty chrono-specs, e.g. "{}" (C++20 [time.format] p6).
        template<typename _Rep, typename _Period, typename _FormatContext>
  	typename _FormatContext::iterator
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/bits/functional_hash.h gcc-16-20250720/libstdc++-v3/include/bits/functional_hash.h
*** gcc-16-20250713/libstdc++-v3/include/bits/functional_hash.h	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/bits/functional_hash.h	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 199,204 ****
--- 199,213 ----
    _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_3 unsigned)
  #endif
  
+ #if defined __STRICT_ANSI__ && defined __SIZEOF_INT128__
+   // In strict modes __GLIBCXX_TYPE_INT_N_0 is not defined for __int128,
+   // but we want to always treat signed/unsigned __int128 as integral types.
+   __extension__
+   _Cxx_hashtable_define_trivial_hash(__int128)
+   __extension__
+   _Cxx_hashtable_define_trivial_hash(__int128 unsigned)
+ #endif
+ 
  #undef _Cxx_hashtable_define_trivial_hash
  
    struct _Hash_impl
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/bits/move.h gcc-16-20250720/libstdc++-v3/include/bits/move.h
*** gcc-16-20250713/libstdc++-v3/include/bits/move.h	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/bits/move.h	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 215,228 ****
     *  @return   Nothing.
    */
    template<typename _Tp>
!     _GLIBCXX20_CONSTEXPR
!     inline
! #if __cplusplus >= 201103L
!     typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
! 			      is_move_constructible<_Tp>,
! 			      is_move_assignable<_Tp>>::value>::type
  #else
!     void
  #endif
      swap(_Tp& __a, _Tp& __b)
      _GLIBCXX_NOEXCEPT_IF(__and_<is_nothrow_move_constructible<_Tp>,
--- 215,232 ----
     *  @return   Nothing.
    */
    template<typename _Tp>
! #if __glibcxx_concepts // >= C++20
!     requires (! __is_tuple_like<_Tp>::value)
!       && is_move_constructible_v<_Tp>
!       && is_move_assignable_v<_Tp>
!     constexpr void
! #elif __cplusplus >= 201103L
!     _GLIBCXX20_CONSTEXPR inline
!     __enable_if_t<__and_<__not_<__is_tuple_like<_Tp>>,
! 			 is_move_constructible<_Tp>,
! 			 is_move_assignable<_Tp>>::value>
  #else
!     inline void
  #endif
      swap(_Tp& __a, _Tp& __b)
      _GLIBCXX_NOEXCEPT_IF(__and_<is_nothrow_move_constructible<_Tp>,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 241,252 ****
    // DR 809. std::swap should be overloaded for array types.
    /// Swap the contents of two arrays.
    template<typename _Tp, size_t _Nm>
!     _GLIBCXX20_CONSTEXPR
!     inline
! #if __cplusplus >= 201103L
!     typename enable_if<__is_swappable<_Tp>::value>::type
  #else
!     void
  #endif
      swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
      _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Tp>::value)
--- 245,258 ----
    // DR 809. std::swap should be overloaded for array types.
    /// Swap the contents of two arrays.
    template<typename _Tp, size_t _Nm>
! #if __glibcxx_concepts // >= C++20
!     requires is_swappable_v<_Tp>
!     constexpr void
! #elif __cplusplus >= 201103L
!     _GLIBCXX20_CONSTEXPR inline
!     __enable_if_t<__is_swappable<_Tp>::value>
  #else
!     inline void
  #endif
      swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
      _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Tp>::value)
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/bits/ranges_base.h gcc-16-20250720/libstdc++-v3/include/bits/ranges_base.h
*** gcc-16-20250713/libstdc++-v3/include/bits/ranges_base.h	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/bits/ranges_base.h	Sun Jul 20 22:32:36 2025
*************** namespace ranges
*** 879,888 ****
        {
  	if constexpr (sized_sentinel_for<_Sent, _It>)
  	  {
! 	    const auto __diff = __bound - __it;
  
  	    if (__diff == 0)
! 	      return __n;
  	    else if (__diff > 0 ? __n >= __diff : __n <= __diff)
  	      {
  		(*this)(__it, __bound);
--- 879,895 ----
        {
  	if constexpr (sized_sentinel_for<_Sent, _It>)
  	  {
! 	    const iter_difference_t<_It> __diff = __bound - __it;
  
  	    if (__diff == 0)
! 	      {
! 		// inline any possible side effects of advance(it, bound)
! 		if constexpr (assignable_from<_It&, _Sent>)
! 		  __it = std::move(__bound);
! 		else if constexpr (random_access_iterator<_It>)
! 		  __it += 0;
! 		return __n;
! 	      }
  	    else if (__diff > 0 ? __n >= __diff : __n <= __diff)
  	      {
  		(*this)(__it, __bound);
*************** namespace ranges
*** 897,905 ****
  		return 0;
  	      }
  	    else
! 	      return 0;
  	  }
! 	else if (__it == __bound || __n == 0)
  	  return __n;
  	else if (__n > 0)
  	  {
--- 904,917 ----
  		return 0;
  	      }
  	    else
! 	      {
! 		// inline any possible side effects of advance(it, n)
! 		if constexpr (random_access_iterator<_It>)
! 		  __it += 0;
! 		return 0;
! 	      }
  	  }
! 	else if (__n == 0 || __it == __bound)
  	  return __n;
  	else if (__n > 0)
  	  {
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/bits/ranges_uninitialized.h gcc-16-20250720/libstdc++-v3/include/bits/ranges_uninitialized.h
*** gcc-16-20250713/libstdc++-v3/include/bits/ranges_uninitialized.h	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/bits/ranges_uninitialized.h	Sun Jul 20 22:32:36 2025
*************** namespace ranges
*** 556,568 ****
      __destroy_fn::operator()(_Iter __first, _Sent __last) const noexcept
      {
        if constexpr (is_trivially_destructible_v<iter_value_t<_Iter>>)
! 	return ranges::next(std::move(__first), __last);
!       else
! 	{
! 	  for (; __first != __last; ++__first)
! 	    ranges::destroy_at(std::__addressof(*__first));
! 	  return __first;
! 	}
      }
  
    template<__detail::__nothrow_input_range _Range>
--- 556,567 ----
      __destroy_fn::operator()(_Iter __first, _Sent __last) const noexcept
      {
        if constexpr (is_trivially_destructible_v<iter_value_t<_Iter>>)
! 	if (!is_constant_evaluated())
! 	  return ranges::next(std::move(__first), __last);
! 
!       for (; __first != __last; ++__first)
! 	ranges::destroy_at(std::__addressof(*__first));
!       return __first;
      }
  
    template<__detail::__nothrow_input_range _Range>
*************** namespace ranges
*** 581,593 ****
        operator()(_Iter __first, iter_difference_t<_Iter> __n) const noexcept
        {
  	if constexpr (is_trivially_destructible_v<iter_value_t<_Iter>>)
! 	  return ranges::next(std::move(__first), __n);
! 	else
! 	  {
! 	    for (; __n > 0; ++__first, (void)--__n)
! 	      ranges::destroy_at(std::__addressof(*__first));
! 	    return __first;
! 	  }
        }
    };
  
--- 580,591 ----
        operator()(_Iter __first, iter_difference_t<_Iter> __n) const noexcept
        {
  	if constexpr (is_trivially_destructible_v<iter_value_t<_Iter>>)
! 	  if (!is_constant_evaluated())
! 	    return ranges::next(std::move(__first), __n);
! 
! 	for (; __n > 0; ++__first, (void)--__n)
! 	  ranges::destroy_at(std::__addressof(*__first));
! 	return __first;
        }
    };
  
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/bits/stl_iterator_base_types.h gcc-16-20250720/libstdc++-v3/include/bits/stl_iterator_base_types.h
*** gcc-16-20250713/libstdc++-v3/include/bits/stl_iterator_base_types.h	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/bits/stl_iterator_base_types.h	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 257,262 ****
--- 257,269 ----
    template<typename _InIter>
      concept __has_input_iter_cat
        = is_convertible_v<__iter_category_t<_InIter>, input_iterator_tag>;
+ 
+ #ifdef __cpp_lib_concepts
+   // Is a Cpp17InputIterator or satisfies std::input_iterator.
+   template<typename _InIterator>
+     concept __any_input_iterator
+       = input_iterator<_InIterator> || __has_input_iter_cat<_InIterator>;
+ #endif
  #endif
  
    template<typename _It,
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/bits/stl_pair.h gcc-16-20250720/libstdc++-v3/include/bits/stl_pair.h
*** gcc-16-20250713/libstdc++-v3/include/bits/stl_pair.h	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/bits/stl_pair.h	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1132,1137 ****
--- 1132,1139 ----
  #endif // C++23
  
  #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+   // 2766. Swapping non-swappable types
    template<typename _T1, typename _T2>
      typename enable_if<!__and_<__is_swappable<_T1>,
  			       __is_swappable<_T2>>::value>::type
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/bits/unicode.h gcc-16-20250720/libstdc++-v3/include/bits/unicode.h
*** gcc-16-20250713/libstdc++-v3/include/bits/unicode.h	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/bits/unicode.h	Sun Jul 20 22:32:36 2025
*************** namespace __unicode
*** 86,91 ****
--- 86,110 ----
        { return *__it == iter_value_t<_It>{}; }
    };
  
+   // An iterator over an input range of FromFmt code units that yields either
+   // UTF-8, UTF-16, or UTF-32, as a range of ToFmt code units.
+   // The code units from the input range are interpreted as Unicode code points
+   // and the iterator produces the individual code unit for each code point.
+   // Invalid sequences in the input are replaced with U+FFDD so that the result
+   // is always valid UTF-8, UTF-16, or UTF-32.
+   //
+   // The iterator knows the bounds of the underlying input range and will not
+   // read outside those bounds (incrementing or decrementing at the boundary
+   // is erroneously idempotent).
+   //
+   // On construction, the iterator attemps to decode a single code point from
+   // the input range and then encode it into an internal buffer in the output
+   // format, e.g. if the input is UTF-8 and the output is UTF-16, it might read
+   // three char8_t code units from the input and store two char16_t code units
+   // in its buffer. Incrementing the iterator will first iterate over buffer,
+   // yielding each code unit in turn, and then extract another code point from
+   // the input. Failure to extract a valid code point from the input will store
+   // U+FFFD in the buffer, encoded as the appropriate code units of type ToFmt.
    template<typename _FromFmt, typename _ToFmt,
  	   input_iterator _Iter, sentinel_for<_Iter> _Sent = _Iter,
  	   typename _ErrorHandler = _Repl>
*************** namespace __unicode
*** 162,178 ****
        constexpr _Utf_iterator&
        operator++()
        {
! 	if (_M_buf_index + 1 == _M_buf_last && _M_curr() != _M_last)
  	  {
  	    if constexpr (forward_iterator<_Iter>)
  	      std::advance(_M_curr(), _M_to_increment);
  	    if (_M_curr() == _M_last)
  	      _M_buf_index = 0;
! 	    else
  	      _M_read();
  	  }
! 	else if (_M_buf_index + 1 < _M_buf_last)
! 	  ++_M_buf_index;
  	return *this;
        }
  
--- 181,200 ----
        constexpr _Utf_iterator&
        operator++()
        {
! 	if (_M_buf_index + 1 < _M_buf_last)
! 	  ++_M_buf_index; // Move to the next code unit in the buffer.
! 	else if (_M_curr() != _M_last)
  	  {
+ 	    // Advance past the current code point (for non-forward iterators
+ 	    // we already moved there after decoding the last code point).
  	    if constexpr (forward_iterator<_Iter>)
  	      std::advance(_M_curr(), _M_to_increment);
  	    if (_M_curr() == _M_last)
  	      _M_buf_index = 0;
! 	    else // Decode next code point from the input and update buffer.
  	      _M_read();
  	  }
! 	// else erroneous, but ignored for now.
  	return *this;
        }
  
*************** namespace __unicode
*** 187,196 ****
        constexpr _Utf_iterator&
        operator--() requires bidirectional_iterator<_Iter>
        {
! 	if (!_M_buf_index && _M_curr() != _M_first())
! 	  _M_read_reverse();
! 	else if (_M_buf_index)
  	  --_M_buf_index;
  	return *this;
        }
  
--- 209,223 ----
        constexpr _Utf_iterator&
        operator--() requires bidirectional_iterator<_Iter>
        {
! 	if (_M_buf_index > 0)
  	  --_M_buf_index;
+ 	else if (_M_curr() != _M_first())
+ 	  {
+ 	    _M_read_reverse();
+ 	    _M_buf_index = _M_buf_last - 1;
+ 	    ranges::advance(_M_curr(), -_M_to_increment);
+ 	  }
+ 	// else erroneous, but ignored for now.
  	return *this;
        }
  
*************** namespace __unicode
*** 247,253 ****
        }
  
        constexpr void
!       _M_read_reverse(); // TODO
  
        template<typename>
  	struct _Guard
--- 274,291 ----
        }
  
        constexpr void
!       _M_read_reverse() requires bidirectional_iterator<_Iter>
!       {
! 	if constexpr (sizeof(_FromFmt) == sizeof(uint8_t))
! 	  _M_read_reverse_utf8();
! 	else if constexpr (sizeof(_FromFmt) == sizeof(uint16_t))
! 	  _M_read_reverse_utf16();
! 	else
! 	  {
! 	    static_assert(sizeof(_FromFmt) == sizeof(uint32_t));
! 	    _M_read_reverse_utf32();
! 	  }
!       }
  
        template<typename>
  	struct _Guard
*************** namespace __unicode
*** 263,269 ****
  	  _It _M_orig;
  	};
  
!       constexpr void
        _M_read_utf8()
        {
  	_Guard<_Iter> __g{this, _M_curr()};
--- 301,307 ----
  	  _It _M_orig;
  	};
  
!       constexpr char32_t
        _M_read_utf8()
        {
  	_Guard<_Iter> __g{this, _M_curr()};
*************** namespace __unicode
*** 361,366 ****
--- 399,406 ----
  	  __c = _S_error();
  
  	_M_update(__c, __to_incr);
+ 
+ 	return __c;
        }
  
        constexpr void
*************** namespace __unicode
*** 403,408 ****
--- 443,558 ----
  	_M_update(__c, 1);
        }
  
+       constexpr void
+       _M_read_reverse_utf8() requires bidirectional_iterator<_Iter>
+       {
+ 	const auto __first = _M_first();
+ 	auto __curr = _M_curr();
+ 	// The code point we decode:
+ 	char32_t __c{};
+ 	// The last code unit read:
+ 	uint8_t __u = *--__curr;
+ 	// Count of bytes read:
+ 	uint8_t __to_incr = 1;
+ 
+ 	if (__u <= 0x7F) [[likely]]
+ 	  {
+ 	    _M_update(__u, 1);
+ 	    return;
+ 	  }
+ 
+ 	// Continuation bytes match 10xxxxxx
+ 	auto __is_continuation = [](uint8_t __b) {
+ 	  return (__b & 0xC0) == 0x80;
+ 	};
+ 	// 0xC0 and 0xC1 would produce overlong encodings of ASCII characters.
+ 	// 0xF5-0xFF would produce code points above U+10FFFF
+ 	auto __is_invalid = [](uint8_t __b) {
+ 	  return (__b & 0xFE) == 0xC0 || __b >= 0xF5;
+ 	};
+ 
+ 	// No valid or invalid multibyte sequence is longer than 4 bytes,
+ 	// so skip back over at most four bytes.
+ 	while (__is_continuation(__u) && __to_incr < 4 && __curr != __first)
+ 	  {
+ 	    ++__to_incr;
+ 	    __u = *--__curr;
+ 	  }
+ 
+ 	// If the last byte read was a continuation byte then either we read
+ 	// four continuation bytes, or stopped at the start of the sequence.
+ 	// Either way, the maximal subparts are the individual continuation
+ 	// bytes so each one should be replaced with U+FFFD.
+ 	if (__is_continuation(__u) || __is_invalid(__u)) [[unlikely]]
+ 	  {
+ 	    // Either found four continuation bytes (maximum allowed is three)
+ 	    // or first non-continuation byte is an invalid UTF-8 code unit.
+ 	    _M_update(_S_error(), 1);
+ 	    return;
+ 	  }
+ 	// __u is a valid start byte so use countl_one to get the expected
+ 	// length of the multibyte sequence that starts with this byte.
+ 	int __seq_length = std::countl_one((unsigned char)__u);
+ 	if (__seq_length < __to_incr) [[unlikely]]
+ 	  {
+ 	    // If the expected number of continuation bytes is less than
+ 	    // the number we found, then the last continuation byte is a
+ 	    // maximal subpart and the decremented iterator points to it.
+ 	    _M_update(_S_error(), 1);
+ 	    return;
+ 	  }
+ 
+ 	auto __orig = std::__exchange(_M_curr(), std::move(__curr));
+ 	if (_M_read_utf8() == _S_error()) [[unlikely]]
+ 	  {
+ 	    if (_M_to_increment < __to_incr) // Read truncated sequence, set
+ 	      _M_to_increment = 1;           // curr to last continuation byte.
+ 	  }
+ 
+ 	_M_curr() = std::move(__orig);
+ 	// operator--() will move back by _M_to_increment
+       }
+ 
+       constexpr void
+       _M_read_reverse_utf16() requires bidirectional_iterator<_Iter>
+       {
+ 	_Guard<_Iter> __g{this, _M_curr()};
+ 	char32_t __c{};
+ 	uint16_t __u = *--_M_curr();
+ 	uint8_t __to_incr = 1;
+ 
+ 	if (__u < 0xD800 || __u > 0xDFFF) [[likely]]
+ 	  __c = __u;
+ 	else if (__u >= 0xDC00 && _M_curr() != _M_first()) [[likely]]
+ 	  {
+ 	    // read a low surrogate, expect a high surrogate before it.
+ 	    uint16_t __u2 = *--_M_curr();
+ 	    if (__u2 < 0xD800 || __u2 > 0xDC00) [[unlikely]]
+ 	      __c = _S_error(); // unpaired low surrogate
+ 	    else
+ 	      {
+ 		__to_incr = 2;
+ 		uint32_t __x = (__u2 & 0x3F) << 10 | (__u & 0x3FF);
+ 		uint32_t __w = (__u2 >> 6) & 0x1F;
+ 		__c = (__w + 1) << 16 | __x;
+ 	      }
+ 	  }
+ 	else
+ 	  __c = _S_error(); // unpaired surrogate
+ 
+ 	_M_update(__c, __to_incr);
+       }
+ 
+       constexpr void
+       _M_read_reverse_utf32() requires bidirectional_iterator<_Iter>
+       {
+ 	_Guard<_Iter> __g{this, _M_curr()};
+ 	char32_t __c = *--_M_curr();
+ 	if (!__is_scalar_value(__c)) [[unlikely]]
+ 	  __c = _S_error();
+ 	_M_update(__c, 1);
+       }
+ 
        // Encode the code point __c as one or more code units in _M_buf.
        constexpr void
        _M_update(char32_t __c, uint8_t __to_incr)
*************** namespace __unicode
*** 487,494 ****
        constexpr _Iter
        _M_curr() const { return _M_first_and_curr._M_curr; }
  
!       array<value_type, 4 / sizeof(_ToFmt)> _M_buf;
! 
        template<typename _It>
  	struct _First_and_curr
  	{
--- 637,643 ----
        constexpr _Iter
        _M_curr() const { return _M_first_and_curr._M_curr; }
  
!       // _M_first is not needed for non-bidirectional ranges.
        template<typename _It>
  	struct _First_and_curr
  	{
*************** namespace __unicode
*** 502,507 ****
--- 651,658 ----
  	    _First_and_curr(const _First_and_curr<_It2>& __other)
  	    : _M_curr(__other._M_curr) { }
  
+ 	  // First code unit of the current code point for forward iterators,
+ 	  // past-the-end of the current code point for input iterators.
  	  _It _M_curr;
  	};
  
*************** namespace __unicode
*** 519,536 ****
  	    _First_and_curr(const _First_and_curr<_It2>& __other)
  	    : _M_first(__other._M_first), _M_curr(__other._M_curr) { }
  
! 	  _It _M_first;
! 	  _It _M_curr;
  	};
  
        _First_and_curr<_Iter> _M_first_and_curr;
  
!       uint8_t _M_buf_index = 0;
!       uint8_t _M_buf_last = 0;
!       uint8_t _M_to_increment = 0;
! 
        [[no_unique_address]] _Sent _M_last;
  
        template<typename _FromFmt2, typename _ToFmt2,
  	       input_iterator _Iter2, sentinel_for<_Iter2> _Sent2,
  	       typename _ErrHandler>
--- 670,693 ----
  	    _First_and_curr(const _First_and_curr<_It2>& __other)
  	    : _M_first(__other._M_first), _M_curr(__other._M_curr) { }
  
! 	  _It _M_first; // Start of the underlying range.
! 	  _It _M_curr;  // First code unit of the current code point.
  	};
  
+       // Iterators pointing to the start of the underlying range and to the
+       // start (or end, for non-forward iterators) of the current code point.
        _First_and_curr<_Iter> _M_first_and_curr;
  
!       // The end of the underlying input range.
        [[no_unique_address]] _Sent _M_last;
  
+       // Buffer holding the individual code units of the current code point.
+       array<value_type, 4 / sizeof(_ToFmt)> _M_buf;
+ 
+       uint8_t _M_buf_index = 0;    // Index of current code unit in the buffer.
+       uint8_t _M_buf_last = 0;     // Number of code units in the buffer.
+       uint8_t _M_to_increment = 0; // How far to advance _M_curr on increment.
+ 
        template<typename _FromFmt2, typename _ToFmt2,
  	       input_iterator _Iter2, sentinel_for<_Iter2> _Sent2,
  	       typename _ErrHandler>
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/bits/unique_ptr.h gcc-16-20250720/libstdc++-v3/include/bits/unique_ptr.h
*** gcc-16-20250713/libstdc++-v3/include/bits/unique_ptr.h	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/bits/unique_ptr.h	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 832,837 ****
--- 832,839 ----
      { __x.swap(__y); }
  
  #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+   // 2766. Swapping non-swappable types
    template<typename _Tp, typename _Dp>
      typename enable_if<!__is_swappable<_Dp>::value>::type
      swap(unique_ptr<_Tp, _Dp>&,
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/bits/version.def gcc-16-20250720/libstdc++-v3/include/bits/version.def
*** gcc-16-20250713/libstdc++-v3/include/bits/version.def	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/bits/version.def	Sun Jul 20 22:32:36 2025
*************** ftms = {
*** 1989,1994 ****
--- 1989,2002 ----
  };
  
  ftms = {
+   name = inplace_vector;
+   values = {
+     v = 202406;
+     cxxmin = 26;
+   };
+ };
+ 
+ ftms = {
    name = indirect;
    values = {
      v = 202502;
*************** ftms = {
*** 2052,2059 ****
  
  ftms = {
    name = constexpr_exceptions;
    values = {
!     v = 202502;
      cxxmin = 26;
      extra_cond = "__cpp_constexpr_exceptions >= 202411L";
    };
--- 2060,2069 ----
  
  ftms = {
    name = constexpr_exceptions;
+   // TODO Remove when PR121114 is resolved
+   no_stdname = true;
    values = {
!     v = 1; // TODO 202411;
      cxxmin = 26;
      extra_cond = "__cpp_constexpr_exceptions >= 202411L";
    };
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/bits/version.h gcc-16-20250720/libstdc++-v3/include/bits/version.h
*** gcc-16-20250713/libstdc++-v3/include/bits/version.h	Sun Jul 13 22:33:12 2025
--- gcc-16-20250720/libstdc++-v3/include/bits/version.h	Sun Jul 20 22:32:36 2025
***************
*** 2229,2234 ****
--- 2229,2244 ----
  #endif /* !defined(__cpp_lib_modules) && defined(__glibcxx_want_modules) */
  #undef __glibcxx_want_modules
  
+ #if !defined(__cpp_lib_inplace_vector)
+ # if (__cplusplus >  202302L)
+ #  define __glibcxx_inplace_vector 202406L
+ #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_inplace_vector)
+ #   define __cpp_lib_inplace_vector 202406L
+ #  endif
+ # endif
+ #endif /* !defined(__cpp_lib_inplace_vector) && defined(__glibcxx_want_inplace_vector) */
+ #undef __glibcxx_want_inplace_vector
+ 
  #if !defined(__cpp_lib_indirect)
  # if (__cplusplus >  202302L) && _GLIBCXX_HOSTED
  #  define __glibcxx_indirect 202502L
***************
*** 2301,2309 ****
  
  #if !defined(__cpp_lib_constexpr_exceptions)
  # if (__cplusplus >  202302L) && (__cpp_constexpr_exceptions >= 202411L)
! #  define __glibcxx_constexpr_exceptions 202502L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_exceptions)
- #   define __cpp_lib_constexpr_exceptions 202502L
  #  endif
  # endif
  #endif /* !defined(__cpp_lib_constexpr_exceptions) && defined(__glibcxx_want_constexpr_exceptions) */
--- 2311,2318 ----
  
  #if !defined(__cpp_lib_constexpr_exceptions)
  # if (__cplusplus >  202302L) && (__cpp_constexpr_exceptions >= 202411L)
! #  define __glibcxx_constexpr_exceptions 1L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_exceptions)
  #  endif
  # endif
  #endif /* !defined(__cpp_lib_constexpr_exceptions) && defined(__glibcxx_want_constexpr_exceptions) */
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/c_global/cmath gcc-16-20250720/libstdc++-v3/include/c_global/cmath
*** gcc-16-20250713/libstdc++-v3/include/c_global/cmath	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/c_global/cmath	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 3792,3801 ****
    { return std::__hypot3<long double>(__x, __y, __z); }
  
    template<typename _Tp, typename _Up, typename _Vp>
!     __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>
      hypot(_Tp __x, _Up __y, _Vp __z)
      {
!       using __type = __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>;
        return std::__hypot3<__type>(__x, __y, __z);
      }
  
--- 3792,3801 ----
    { return std::__hypot3<long double>(__x, __y, __z); }
  
    template<typename _Tp, typename _Up, typename _Vp>
!     typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
      hypot(_Tp __x, _Up __y, _Vp __z)
      {
!       using __type = typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type;
        return std::__hypot3<__type>(__x, __y, __z);
      }
  
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/experimental/memory gcc-16-20250720/libstdc++-v3/include/experimental/memory
*** gcc-16-20250713/libstdc++-v3/include/experimental/memory	Sun Jul 13 22:33:04 2025
--- gcc-16-20250720/libstdc++-v3/include/experimental/memory	Sun Jul 20 22:32:36 2025
*************** inline namespace fundamentals_v2
*** 148,189 ****
      }; // observer_ptr<>
  
    template<typename _Tp>
!     void
      swap(observer_ptr<_Tp>& __p1, observer_ptr<_Tp>& __p2) noexcept
      {
        __p1.swap(__p2);
      }
  
    template<typename _Tp>
!     observer_ptr<_Tp>
      make_observer(_Tp* __p) noexcept
      {
        return observer_ptr<_Tp>(__p);
      }
  
    template<typename _Tp, typename _Up>
!     bool
      operator==(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
        return __p1.get() == __p2.get();
      }
  
    template<typename _Tp, typename _Up>
!     bool
      operator!=(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
      return !(__p1 == __p2);
      }
  
    template<typename _Tp>
!     bool
      operator==(observer_ptr<_Tp> __p, nullptr_t) noexcept
      {
        return !__p;
      }
  
    template<typename _Tp>
!     bool
      operator==(nullptr_t, observer_ptr<_Tp> __p) noexcept
      {
        return !__p;
--- 148,189 ----
      }; // observer_ptr<>
  
    template<typename _Tp>
!     constexpr void
      swap(observer_ptr<_Tp>& __p1, observer_ptr<_Tp>& __p2) noexcept
      {
        __p1.swap(__p2);
      }
  
    template<typename _Tp>
!     constexpr observer_ptr<_Tp>
      make_observer(_Tp* __p) noexcept
      {
        return observer_ptr<_Tp>(__p);
      }
  
    template<typename _Tp, typename _Up>
!     constexpr bool
      operator==(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
        return __p1.get() == __p2.get();
      }
  
    template<typename _Tp, typename _Up>
!     constexpr bool
      operator!=(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
      return !(__p1 == __p2);
      }
  
    template<typename _Tp>
!     constexpr bool
      operator==(observer_ptr<_Tp> __p, nullptr_t) noexcept
      {
        return !__p;
      }
  
    template<typename _Tp>
!     constexpr bool
      operator==(nullptr_t, observer_ptr<_Tp> __p) noexcept
      {
        return !__p;
*************** inline namespace fundamentals_v2
*** 197,210 ****
      }
  
    template<typename _Tp>
!     bool
      operator!=(nullptr_t, observer_ptr<_Tp> __p) noexcept
      {
        return bool(__p);
      }
  
    template<typename _Tp, typename _Up>
!     bool
      operator<(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
        return std::less<typename common_type<typename add_pointer<_Tp>::type,
--- 197,210 ----
      }
  
    template<typename _Tp>
!     constexpr bool
      operator!=(nullptr_t, observer_ptr<_Tp> __p) noexcept
      {
        return bool(__p);
      }
  
    template<typename _Tp, typename _Up>
!     constexpr bool
      operator<(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
        return std::less<typename common_type<typename add_pointer<_Tp>::type,
*************** inline namespace fundamentals_v2
*** 214,234 ****
      }
  
    template<typename _Tp, typename _Up>
!     bool
      operator>(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
        return __p2 < __p1;
      }
  
    template<typename _Tp, typename _Up>
!     bool
      operator<=(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
        return !(__p2 < __p1);
      }
  
    template<typename _Tp, typename _Up>
!     bool
      operator>=(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
        return !(__p1 < __p2);
--- 214,234 ----
      }
  
    template<typename _Tp, typename _Up>
!     constexpr bool
      operator>(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
        return __p2 < __p1;
      }
  
    template<typename _Tp, typename _Up>
!     constexpr bool
      operator<=(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
        return !(__p2 < __p1);
      }
  
    template<typename _Tp, typename _Up>
!     constexpr bool
      operator>=(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
      {
        return !(__p1 < __p2);
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/precompiled/stdc++.h gcc-16-20250720/libstdc++-v3/include/precompiled/stdc++.h
*** gcc-16-20250713/libstdc++-v3/include/precompiled/stdc++.h	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/precompiled/stdc++.h	Sun Jul 20 22:32:36 2025
***************
*** 237,242 ****
--- 237,243 ----
  #endif
  
  #if __cplusplus > 202302L
+ #include <inplace_vector>
  #include <text_encoding>
  #include <stdbit.h>
  #include <stdckdint.h>
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/pstl/algorithm_impl.h gcc-16-20250720/libstdc++-v3/include/pstl/algorithm_impl.h
*** gcc-16-20250713/libstdc++-v3/include/pstl/algorithm_impl.h	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/pstl/algorithm_impl.h	Sun Jul 20 22:32:36 2025
*************** template <class _ForwardIterator, class
*** 79,85 ****
  _ForwardIterator
  __for_each_n_it_serial(_ForwardIterator __first, _Size __n, _Function __f)
  {
!     for (; __n > 0; ++__first, --__n)
          __f(__first);
      return __first;
  }
--- 79,85 ----
  _ForwardIterator
  __for_each_n_it_serial(_ForwardIterator __first, _Size __n, _Function __f)
  {
!     for (; __n > 0; ++__first, (void) --__n)
          __f(__first);
      return __first;
  }
*************** _ForwardIterator2
*** 221,227 ****
  __brick_walk2(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _Function __f,
                /*vector=*/std::false_type) noexcept
  {
!     for (; __first1 != __last1; ++__first1, ++__first2)
          __f(*__first1, *__first2);
      return __first2;
  }
--- 221,227 ----
  __brick_walk2(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _Function __f,
                /*vector=*/std::false_type) noexcept
  {
!     for (; __first1 != __last1; ++__first1, (void) ++__first2)
          __f(*__first1, *__first2);
      return __first2;
  }
*************** _ForwardIterator2
*** 240,246 ****
  __brick_walk2_n(_ForwardIterator1 __first1, _Size __n, _ForwardIterator2 __first2, _Function __f,
                  /*vector=*/std::false_type) noexcept
  {
!     for (; __n > 0; --__n, ++__first1, ++__first2)
          __f(*__first1, *__first2);
      return __first2;
  }
--- 240,246 ----
  __brick_walk2_n(_ForwardIterator1 __first1, _Size __n, _ForwardIterator2 __first2, _Function __f,
                  /*vector=*/std::false_type) noexcept
  {
!     for (; __n > 0; --__n, (void) ++__first1, ++__first2)
          __f(*__first1, *__first2);
      return __first2;
  }
*************** _ForwardIterator3
*** 364,370 ****
  __brick_walk3(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
                _ForwardIterator3 __first3, _Function __f, /*vector=*/std::false_type) noexcept
  {
!     for (; __first1 != __last1; ++__first1, ++__first2, ++__first3)
          __f(*__first1, *__first2, *__first3);
      return __first3;
  }
--- 364,370 ----
  __brick_walk3(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
                _ForwardIterator3 __first3, _Function __f, /*vector=*/std::false_type) noexcept
  {
!     for (; __first1 != __last1; ++__first1, (void) ++__first2, ++__first3)
          __f(*__first1, *__first2, *__first3);
      return __first3;
  }
*************** struct __brick_move_destroy
*** 961,967 ****
      {
          using _IteratorValueType = typename std::iterator_traits<_RandomAccessIterator1>::value_type;
  
!         for (; __first != __last; ++__first, ++__result)
          {
              *__result = std::move(*__first);
              (*__first).~_IteratorValueType();
--- 961,967 ----
      {
          using _IteratorValueType = typename std::iterator_traits<_RandomAccessIterator1>::value_type;
  
!         for (; __first != __last; ++__first, (void) ++__result)
          {
              *__result = std::move(*__first);
              (*__first).~_IteratorValueType();
*************** __brick_calc_mask_1(_ForwardIterator __f
*** 1027,1033 ****
      static_assert(__are_random_access_iterators<_ForwardIterator>::value,
                    "Pattern-brick error. Should be a random access iterator.");
  
!     for (; __first != __last; ++__first, ++__mask)
      {
          *__mask = __pred(*__first);
          if (*__mask)
--- 1027,1033 ----
      static_assert(__are_random_access_iterators<_ForwardIterator>::value,
                    "Pattern-brick error. Should be a random access iterator.");
  
!     for (; __first != __last; ++__first, (void) ++__mask)
      {
          *__mask = __pred(*__first);
          if (*__mask)
*************** void
*** 1052,1058 ****
  __brick_copy_by_mask(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator __result, bool* __mask,
                       _Assigner __assigner, /*vector=*/std::false_type) noexcept
  {
!     for (; __first != __last; ++__first, ++__mask)
      {
          if (*__mask)
          {
--- 1052,1058 ----
  __brick_copy_by_mask(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator __result, bool* __mask,
                       _Assigner __assigner, /*vector=*/std::false_type) noexcept
  {
!     for (; __first != __last; ++__first, (void) ++__mask)
      {
          if (*__mask)
          {
*************** void
*** 1079,1085 ****
  __brick_partition_by_mask(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator1 __out_true,
                            _OutputIterator2 __out_false, bool* __mask, /*vector=*/std::false_type) noexcept
  {
!     for (; __first != __last; ++__first, ++__mask)
      {
          if (*__mask)
          {
--- 1079,1085 ----
  __brick_partition_by_mask(_ForwardIterator __first, _ForwardIterator __last, _OutputIterator1 __out_true,
                            _OutputIterator2 __out_false, bool* __mask, /*vector=*/std::false_type) noexcept
  {
!     for (; __first != __last; ++__first, (void) ++__mask)
      {
          if (*__mask)
          {
*************** __brick_calc_mask_2(_RandomAccessIterato
*** 1383,1389 ****
                      _BinaryPredicate __pred, /*vector=*/std::false_type) noexcept
  {
      _DifferenceType __count = 0;
!     for (; __first != __last; ++__first, ++__mask)
      {
          *__mask = !__pred(*__first, *(__first - 1));
          __count += *__mask;
--- 1383,1389 ----
                      _BinaryPredicate __pred, /*vector=*/std::false_type) noexcept
  {
      _DifferenceType __count = 0;
!     for (; __first != __last; ++__first, (void) ++__mask)
      {
          *__mask = !__pred(*__first, *(__first - 1));
          __count += *__mask;
*************** void
*** 1483,1489 ****
  __brick_reverse(_BidirectionalIterator __first, _BidirectionalIterator __last, _BidirectionalIterator __d_last,
                  /*is_vector=*/std::false_type) noexcept
  {
!     for (--__d_last; __first != __last; ++__first, --__d_last)
      {
          using std::iter_swap;
          iter_swap(__first, __d_last);
--- 1483,1489 ----
  __brick_reverse(_BidirectionalIterator __first, _BidirectionalIterator __last, _BidirectionalIterator __d_last,
                  /*is_vector=*/std::false_type) noexcept
  {
!     for (--__d_last; __first != __last; ++__first, (void) --__d_last)
      {
          using std::iter_swap;
          iter_swap(__first, __d_last);
*************** __pattern_partial_sort_copy(__parallel_t
*** 2333,2339 ****
                      _RandomAccessIterator1 __it = __first + (__i - __r);
  
                      // 1. Copy elements from input to raw memory
!                     for (_T1* __k = __i; __k != __j; ++__k, ++__it)
                      {
                          ::new (__k) _T2(*__it);
                      }
--- 2333,2339 ----
                      _RandomAccessIterator1 __it = __first + (__i - __r);
  
                      // 1. Copy elements from input to raw memory
!                     for (_T1* __k = __i; __k != __j; ++__k, (void) ++__it)
                      {
                          ::new (__k) _T2(*__it);
                      }
*************** __mismatch_serial(_ForwardIterator1 __fi
*** 3648,3654 ****
  #if defined(_PSTL_CPP14_2RANGE_MISMATCH_EQUAL_PRESENT)
      return std::mismatch(__first1, __last1, __first2, __last2, __pred);
  #else
!     for (; __first1 != __last1 && __first2 != __last2 && __pred(*__first1, *__first2); ++__first1, ++__first2)
      {
      }
      return std::make_pair(__first1, __first2);
--- 3648,3654 ----
  #if defined(_PSTL_CPP14_2RANGE_MISMATCH_EQUAL_PRESENT)
      return std::mismatch(__first1, __last1, __first2, __last2, __pred);
  #else
!     for (; __first1 != __last1 && __first2 != __last2 && __pred(*__first1, *__first2); ++__first1, (void) ++__first2)
      {
      }
      return std::make_pair(__first1, __first2);
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/pstl/memory_impl.h gcc-16-20250720/libstdc++-v3/include/pstl/memory_impl.h
*** gcc-16-20250713/libstdc++-v3/include/pstl/memory_impl.h	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/pstl/memory_impl.h	Sun Jul 20 22:32:36 2025
*************** __brick_uninitialized_move(_ForwardItera
*** 29,35 ****
                             /*vector=*/std::false_type) noexcept
  {
      using _ValueType = typename std::iterator_traits<_OutputIterator>::value_type;
!     for (; __first != __last; ++__first, ++__result)
      {
          ::new (std::addressof(*__result)) _ValueType(std::move(*__first));
      }
--- 29,35 ----
                             /*vector=*/std::false_type) noexcept
  {
      using _ValueType = typename std::iterator_traits<_OutputIterator>::value_type;
!     for (; __first != __last; ++__first, (void) ++__result)
      {
          ::new (std::addressof(*__result)) _ValueType(std::move(*__first));
      }
*************** __brick_uninitialized_copy(_ForwardItera
*** 80,86 ****
                             /*vector=*/std::false_type) noexcept
  {
      using _ValueType = typename std::iterator_traits<_OutputIterator>::value_type;
!     for (; __first != __last; ++__first, ++__result)
      {
          ::new (std::addressof(*__result)) _ValueType(*__first);
      }
--- 80,86 ----
                             /*vector=*/std::false_type) noexcept
  {
      using _ValueType = typename std::iterator_traits<_OutputIterator>::value_type;
!     for (; __first != __last; ++__first, (void) ++__result)
      {
          ::new (std::addressof(*__result)) _ValueType(*__first);
      }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/pstl/numeric_impl.h gcc-16-20250720/libstdc++-v3/include/pstl/numeric_impl.h
*** gcc-16-20250713/libstdc++-v3/include/pstl/numeric_impl.h	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/pstl/numeric_impl.h	Sun Jul 20 22:32:36 2025
*************** __brick_transform_scan(_ForwardIterator
*** 158,164 ****
                         _UnaryOperation __unary_op, _Tp __init, _BinaryOperation __binary_op,
                         /*Inclusive*/ std::false_type, /*is_vector=*/std::false_type) noexcept
  {
!     for (; __first != __last; ++__first, ++__result)
      {
  	_Tp __v = std::move(__init);
          _PSTL_PRAGMA_FORCEINLINE
--- 158,164 ----
                         _UnaryOperation __unary_op, _Tp __init, _BinaryOperation __binary_op,
                         /*Inclusive*/ std::false_type, /*is_vector=*/std::false_type) noexcept
  {
!     for (; __first != __last; ++__first, (void) ++__result)
      {
  	_Tp __v = std::move(__init);
          _PSTL_PRAGMA_FORCEINLINE
*************** __brick_transform_scan(_RandomAccessIter
*** 175,181 ****
                         _UnaryOperation __unary_op, _Tp __init, _BinaryOperation __binary_op,
                         /*Inclusive*/ std::true_type, /*is_vector=*/std::false_type) noexcept
  {
!     for (; __first != __last; ++__first, ++__result)
      {
          _PSTL_PRAGMA_FORCEINLINE
          __init = __binary_op(__init, __unary_op(*__first));
--- 175,181 ----
                         _UnaryOperation __unary_op, _Tp __init, _BinaryOperation __binary_op,
                         /*Inclusive*/ std::true_type, /*is_vector=*/std::false_type) noexcept
  {
!     for (; __first != __last; ++__first, (void) ++__result)
      {
          _PSTL_PRAGMA_FORCEINLINE
          __init = __binary_op(__init, __unary_op(*__first));
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/std/array gcc-16-20250720/libstdc++-v3/include/std/array
*** gcc-16-20250713/libstdc++-v3/include/std/array	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/std/array	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 381,386 ****
--- 381,388 ----
      { __one.swap(__two); }
  
  #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+   // 2766. Swapping non-swappable types
    template<typename _Tp, std::size_t _Nm>
      __enable_if_t<!__array_traits<_Tp, _Nm>::_Is_swappable::value>
      swap(array<_Tp, _Nm>&, array<_Tp, _Nm>&) = delete;
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/std/bitset gcc-16-20250720/libstdc++-v3/include/std/bitset
*** gcc-16-20250713/libstdc++-v3/include/std/bitset	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/std/bitset	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 720,726 ****
  
    namespace __bitset
    {
! #if _GLIBCXX_HOSTED
      template<typename _CharT>
        using __string = std::basic_string<_CharT>;
  #else
--- 720,729 ----
  
    namespace __bitset
    {
! #ifdef __cpp_lib_bitset // ...construct from string_view
!     template<typename _CharT>
!       using __string = std::basic_string_view<_CharT>;
! #elif _GLIBCXX_HOSTED
      template<typename _CharT>
        using __string = std::basic_string<_CharT>;
  #else
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/std/inplace_vector gcc-16-20250720/libstdc++-v3/include/std/inplace_vector
*** gcc-16-20250713/libstdc++-v3/include/std/inplace_vector	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/include/std/inplace_vector	Sun Jul 20 22:32:36 2025
***************
*** 0 ****
--- 1,1379 ----
+ // Sequence container with fixed capacity -*- C++ -*-
+ 
+ // Copyright The GNU Toolchain Authors.
+ //
+ // 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 include/inplace_vector
+  *  This is a Standard C++ Library header.
+  *  @ingroup sequences
+  */
+ 
+ #ifndef _GLIBCXX_INPLACE_VECTOR
+ #define _GLIBCXX_INPLACE_VECTOR 1
+ 
+ #pragma GCC system_header
+ 
+ #define __glibcxx_want_inplace_vector
+ #include <bits/version.h>
+ 
+ #ifdef __glibcxx_inplace_vector // C++ >= 26 
+ #include <compare>
+ #include <initializer_list>
+ #include <bits/range_access.h>
+ #include <bits/ranges_base.h> // borrowed_iterator_t, __detail::__container_compatible_range
+ #include <bits/ranges_util.h> // subrange
+ #include <bits/ranges_uninitialized.h>
+ #include <bits/refwrap.h>
+ #include <bits/stl_construct.h>
+ #include <bits/stl_uninitialized.h>
+ #include <bits/stl_algo.h> // rotate
+ 
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+   // [indirect], class template indirect
+   template<typename _Tp, size_t _Nm>
+     class inplace_vector
+     {
+     public:
+ 
+       // types:
+       using value_type             = _Tp;
+       using pointer                = _Tp*;
+       using const_pointer          = const _Tp*;
+       using reference              = value_type&;
+       using const_reference        = const value_type&;
+       using size_type              = size_t;
+       using difference_type        = ptrdiff_t;
+       using iterator
+ 	= __gnu_cxx::__normal_iterator<_Tp*, inplace_vector>;
+       using const_iterator
+ 	= __gnu_cxx::__normal_iterator<const _Tp*, inplace_vector>;
+       using reverse_iterator       = std::reverse_iterator<iterator>;
+       using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+ 
+       // [containers.sequences.inplace.vector.cons], construct/copy/destroy
+       constexpr
+       inplace_vector() noexcept
+       { _M_init(); }
+ 
+       constexpr explicit
+       inplace_vector(size_type __n)
+       {
+ 	_M_init();
+ 	_S_reserve(__n);
+ 	std::uninitialized_value_construct_n(data(), __n);
+ 	_M_size = __n;
+       }
+ 
+       constexpr
+       inplace_vector(size_type __n, const _Tp& __value)
+       {
+ 	_M_init();
+ 	_S_reserve(__n);
+ 	std::uninitialized_fill_n(data(), __n, __value);
+ 	_M_size = __n;
+       }
+ 
+       template<__any_input_iterator _InputIterator>
+ 	constexpr
+ 	inplace_vector(_InputIterator __first, _InputIterator __last)
+ 	: inplace_vector()
+ 	{
+ 	  if (const auto __n = _S_distance(__first, __last))
+ 	    {
+ 	      _S_reserve(__n);
+ 	      std::uninitialized_copy(__first, __last, data());
+ 	      _M_size = __n;
+ 	    }
+ 	  else
+ 	    {
+ 	      while (__first != __last)
+ 		emplace_back(*__first++);
+ 	    }
+ 	}
+ 
+       template <__detail::__container_compatible_range<_Tp> _Rg>
+ 	constexpr
+ 	inplace_vector(from_range_t, _Rg&& __rg)
+ 	: inplace_vector()
+ 	{ append_range(__rg); }
+ 
+       constexpr
+       inplace_vector(initializer_list<_Tp> __il)
+       {
+ 	_M_init();
+ 	_S_reserve(__il.size());
+ 	std::uninitialized_copy(__il.begin(), __il.end(), data());
+ 	_M_size = __il.size();
+       }
+ 
+       inplace_vector(const inplace_vector&)
+ 	requires is_trivially_copy_constructible_v<_Tp>
+ 	= default;
+ 
+       constexpr
+       inplace_vector(const inplace_vector& __other)
+       noexcept(is_nothrow_copy_constructible_v<_Tp>)
+       {
+ 	_M_init();
+ 	std::uninitialized_copy(__other.begin(), __other.end(), data());
+ 	_M_size = __other.size();
+       }
+ 
+       inplace_vector(inplace_vector&&)
+ 	requires is_trivially_move_constructible_v<_Tp>
+ 	= default;
+ 
+       constexpr
+       inplace_vector(inplace_vector&& __other)
+       noexcept(is_nothrow_move_constructible_v<_Tp>)
+       {
+ 	_M_init();
+ 	std::uninitialized_move(__other.begin(), __other.end(), data());
+ 	_M_size = __other.size();
+       }
+ 
+       ~inplace_vector()
+ 	requires is_trivially_destructible_v<_Tp>
+ 	= default;
+ 
+       constexpr
+       ~inplace_vector()
+       { clear(); }
+ 
+       inplace_vector&
+       operator=(const inplace_vector&)
+ 	requires is_trivially_copy_assignable_v<_Tp>
+ 		   && is_trivially_copy_constructible_v<_Tp>
+ 		   && is_trivially_destructible_v<_Tp>
+ 	= default;
+ 
+       constexpr inplace_vector&
+       operator=(const inplace_vector& __other)
+       noexcept(is_nothrow_copy_assignable_v<_Tp>
+ 		 && is_nothrow_copy_constructible_v<_Tp>)
+       {
+ 	if (std::addressof(__other) != this) [[likely]]
+ 	  assign(__other.begin(), __other.end());
+ 	return *this;
+       }
+ 
+       inplace_vector&
+       operator=(inplace_vector&&)
+ 	requires is_trivially_move_assignable_v<_Tp>
+ 		   && is_trivially_move_constructible_v<_Tp>
+ 		   && is_trivially_destructible_v<_Tp>
+ 	= default;
+ 
+       constexpr inplace_vector&
+       operator=(inplace_vector&& __other)
+       noexcept(is_nothrow_move_assignable_v<_Tp>
+ 		 && is_nothrow_move_constructible_v<_Tp>)
+       {
+ 	if (std::addressof(__other) != this) [[likely]]
+ 	  assign(std::make_move_iterator(__other.begin()),
+ 		 std::make_move_iterator(__other.end()));
+ 	return *this;
+       }
+ 
+       constexpr inplace_vector&
+       operator=(initializer_list<_Tp> __il)
+       {
+ 	assign(__il.begin(), __il.end());
+ 	return *this;
+       }
+ 
+       template<__any_input_iterator _InputIterator>
+ 	constexpr void
+ 	assign(_InputIterator __first, _InputIterator __last)
+ 	{
+ 	  if (const auto __n = _S_distance(__first, __last))
+ 	    {
+ 	      _S_reserve(__n);
+ 	      if (_M_size <= __n)
+ 		{
+ 		  for (size_t __i = 0; __i < _M_size; ++__i, (void)++__first)
+ 		    _M_elems[__i] = *__first;
+ 		  std::uninitialized_copy(__first, __last, end());
+ 		}
+ 	      else
+ 		std::destroy(std::copy(__first, __last, begin()), end());
+ 	      _M_size = __n;
+ 	    }
+ 	  else
+ 	    {
+ 	      size_t __i = 0;
+ 	      for (;__first != __last && __i < _M_size; ++__first)
+ 		_M_elems[__i++] = *__first;
+ 	      if (__first == __last)
+ 		{
+ 		  std::_Destroy_n(data() + __i, _M_size - __i);
+ 		  _M_size = __i;
+ 		}
+ 	      else
+ 		{
+ 		  while (__first != __last)
+ 		    emplace_back(*__first++);
+ 		}
+ 	    }
+ 	}
+ 
+       template<__detail::__container_compatible_range<_Tp> _Rg>
+ 	constexpr void
+ 	assign_range(_Rg&& __rg)
+ 	{
+ 	  if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>)
+ 	    {
+ 	      const auto __sz = ranges::distance(__rg);
+ 	      if (__sz > _Nm)
+ 		__throw_bad_alloc();
+ 	      if (__sz <= size())
+ 		{
+ 		  ranges::copy_n(ranges::begin(__rg), __sz, data());
+ 		  std::destroy(data() + __sz, data() + _M_size);
+ 		}
+ 	      else
+ 		{
+ 		  auto [__in, __out] = ranges::copy_n(
+ 					 ranges::begin(__rg), _M_size,
+ 					 data());
+ 		  ranges::uninitialized_copy(
+ 		    std::move(__in), ranges::end(__rg),
+ 		    __out, unreachable_sentinel);
+ 		}
+ 	      _M_size = __sz;
+ 	    }
+ 	  else
+ 	    {
+ 	      auto __in = ranges::begin(__rg);
+ 	      auto __end = ranges::end(__rg);
+ 	      size_type __n = 0;
+ 	      for (; __n < _Nm && __in != __end; ++__in)
+ 		_M_elems[__n++] = *__in;
+ 
+ 	      if (__in == __end)
+ 		{
+ 		  std::destroy(data() + __n, data() + _M_size);
+ 		  _M_size = __n;
+ 		  return;
+ 		}
+ 	      else if (__n < _Nm)
+ 		{
+ 		  auto __res = ranges::uninitialized_copy(
+ 				std::move(__in), __end,
+ 				data() + __n, data() + _Nm);
+ 		  _M_size = __res.out - data();
+ 		  if (__res.in == ranges::end(__rg))
+ 		    return;
+ 		}
+ 	      __throw_bad_alloc();
+ 	    }
+ 	}
+ 
+       constexpr void
+       assign(size_type __n, const _Tp& __u)
+       {
+ 	_S_reserve(__n);
+ 	if (_M_size <= __n)
+ 	  std::uninitialized_fill_n(std::fill_n(data(), _M_size, __u),
+ 				    __n - _M_size, __u);
+ 	else
+ 	  std::destroy_n(std::fill_n(data(), __n, __u), _M_size - __n);
+ 	_M_size = __n;
+       }
+ 
+       constexpr void
+       assign(initializer_list<_Tp> __il)
+       { assign(__il.begin(), __il.end()); }
+ 
+       // iterators
+       [[nodiscard]]
+       constexpr iterator
+       begin() noexcept { return iterator(data()); }
+ 
+       [[nodiscard]]
+       constexpr const_iterator
+       begin() const noexcept { return const_iterator(data()); }
+ 
+       [[nodiscard]]
+       constexpr iterator
+       end() noexcept
+       { return iterator(data() + _M_size); }
+ 
+       [[nodiscard]]
+       constexpr const_iterator
+       end() const noexcept
+       { return const_iterator(data() + _M_size); }
+ 
+       [[nodiscard]]
+       constexpr reverse_iterator
+       rbegin() noexcept
+       { return reverse_iterator(end()); }
+ 
+       [[nodiscard]]
+       constexpr const_reverse_iterator
+       rbegin() const noexcept
+       { return const_reverse_iterator(end()); }
+ 
+       [[nodiscard]]
+       constexpr reverse_iterator
+       rend() noexcept { return reverse_iterator(begin()); }
+ 
+       [[nodiscard]]
+       constexpr const_reverse_iterator
+       rend() const noexcept { return const_reverse_iterator(begin()); }
+ 
+       [[nodiscard]]
+       constexpr const_iterator
+       cbegin() const noexcept { return begin(); }
+ 
+       [[nodiscard]]
+       constexpr const_iterator
+       cend() const noexcept { return end(); }
+ 
+       [[nodiscard]]
+       constexpr const_reverse_iterator
+       crbegin() const noexcept { return rbegin(); }
+ 
+       [[nodiscard]]
+       constexpr const_reverse_iterator
+       crend() const noexcept { return rend(); }
+ 
+       // [containers.sequences.inplace.vector.members] size/capacity
+       [[nodiscard]]
+       constexpr bool
+       empty() const noexcept { return _M_size == 0; }
+ 
+       [[nodiscard]]
+       constexpr size_type
+       size() const noexcept
+       {
+ 	if (_M_size > _Nm)
+ 	  __builtin_unreachable();
+ 	return _M_size;
+       }
+ 
+       [[nodiscard]]
+       static constexpr size_type
+       max_size() noexcept { return _Nm; }
+ 
+       [[nodiscard]]
+       static constexpr size_type
+       capacity() noexcept { return _Nm; }
+ 
+       constexpr void
+       resize(size_type __n)
+       {
+ 	_S_reserve(__n);
+ 	if (__n > _M_size)
+ 	  std::uninitialized_value_construct_n(data() + _M_size, __n - _M_size);
+ 	else if (__n < _M_size)
+ 	  std::destroy_n(data() + __n, _M_size - __n);
+ 	_M_size = __n;
+       }
+ 
+       constexpr void
+       resize(size_type __n, const _Tp& __c)
+       {
+ 	_S_reserve(__n);
+ 	if (__n > _M_size)
+ 	  std::uninitialized_fill_n(data() + _M_size, __n - _M_size, __c);
+ 	else if (__n < _M_size)
+ 	  std::destroy_n(data() + __n, _M_size - __n);
+ 	_M_size = __n;
+       }
+ 
+       static constexpr void
+       reserve(size_type __n)
+       { _S_reserve(__n); }
+ 
+       static constexpr void
+       shrink_to_fit() { }
+ 
+       // element access
+       [[nodiscard]]
+       constexpr reference
+       operator[](size_type __n)
+       {
+ 	__glibcxx_requires_subscript(__n);
+ 	return _M_elems[__n];
+       }
+ 
+       [[nodiscard]]
+       constexpr const_reference
+       operator[](size_type __n) const
+       {
+ 	__glibcxx_requires_subscript(__n);
+ 	return _M_elems[__n];
+       }
+ 
+       [[nodiscard]]
+       constexpr const_reference
+       at(size_type __n) const
+       {
+ 	if (__n >= _M_size)
+ 	  std::__throw_out_of_range_fmt(__N("inplace_vector::at: __n "
+ 					    "(which is %zu) "
+ 					    ">= size() (which is %zu)"),
+ 					__n, _M_size);
+ 	return _M_elems[__n];
+       }
+ 
+       [[nodiscard]]
+       constexpr reference
+       at(size_type __n)
+       {
+ 	if (__n >= _M_size)
+ 	  std::__throw_out_of_range_fmt(__N("inplace_vector::at: __n "
+ 					    "(which is %zu) "
+ 					    ">= size() (which is %zu)"),
+ 					__n, _M_size);
+ 	return _M_elems[__n];
+       }
+ 
+       [[nodiscard]]
+       constexpr reference
+       front()
+       {
+ 	__glibcxx_requires_nonempty();
+ 	return _M_elems[0];
+       }
+ 
+       [[nodiscard]]
+       constexpr const_reference
+       front() const
+       {
+ 	__glibcxx_requires_nonempty();
+ 	return _M_elems[0];
+       }
+ 
+       [[nodiscard]]
+       constexpr reference
+       back()
+       {
+ 	__glibcxx_requires_nonempty();
+ 	return _M_elems[_M_size - 1];
+       }
+ 
+       [[nodiscard]]
+       constexpr const_reference
+       back() const
+       {
+ 	__glibcxx_requires_nonempty();
+ 	return _M_elems[_M_size - 1];
+       }
+ 
+       // [containers.sequences.inplace.vector.data], data access
+ 
+       [[nodiscard]]
+       constexpr _Tp*
+       data() noexcept
+       { return static_cast<pointer>(_M_elems); }
+ 
+       [[nodiscard]]
+       constexpr const _Tp*
+       data() const noexcept
+       { return static_cast<const_pointer>(_M_elems); }
+ 
+       // [containers.sequences.inplace.vector.modifiers], modifiers
+       template<typename... _Args>
+ 	constexpr _Tp&
+ 	emplace_back(_Args&&... __args)
+ 	{
+ 	  if (_M_size >= _Nm)
+ 	    __throw_bad_alloc();
+ 	  return unchecked_emplace_back(std::forward<_Args>(__args)...);
+ 	}
+ 
+       constexpr _Tp&
+       push_back(const _Tp& __x)
+       { return emplace_back(__x); }
+ 
+       constexpr _Tp&
+       push_back(_Tp&& __x)
+       { return emplace_back(std::move(__x)); }
+ 
+       template<__detail::__container_compatible_range<_Tp> _Rg>
+ 	constexpr void
+ 	append_range(_Rg&& __rg)
+ 	{
+ 	  if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>)
+ 	    {
+ 	      const auto __sz = ranges::distance(__rg);
+ 	      if (__sz > (_Nm - size()))
+ 		__throw_bad_alloc();
+ 	      // Bounded on output range due PR121143
+ 	      ranges::uninitialized_copy(
+ 		ranges::begin(__rg), unreachable_sentinel,
+ 		data() + _M_size, data() + _M_size + __sz);
+ 	      _M_size += size_type(__sz);
+ 	    }
+ 	  else
+ 	    {
+ 	      ranges::subrange<pointer> __tail(data() + _M_size, data() + _Nm);
+ 	      auto [__in, __out] = ranges::uninitialized_copy(__rg, __tail);
+ 	      _M_size = __out - data();
+ 	      if (__in != ranges::end(__rg))
+ 		__throw_bad_alloc();
+ 	    }
+ 	}
+ 
+       constexpr void
+       pop_back()
+       {
+ 	__glibcxx_requires_nonempty();
+ 	--_M_size;
+ 	_M_elems[_M_size].~_Tp();
+       }
+ 
+       template<typename... _Args>
+ 	constexpr _Tp*
+ 	try_emplace_back(_Args&&... __args)
+ 	{
+ 	  if (_M_size >= _Nm) [[unlikely]]
+ 	    return nullptr;
+ 	  auto& __r = unchecked_emplace_back(std::forward<_Args>(__args)...);
+ 	  return __builtin_addressof(__r);
+ 	}
+ 
+       constexpr _Tp*
+       try_push_back(const _Tp& __x)
+       {
+ 	if (_M_size >= _Nm) [[unlikely]]
+ 	  return nullptr;
+ 	return __builtin_addressof(unchecked_emplace_back(__x));
+       }
+ 
+       constexpr _Tp*
+       try_push_back(_Tp&& __x)
+       {
+ 	if (_M_size >= _Nm) [[unlikely]]
+ 	  return nullptr;
+ 	return __builtin_addressof(unchecked_emplace_back(std::move(__x)));
+       }
+ 
+       template<__detail::__container_compatible_range<_Tp> _Rg>
+ 	constexpr ranges::borrowed_iterator_t<_Rg>
+ 	try_append_range(_Rg&& __rg)
+ 	{
+ 	  if constexpr (ranges::sized_range<_Rg>)
+ 	    {
+ 	      auto __n = ranges::distance(__rg);
+ 	      if (__n == 0) [[unlikely]]
+ 		return ranges::begin(__rg);
+ 
+ 	      const auto __end = data() + _M_size;
+ 	      const size_t __avail = _Nm - size();
+ 	      if (__n <= __avail)
+ 		_M_size += size_type(__n);
+ 	      else
+ 		{
+ 		  __n = __avail;
+ 		  _M_size = _Nm;
+ 		}
+ 	      return ranges::uninitialized_copy_n(
+ 		       ranges::begin(__rg), __n,
+ 		       __end, unreachable_sentinel).in;
+ 	    }
+ 	  else
+ 	    {
+ 	      ranges::subrange<pointer> __tail(data() + _M_size, data() + _Nm);
+ 	      auto [__in, __out] = ranges::uninitialized_copy(__rg, __tail);
+ 	      _M_size = __out - data();
+ 	      return std::move(__in);
+ 	    }
+ 	}
+ 
+       template<typename... _Args>
+ 	constexpr _Tp&
+ 	unchecked_emplace_back(_Args&&... __args)
+ 	{
+ 	  __glibcxx_assert(_M_size < _Nm);
+ 	  auto __p = std::construct_at(data() + _M_size,
+ 				       std::forward<_Args>(__args)...);
+ 	  ++_M_size;
+ 	  return *__p;
+ 	}
+ 
+       constexpr _Tp&
+       unchecked_push_back(const _Tp& __x)
+       { return unchecked_emplace_back(__x); }
+ 
+       constexpr _Tp&
+       unchecked_push_back(_Tp&& __x)
+       { return unchecked_emplace_back(std::move(__x)); }
+ 
+       template<typename... _Args>
+ 	constexpr iterator
+ 	emplace(const_iterator __position, _Args&&... __args)
+ 	{
+ 	  size_t __b = __position - cbegin(); // elements before position
+ 	  __glibcxx_assert(__b <= _M_size);
+ 	  if (_M_size >= _Nm)
+ 	    __throw_bad_alloc();
+ 	  iterator __pos = begin() + __b;
+ 	  std::construct_at(data() + _M_size, std::forward<_Args>(__args)...);
+ 	  if (_M_size++)
+ 	    std::rotate(__pos, end() - 1, end());
+ 	  return __pos;
+ 	}
+ 
+       constexpr iterator
+       insert(const_iterator __position, const _Tp& __x)
+       { return emplace(__position, __x); }
+ 
+       constexpr iterator
+       insert(const_iterator __position, _Tp&& __x)
+       { return emplace(__position, std::move(__x)); }
+ 
+       constexpr iterator
+       insert(const_iterator __position, size_type __n, const _Tp& __x)
+       {
+ 	size_t __b = __position - cbegin(); // elements before position
+ 	__glibcxx_assert(__b <= _M_size);
+ 	if ((_Nm - _M_size) < __n)
+ 	  __throw_bad_alloc();
+ 	iterator __pos = begin() + __b;
+ 	std::uninitialized_fill_n(data() + _M_size, __n, __x);
+ 	if (std::__exchange(_M_size, _M_size + __n))
+ 	  std::rotate(__pos, end() - __n, end());
+ 	return __pos;
+       }
+ 
+       template<__any_input_iterator _InputIterator>
+ 	constexpr iterator
+ 	insert(const_iterator __position, _InputIterator __first,
+ 	       _InputIterator __last)
+ 	{
+ 	  size_t __b = __position - cbegin(); // elements before position
+ 	  __glibcxx_assert(__b <= _M_size);
+ 	  iterator __pos = begin() + __b;
+ 	  const size_t __s = _M_size;
+ 	  if (const auto __n = _S_distance(__first, __last))
+ 	    {
+ 	      if ((_Nm - _M_size) < __n)
+ 		__throw_bad_alloc();
+ 	      std::uninitialized_copy(__first, __last, data() + _M_size);
+ 	      _M_size += __n;
+ 	    }
+ 	  else
+ 	    {
+ 	      while (__first != __last)
+ 		emplace_back(*__first++);
+ 	    }
+ 	  if (__s)
+ 	    std::rotate(__pos, begin() + __s, end());
+ 	  return __pos;
+ 	}
+ 
+       template<__detail::__container_compatible_range<_Tp> _Rg>
+ 	constexpr iterator
+ 	insert_range(const_iterator __position, _Rg&& __rg)
+ 	{
+ 	  iterator __pos = begin() + (__position - cbegin());
+ 	  const auto __end = end();
+ 	  if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>)
+ 	    {
+ 	      const auto __len = ranges::distance(__rg);
+ 	      if (__len > (_Nm - size()))
+ 		__throw_bad_alloc();
+ 	      if (!__len) [[unlikely]]
+ 		return __pos;
+ 
+ 	      const size_type __n = size_type(__len);
+ 	      const size_type __num_after = __end - __pos;
+ 	      if (__num_after >= __n)
+ 		{
+ 		  ranges::uninitialized_move(__end - __n, __end,
+ 					     __end, unreachable_sentinel);
+ 		  _M_size += __n;
+ 		  ranges::move_backward(__pos, __end - __n, __end);
+ 		  ranges::copy(__rg, __pos);
+ 		}
+ 	      else if constexpr (ranges::forward_range<_Rg>)
+ 		{
+ 		  auto __mid = ranges::next(ranges::begin(__rg), __num_after);
+ 		  ranges::uninitialized_copy(__mid, ranges::end(__rg),
+ 					     __end, unreachable_sentinel);
+ 		  _M_size += __n - __num_after;
+ 		  ranges::uninitialized_move(__pos, __end,
+ 					     __pos + __n, unreachable_sentinel);
+ 		  _M_size += __num_after;
+ 		  ranges::copy(ranges::begin(__rg), __mid, __pos);
+ 		}
+ 	      else
+ 		{
+ 		  ranges::uninitialized_copy(
+ 		    ranges::begin(__rg), ranges::end(__rg),
+ 		    __end, unreachable_sentinel);
+ 		  _M_size += __n;
+ 		  std::rotate(__pos, __end, end());
+ 		}
+ 	    }
+ 	  else
+ 	    {
+ 	      append_range(__rg);
+ 	      std::rotate(__pos, __end, end());
+ 	    }
+ 	  return __pos;
+ 	}
+ 
+       constexpr iterator
+       insert(const_iterator __position, initializer_list<_Tp> __il)
+       { return insert(__position, __il.begin(), __il.end()); }
+ 
+       constexpr iterator
+       erase(const_iterator __position)
+       {
+ 	size_t __n = __position - cbegin();
+ 	__glibcxx_assert(__n < _M_size);
+ 	iterator __pos = begin() + __n;
+ 	std::move(__pos + 1, end(), __pos);
+ 	pop_back();
+ 	return __pos;
+       }
+ 
+       constexpr iterator
+       erase(const_iterator __first, const_iterator __last)
+       {
+ 	size_t __n = __first - cbegin();
+ 	size_t __x = __last - __first;
+ 	__glibcxx_assert(__n <= _M_size);
+ 	__glibcxx_assert(__x <= _M_size);
+ 	iterator __pos = begin() + __n;
+ 	iterator __end = std::move(__pos + __x, end(), __pos);
+ 	std::destroy_n(__end, __x);
+ 	_M_size -= __x;
+ 	return __pos;
+       }
+ 
+       constexpr void
+       swap(inplace_vector& __x)
+       noexcept(is_nothrow_swappable_v<_Tp> && is_nothrow_move_constructible_v<_Tp>)
+       {
+ 	inplace_vector* __vs[2]{ this, std::addressof(__x) };
+ 	const auto __smaller = __vs[__x.size() < size()];
+ 	const auto __bigger = __vs[__x.size() >= size()];
+ 	size_type __n = __smaller->size();
+ 	size_type __n2 = __bigger->size();
+ 
+ 	if constexpr (is_nothrow_move_constructible_v<_Tp>)
+ 	  {
+ 	    for (size_type __i = __n; __i < __n2; ++__i)
+ 	      {
+ 		std::construct_at(__smaller->data() + __i,
+ 				  std::move(*(__bigger->data() + __i)));
+ 		std::destroy_at(__bigger->data() + __i);
+ 	      }
+ 	  }
+ 	else
+ 	  {
+ 	    std::uninitialized_copy(__bigger->data() + __n,
+ 				    __bigger->data() + __n2,
+ 				    __smaller->data() + __n);
+ 	    std::destroy(__bigger->data() + __n, __bigger->data() + __n2);
+ 	  }
+ 	__smaller->_M_size = __n2;
+ 	__bigger->_M_size = __n;
+ 
+ 	using std::swap;
+ 	for (size_type __i = 0; __i < __n; __i++)
+ 	  swap(_M_elems[__i], __x._M_elems[__i]);
+       }
+ 
+       constexpr void
+       clear() noexcept
+       {
+ 	std::destroy_n(data(), size_t(_M_size));
+ 	_M_size = 0;
+       }
+ 
+       constexpr friend bool
+       operator==(const inplace_vector& __x, const inplace_vector& __y)
+       { return std::equal(__x.begin(), __x.end(), __y.begin(), __y.end()); }
+ 
+       constexpr friend auto
+       operator<=>(const inplace_vector& __x, const inplace_vector& __y)
+       requires requires (const _Tp __t) {
+ 	{ __t < __t } -> __detail::__boolean_testable;
+       }
+       {
+ 	return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
+ 						      __y.begin(), __y.end(),
+ 						      __detail::__synth3way);
+       }
+ 
+       constexpr friend void
+       swap(inplace_vector& __x, inplace_vector& __y)
+       noexcept(is_nothrow_swappable_v<_Tp> && is_nothrow_move_constructible_v<_Tp>)
+       { __x.swap(__y); }
+ 
+     private:
+       union {
+ 	_Tp _M_elems[_Nm];
+       };
+ 
+       // Check whether integer type _UInt is wide enough to store _Nm,
+       // so that we use a smaller type for _M_size when that saves space.
+       template<typename _UInt, bool = (alignof(_Tp) <= sizeof(_UInt))>
+ 	static constexpr bool __fits
+ 	  = _Nm <= __gnu_cxx::__int_traits<_UInt>::__max;
+ 
+       // Don't bother using a smaller type if alignment of the array elements
+       // means that it doesn't actually save space.
+       template<typename _UInt>
+ 	static constexpr bool __fits<_UInt, false> = false;
+ 
+       static consteval auto __select_size_type()
+       {
+ 	if constexpr (__fits<unsigned char>)
+ 	  return (unsigned char)0;
+ #if __SHRT_WIDTH__ < __SIZE_WIDTH__
+ 	else if constexpr (__fits<unsigned short>)
+ 	  return (unsigned short)0;
+ #endif
+ #if __INT_WIDTH__ < __SIZE_WIDTH__ && __INT_WIDTH__ > __SHRT_WIDTH__
+ 	else if constexpr (__fits<unsigned int>)
+ 	  return 0u;
+ #endif
+ #if __LONG_WIDTH__ < __SIZE_WIDTH__ && __LONG_WIDTH__ > __INT_WIDTH__
+ 	else if constexpr (__fits<unsigned long>)
+ 	  return 0ul;
+ #endif
+ 	else // Just use size_t.
+ 	  return 0uz;
+       }
+       decltype(__select_size_type()) _M_size = 0;
+ 
+       constexpr void
+       _M_init()
+       {
+ 	if !consteval
+ 	  {
+ #if __glibcxx_start_lifetime_as
+ 	    std::start_lifetime_as_array<_Tp>(data(), _Nm);
+ #endif
+ 	  }
+ 	else
+ 	  {
+ 	    // TODO: use new(_M_elems) _Tp[_Nm]() once PR121068 is fixed
+ 	    if constexpr (is_trivial_v<_Tp>)
+ 	      for (size_t __i = 0; __i < _Nm; ++__i)
+ 		_M_elems[__i] = _Tp();
+ 	    else
+ 	      __builtin_unreachable(); // only trivial types are supported at compile time
+ 	  }
+       }
+ 
+       static constexpr void
+       _S_reserve(size_t __n)
+       {
+ 	if (__n > _Nm)
+ 	  __throw_bad_alloc();
+       }
+ 
+       template<typename _InputIterator>
+ 	constexpr static auto
+ 	_S_distance(_InputIterator __first, _InputIterator __last)
+ 	{
+ 	  if constexpr (sized_sentinel_for<_InputIterator, _InputIterator>
+ 			  || forward_iterator<_InputIterator>)
+ 	    return (size_type)ranges::distance(__first, __last);
+ 	  else if constexpr (derived_from<__iter_category_t<_InputIterator>,
+ 				     forward_iterator_tag>)
+ 	    return (size_type)std::distance(__first, __last);
+ 	  else
+ 	    return false_type{};
+ 	}
+     };
+ 
+   // [inplace.vector.special], specialized algorithms
+   template<typename _Tp, size_t _Nm>
+     constexpr void
+     swap(inplace_vector<_Tp, _Nm>& __x, inplace_vector<_Tp, _Nm>& __y)
+     noexcept(noexcept(__x.swap(__y)))
+     { __x.swap(__y); }
+ 
+   // specialization for zero capacity, that is required to be trivally copyable
+   // and empty regardless of _Tp.
+   template<typename _Tp>
+     class inplace_vector<_Tp, 0>
+     {
+     public:
+       // types:
+       using value_type             = _Tp;
+       using pointer                = _Tp*;
+       using const_pointer          = const _Tp*;
+       using reference              = value_type&;
+       using const_reference        = const value_type&;
+       using size_type              = size_t;
+       using difference_type        = ptrdiff_t;
+       using iterator
+ 	= __gnu_cxx::__normal_iterator<_Tp*, inplace_vector>;
+       using const_iterator
+ 	= __gnu_cxx::__normal_iterator<const _Tp*, inplace_vector>;
+       using reverse_iterator       = std::reverse_iterator<iterator>;
+       using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+ 
+       // [containers.sequences.inplace.vector.cons], construct/copy/destroy
+       inplace_vector() = default;
+ 
+       constexpr explicit
+       inplace_vector(size_type __n)
+       {
+ 	if (__n != 0)
+ 	  __throw_bad_alloc();
+       }
+ 
+       constexpr
+       inplace_vector(size_type __n, const _Tp& __value)
+       {
+ 	if (__n != 0)
+ 	  __throw_bad_alloc();
+       }
+ 
+       template<__any_input_iterator _InputIterator>
+ 	constexpr
+ 	inplace_vector(_InputIterator __first, _InputIterator __last)
+ 	{
+ 	  if (__first != __last)
+ 	    __throw_bad_alloc();
+ 	}
+ 
+       template <__detail::__container_compatible_range<_Tp> _Rg>
+ 	constexpr
+ 	inplace_vector(from_range_t, _Rg&& __rg)
+ 	{
+ 	  if (ranges::begin(__rg) != ranges::end(__rg))
+ 	    __throw_bad_alloc();
+ 	}
+ 
+       constexpr
+       inplace_vector(initializer_list<_Tp> __il)
+       {
+ 	if (__il.size() != 0)
+ 	  __throw_bad_alloc();
+       }
+ 
+       inplace_vector(const inplace_vector&) = default;
+       inplace_vector(inplace_vector&&) = default;
+ 
+       constexpr
+       ~inplace_vector() = default;
+ 
+       inplace_vector&
+       operator=(const inplace_vector&) = default;
+ 
+       inplace_vector&
+       operator=(inplace_vector&&) = default;
+ 
+       constexpr inplace_vector&
+       operator=(initializer_list<_Tp> __il)
+       {
+ 	if (__il.size() != 0)
+ 	  __throw_bad_alloc();
+       }
+ 
+       template<__any_input_iterator _InputIterator>
+ 	constexpr void
+ 	assign(_InputIterator __first, _InputIterator __last)
+ 	{
+ 	  if (__first != __last)
+ 	    __throw_bad_alloc();
+ 	}
+ 
+       template<__detail::__container_compatible_range<_Tp> _Rg>
+ 	constexpr void
+ 	assign_range(_Rg&& __rg)
+ 	{
+ 	  if (ranges::begin(__rg) != ranges::end(__rg))
+ 	    __throw_bad_alloc();
+ 	}
+ 
+       constexpr void
+       assign(size_type __n, const _Tp& __u)
+       {
+ 	if (__n != 0)
+ 	  __throw_bad_alloc();
+       }
+ 
+       constexpr void
+       assign(initializer_list<_Tp> __il)
+       {
+ 	if (__il.size() != 0)
+ 	  __throw_bad_alloc();
+       }
+ 
+       // iterators
+       [[nodiscard]]
+       constexpr iterator
+       begin() noexcept { return iterator(nullptr); }
+ 
+       [[nodiscard]]
+       constexpr const_iterator
+       begin() const noexcept { return const_iterator(nullptr); }
+ 
+       [[nodiscard]]
+       constexpr iterator
+       end() noexcept { return iterator(nullptr); }
+ 
+       [[nodiscard]]
+       constexpr const_iterator
+       end() const noexcept { return const_iterator(nullptr); }
+ 
+       [[nodiscard]]
+       constexpr reverse_iterator
+       rbegin() noexcept
+       { return reverse_iterator(end()); }
+ 
+       [[nodiscard]]
+       constexpr const_reverse_iterator
+       rbegin() const noexcept
+       { return const_reverse_iterator(end()); }
+ 
+       [[nodiscard]]
+       constexpr reverse_iterator
+       rend() noexcept { return reverse_iterator(begin()); }
+ 
+       [[nodiscard]]
+       constexpr const_reverse_iterator
+       rend() const noexcept { return const_reverse_iterator(begin()); }
+ 
+       [[nodiscard]]
+       constexpr const_iterator
+       cbegin() const noexcept { return begin(); }
+ 
+       [[nodiscard]]
+       constexpr const_iterator
+       cend() const noexcept { return end(); }
+ 
+       [[nodiscard]]
+       constexpr const_reverse_iterator
+       crbegin() const noexcept { return rbegin(); }
+ 
+       [[nodiscard]]
+       constexpr const_reverse_iterator
+       crend() const noexcept { return rend(); }
+ 
+       // [containers.sequences.inplace.vector.members] size/capacity
+       [[nodiscard]]
+       constexpr bool
+       empty() const noexcept { return true; }
+ 
+       [[nodiscard]]
+       constexpr size_type
+       size() const noexcept { return 0; }
+ 
+       [[nodiscard]]
+       static constexpr size_type
+       max_size() noexcept { return 0; }
+ 
+       [[nodiscard]]
+       static constexpr size_type
+       capacity() noexcept { return 0; }
+ 
+       constexpr void
+       resize(size_type __n)
+       {
+ 	if (__n != 0)
+ 	  __throw_bad_alloc();
+       }
+ 
+       constexpr void
+       resize(size_type __n, const _Tp&)
+       {
+ 	if (__n != 0)
+ 	  __throw_bad_alloc();
+       }
+ 
+       static constexpr void
+       reserve(size_type __n)
+       {
+ 	if (__n != 0)
+ 	  __throw_bad_alloc();
+       }
+ 
+       static constexpr void
+       shrink_to_fit() { }
+ 
+       // element access
+       [[nodiscard,noreturn]]
+       constexpr reference
+       operator[](size_type)
+       { __builtin_trap(); }
+ 
+       [[nodiscard,noreturn]]
+       constexpr const_reference
+       operator[](size_type) const
+       { __builtin_trap(); }
+ 
+       [[nodiscard,noreturn]]
+       constexpr const_reference
+       at(size_type __n) const
+       {
+ 	std::__throw_out_of_range_fmt(__N("inplace_vector::at: __n "
+ 					  "(which is %zu) "
+ 					  ">= size() (which is 0)"),
+ 				      __n);
+       }
+ 
+       [[nodiscard,noreturn]]
+       constexpr reference
+       at(size_type __n)
+       {
+ 	std::__throw_out_of_range_fmt(__N("inplace_vector::at: __n "
+ 					  "(which is %zu) "
+ 					  ">= size() (which is 0)"),
+ 				      __n);
+       }
+ 
+       [[nodiscard,noreturn]]
+       constexpr reference
+       front()
+       { __builtin_trap(); }
+ 
+       [[nodiscard,noreturn]]
+       constexpr const_reference
+       front() const
+       { __builtin_trap(); }
+ 
+       [[nodiscard,noreturn]]
+       constexpr reference
+       back()
+       { __builtin_trap(); }
+ 
+       [[nodiscard,noreturn]]
+       constexpr const_reference
+       back() const
+       { __builtin_trap(); }
+ 
+       // [containers.sequences.inplace.vector.data], data access
+ 
+       [[nodiscard]]
+       constexpr _Tp*
+       data() noexcept
+       { return nullptr; }
+ 
+       [[nodiscard]]
+       constexpr const _Tp*
+       data() const noexcept
+       { return nullptr; }
+ 
+       // [containers.sequences.inplace.vector.modifiers], modifiers
+       template<typename... _Args>
+ 	[[noreturn]]
+ 	constexpr _Tp&
+ 	emplace_back(_Args&&...)
+ 	{ __throw_bad_alloc(); }
+ 
+       [[noreturn]]
+       constexpr _Tp&
+       push_back(const _Tp&)
+       { __throw_bad_alloc(); }
+ 
+       [[noreturn]]
+       constexpr _Tp&
+       push_back(_Tp&&)
+       { __throw_bad_alloc(); }
+ 
+       template<__detail::__container_compatible_range<_Tp> _Rg>
+ 	constexpr void
+ 	append_range(_Rg&& __rg)
+ 	{
+ 	  if (ranges::begin(__rg) != ranges::end(__rg))
+ 	    __throw_bad_alloc();
+ 	}
+ 
+       [[noreturn]]
+       constexpr void
+       pop_back()
+       { __builtin_trap(); }
+ 
+       template<typename... _Args>
+ 	constexpr _Tp*
+ 	try_emplace_back(_Args&&...)
+ 	{ return nullptr; }
+ 
+       constexpr _Tp*
+       try_push_back(const _Tp&)
+       { return nullptr; }
+ 
+       constexpr _Tp*
+       try_push_back(_Tp&&)
+       { return nullptr; }
+ 
+       template<__detail::__container_compatible_range<_Tp> _Rg>
+ 	constexpr ranges::borrowed_iterator_t<_Rg>
+ 	try_append_range(_Rg&& __rg)
+ 	{ return ranges::begin(__rg); }
+ 
+       template<typename... _Args>
+ 	[[noreturn]]
+ 	constexpr _Tp&
+ 	unchecked_emplace_back(_Args&&...)
+ 	{ __builtin_trap(); }
+ 
+       [[noreturn]]
+       constexpr _Tp&
+       unchecked_push_back(const _Tp&)
+       { __builtin_trap(); }
+ 
+       [[noreturn]]
+       constexpr _Tp&
+       unchecked_push_back(_Tp&&)
+       { __builtin_trap(); }
+ 
+       template<typename... _Args>
+ 	[[noreturn]]
+ 	constexpr iterator
+ 	emplace(const_iterator, _Args&&...)
+ 	{ __throw_bad_alloc(); }
+ 
+       [[noreturn]]
+       constexpr iterator
+       insert(const_iterator, const _Tp&)
+       { __throw_bad_alloc(); }
+ 
+       [[noreturn]]
+       constexpr iterator
+       insert(const_iterator, _Tp&&)
+       { __throw_bad_alloc(); }
+ 
+       constexpr iterator
+       insert(const_iterator, size_type __n, const _Tp&)
+       {
+ 	if (__n != 0)
+ 	  __throw_bad_alloc();
+ 	return begin();
+       }
+ 
+       template<typename _InputIterator>
+ 	constexpr iterator
+ 	insert(const_iterator, _InputIterator __first, _InputIterator __last)
+ 	{
+ 	  if (__first != __last)
+ 	    __throw_bad_alloc();
+ 	  return begin();
+ 	}
+ 
+       template<__detail::__container_compatible_range<_Tp> _Rg>
+ 	constexpr iterator
+ 	insert_range(const_iterator, _Rg&& __rg)
+ 	{
+ 	  if (ranges::begin(__rg) != ranges::end(__rg))
+ 	    __throw_bad_alloc();
+ 	  return begin();
+ 	}
+ 
+       constexpr iterator
+       insert(const_iterator, initializer_list<_Tp> __il)
+       {
+ 	if (__il.size() != 0)
+ 	  __throw_bad_alloc();
+ 	return begin();
+       }
+ 
+       [[noreturn]]
+       constexpr iterator
+       erase(const_iterator)
+       { __builtin_trap(); }
+ 
+       constexpr iterator
+       erase(const_iterator __first, const_iterator __last)
+       {
+ 	__glibcxx_assert(__first == __last);
+ 	return begin();
+       }
+ 
+       constexpr void
+       swap(inplace_vector& __x)
+       noexcept
+       { }
+ 
+       constexpr void
+       clear() noexcept
+       { }
+ 
+       constexpr friend bool
+       operator==(const inplace_vector&, const inplace_vector&)
+       { return true; }
+ 
+       constexpr friend auto
+       operator<=>(const inplace_vector&, const inplace_vector&)
+       requires requires (const _Tp __t) {
+ 	{ __t < __t } -> __detail::__boolean_testable;
+       }
+       {	return std::strong_ordering::equal; }
+ 
+       // n.b. there is not explicit wording requiring that swap for inplace_vector,
+       // with zero size, works even if element type is not swappable. However given
+       // that move operations are required to be present and trivial, it makes sense
+       // to support them.
+       constexpr friend void
+       swap(inplace_vector&, inplace_vector&) noexcept
+       { }
+     };
+ 
+   template<typename _Tp, size_t _Nm, typename _Predicate>
+     constexpr size_t
+     erase_if(inplace_vector<_Tp, _Nm>& __cont, _Predicate __pred)
+     {
+       using namespace __gnu_cxx;
+       const auto __osz = __cont.size();
+       const auto __end = __cont.end();
+       auto __removed = std::__remove_if(__cont.begin(), __end,
+ 					__ops::__pred_iter(std::ref(__pred)));
+       if (__removed != __end)
+ 	{
+ 	  __cont.erase(__niter_wrap(__cont.begin(), __removed),
+ 		       __cont.end());
+ 	  return __osz - __cont.size();
+ 	}
+       return 0;
+     }
+ 
+ 
+   template<typename _Tp, size_t _Nm, typename _Up>
+     constexpr  size_t
+     erase(inplace_vector<_Tp, _Nm>& __cont, const _Up& __value)
+     {
+       using namespace __gnu_cxx;
+       const auto __osz = __cont.size();
+       const auto __end = __cont.end();
+       auto __removed = std::__remove_if(__cont.begin(), __end,
+ 					__ops::__iter_equals_val(__value));
+       if (__removed != __end)
+ 	{
+ 	  __cont.erase(__niter_wrap(__cont.begin(), __removed),
+ 		       __cont.end());
+ 	  return __osz - __cont.size();
+ 	}
+       return 0;
+     }
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace
+ 
+ #endif // __glibcxx_inplace_vector
+ #endif // _GLIBCXX_INPLACE_VECTOR
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/std/mdspan gcc-16-20250720/libstdc++-v3/include/std/mdspan
*** gcc-16-20250713/libstdc++-v3/include/std/mdspan	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/std/mdspan	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 285,302 ****
  		  || sizeof...(_OIndexTypes) == rank_dynamic())
  	constexpr explicit extents(_OIndexTypes... __exts) noexcept
  	: _M_exts(span<const _IndexType, sizeof...(_OIndexTypes)>(
! 	    initializer_list{_S_storage::_S_int_cast(__exts)...}))
  	{ }
  
!       template<__mdspan::__valid_index_type<index_type> _OIndexType, size_t _Nm>
! 	requires (_Nm == rank() || _Nm == rank_dynamic())
  	constexpr explicit(_Nm != rank_dynamic())
  	extents(span<_OIndexType, _Nm> __exts) noexcept
  	: _M_exts(span<const _OIndexType, _Nm>(__exts))
  	{ }
  
!       template<__mdspan::__valid_index_type<index_type> _OIndexType, size_t _Nm>
! 	requires (_Nm == rank() || _Nm == rank_dynamic())
  	constexpr explicit(_Nm != rank_dynamic())
  	extents(const array<_OIndexType, _Nm>& __exts) noexcept
  	: _M_exts(span<const _OIndexType, _Nm>(__exts))
--- 285,304 ----
  		  || sizeof...(_OIndexTypes) == rank_dynamic())
  	constexpr explicit extents(_OIndexTypes... __exts) noexcept
  	: _M_exts(span<const _IndexType, sizeof...(_OIndexTypes)>(
! 	    initializer_list{static_cast<_IndexType>(std::move(__exts))...}))
  	{ }
  
!       template<typename _OIndexType, size_t _Nm>
! 	requires __mdspan::__valid_index_type<const _OIndexType&, index_type>
! 	  && (_Nm == rank() || _Nm == rank_dynamic())
  	constexpr explicit(_Nm != rank_dynamic())
  	extents(span<_OIndexType, _Nm> __exts) noexcept
  	: _M_exts(span<const _OIndexType, _Nm>(__exts))
  	{ }
  
!       template<typename _OIndexType, size_t _Nm>
! 	requires __mdspan::__valid_index_type<const _OIndexType&, index_type>
! 	  && (_Nm == rank() || _Nm == rank_dynamic())
  	constexpr explicit(_Nm != rank_dynamic())
  	extents(const array<_OIndexType, _Nm>& __exts) noexcept
  	: _M_exts(span<const _OIndexType, _Nm>(__exts))
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 600,606 ****
  	operator()(_Indices... __indices) const noexcept
  	{
  	  return __mdspan::__linear_index_left(_M_extents,
! 	    static_cast<index_type>(__indices)...);
  	}
  
        static constexpr bool
--- 602,608 ----
  	operator()(_Indices... __indices) const noexcept
  	{
  	  return __mdspan::__linear_index_left(_M_extents,
! 	    static_cast<index_type>(std::move(__indices))...);
  	}
  
        static constexpr bool
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 739,745 ****
  	operator()(_Indices... __indices) const noexcept
  	{
  	  return __mdspan::__linear_index_right(
! 	    _M_extents, static_cast<index_type>(__indices)...);
  	}
  
        static constexpr bool
--- 741,747 ----
  	operator()(_Indices... __indices) const noexcept
  	{
  	  return __mdspan::__linear_index_right(
! 	    _M_extents, static_cast<index_type>(std::move(__indices))...);
  	}
  
        static constexpr bool
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 878,884 ****
        constexpr
        mapping(const mapping&) noexcept = default;
  
!       template<__mdspan::__valid_index_type<index_type> _OIndexType>
  	constexpr
  	mapping(const extents_type& __exts,
  		span<_OIndexType, extents_type::rank()> __strides) noexcept
--- 880,887 ----
        constexpr
        mapping(const mapping&) noexcept = default;
  
!       template<typename _OIndexType>
! 	requires __mdspan::__valid_index_type<const _OIndexType&, index_type>
  	constexpr
  	mapping(const extents_type& __exts,
  		span<_OIndexType, extents_type::rank()> __strides) noexcept
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 888,894 ****
  	    _M_strides[__i] = index_type(as_const(__strides[__i]));
  	}
  
!       template<__mdspan::__valid_index_type<index_type> _OIndexType>
  	constexpr
  	mapping(const extents_type& __exts,
  		const array<_OIndexType, extents_type::rank()>& __strides)
--- 891,898 ----
  	    _M_strides[__i] = index_type(as_const(__strides[__i]));
  	}
  
!       template<typename _OIndexType>
! 	requires __mdspan::__valid_index_type<const _OIndexType&, index_type>
  	constexpr
  	mapping(const extents_type& __exts,
  		const array<_OIndexType, extents_type::rank()>& __strides)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 959,965 ****
  	operator()(_Indices... __indices) const noexcept
  	{
  	  return __mdspan::__linear_index_strides(*this,
! 	    static_cast<index_type>(__indices)...);
  	}
  
        static constexpr bool
--- 963,969 ----
  	operator()(_Indices... __indices) const noexcept
  	{
  	  return __mdspan::__linear_index_strides(*this,
! 	    static_cast<index_type>(std::move(__indices))...);
  	}
  
        static constexpr bool
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1134,1142 ****
  	  _M_handle(std::move(__handle))
  	{ }
  
!       template<__mdspan::__valid_index_type<index_type> _OIndexType,
! 	       size_t _Nm>
! 	requires (_Nm == rank() || _Nm == rank_dynamic())
  		 && is_constructible_v<mapping_type, extents_type>
  		 && is_default_constructible_v<accessor_type>
  	constexpr explicit(_Nm != rank_dynamic())
--- 1138,1146 ----
  	  _M_handle(std::move(__handle))
  	{ }
  
!       template<typename _OIndexType, size_t _Nm>
! 	requires __mdspan::__valid_index_type<const _OIndexType&, index_type>
! 		 && (_Nm == rank() || _Nm == rank_dynamic())
  		 && is_constructible_v<mapping_type, extents_type>
  		 && is_default_constructible_v<accessor_type>
  	constexpr explicit(_Nm != rank_dynamic())
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1145,1153 ****
  	  _M_handle(std::move(__handle))
  	{ }
  
!       template<__mdspan::__valid_index_type<index_type> _OIndexType,
! 	       size_t _Nm>
! 	requires (_Nm == rank() || _Nm == rank_dynamic())
  		 && is_constructible_v<mapping_type, extents_type>
  		 && is_default_constructible_v<accessor_type>
  	constexpr explicit(_Nm != rank_dynamic())
--- 1149,1157 ----
  	  _M_handle(std::move(__handle))
  	{ }
  
!       template<typename _OIndexType, size_t _Nm>
! 	requires __mdspan::__valid_index_type<const _OIndexType&, index_type>
! 		 && (_Nm == rank() || _Nm == rank_dynamic())
  		 && is_constructible_v<mapping_type, extents_type>
  		 && is_default_constructible_v<accessor_type>
  	constexpr explicit(_Nm != rank_dynamic())
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1218,1224 ****
  	  return _M_accessor.access(_M_handle, __index);
  	}
  
!       template<__mdspan::__valid_index_type<index_type> _OIndexType>
  	constexpr reference
  	operator[](span<_OIndexType, rank()> __indices) const
  	{
--- 1222,1229 ----
  	  return _M_accessor.access(_M_handle, __index);
  	}
  
!       template<typename _OIndexType>
! 	requires __mdspan::__valid_index_type<const _OIndexType&, index_type>
  	constexpr reference
  	operator[](span<_OIndexType, rank()> __indices) const
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1228,1234 ****
  	  return __call(make_index_sequence<rank()>());
  	}
  
!       template<__mdspan::__valid_index_type<index_type> _OIndexType>
  	constexpr reference
  	operator[](const array<_OIndexType, rank()>& __indices) const
  	{ return (*this)[span<const _OIndexType, rank()>(__indices)]; }
--- 1233,1240 ----
  	  return __call(make_index_sequence<rank()>());
  	}
  
!       template<typename _OIndexType>
! 	requires __mdspan::__valid_index_type<const _OIndexType&, index_type>
  	constexpr reference
  	operator[](const array<_OIndexType, rank()>& __indices) const
  	{ return (*this)[span<const _OIndexType, rank()>(__indices)]; }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/std/optional gcc-16-20250720/libstdc++-v3/include/std/optional
*** gcc-16-20250713/libstdc++-v3/include/std/optional	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/std/optional	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1740,1745 ****
--- 1740,1747 ----
      noexcept(noexcept(__lhs.swap(__rhs)))
      { __lhs.swap(__rhs); }
  
+   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+   // 2766. Swapping non-swappable types
    template<typename _Tp>
      enable_if_t<!(is_move_constructible_v<_Tp> && is_swappable_v<_Tp>)>
      swap(optional<_Tp>&, optional<_Tp>&) = delete;
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/std/ranges gcc-16-20250720/libstdc++-v3/include/std/ranges
*** gcc-16-20250713/libstdc++-v3/include/std/ranges	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/std/ranges	Sun Jul 20 22:32:36 2025
*************** namespace views::__adaptor
*** 3022,3028 ****
  	  { _M_satisfy(); }
  
  	  [[no_unique_address]]
! 	    __detail::__maybe_present_t<forward_range<_Base>, _Outer_iter> _M_outer;
  	  optional<_Inner_iter> _M_inner;
  	  _Parent* _M_parent = nullptr;
  
--- 3022,3029 ----
  	  { _M_satisfy(); }
  
  	  [[no_unique_address]]
! 	    __detail::__maybe_present_t<forward_range<_Base>, _Outer_iter> _M_outer
! 	      = decltype(_M_outer)();
  	  optional<_Inner_iter> _M_inner;
  	  _Parent* _M_parent = nullptr;
  
*************** namespace views::__adaptor
*** 3376,3382 ****
  
  	  [[no_unique_address]]
  	    __detail::__maybe_present_t<forward_range<_Vp>,
! 					iterator_t<_Base>> _M_current;
  	  bool _M_trailing_empty = false;
  
  	public:
--- 3377,3384 ----
  
  	  [[no_unique_address]]
  	    __detail::__maybe_present_t<forward_range<_Vp>,
! 					iterator_t<_Base>> _M_current
! 	      = decltype(_M_current)();
  	  bool _M_trailing_empty = false;
  
  	public:
*************** namespace views::__adaptor
*** 7400,7406 ****
  
      _Parent* _M_parent = nullptr;
      [[no_unique_address]]
!       __detail::__maybe_present_t<forward_range<_Base>, _OuterIter> _M_outer_it;
      variant<_PatternIter, _InnerIter> _M_inner_it;
  
      constexpr _OuterIter&
--- 7402,7409 ----
  
      _Parent* _M_parent = nullptr;
      [[no_unique_address]]
!       __detail::__maybe_present_t<forward_range<_Base>, _OuterIter> _M_outer_it
! 	= decltype(_M_outer_it)();
      variant<_PatternIter, _InnerIter> _M_inner_it;
  
      constexpr _OuterIter&
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/std/tuple gcc-16-20250720/libstdc++-v3/include/std/tuple
*** gcc-16-20250713/libstdc++-v3/include/std/tuple	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/std/tuple	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2835,2840 ****
--- 2835,2841 ----
      { __x.swap(__y); }
  
  #if __cpp_lib_ranges_zip // >= C++23
+   /// Exchange the values of two const tuples (if const elements can be swapped)
    template<typename... _Elements>
      requires (is_swappable_v<const _Elements> && ...)
      constexpr void
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2844,2850 ****
  #endif // C++23
  
  #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
!   /// Exchange the values of two const tuples (if const elements can be swapped)
    template<typename... _Elements>
      _GLIBCXX20_CONSTEXPR
      typename enable_if<!__and_<__is_swappable<_Elements>...>::value>::type
--- 2845,2852 ----
  #endif // C++23
  
  #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
!   // _GLIBCXX_RESOLVE_LIB_DEFECTS
!   // 2766. Swapping non-swappable types
    template<typename... _Elements>
      _GLIBCXX20_CONSTEXPR
      typename enable_if<!__and_<__is_swappable<_Elements>...>::value>::type
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/std/type_traits gcc-16-20250720/libstdc++-v3/include/std/type_traits
*** gcc-16-20250713/libstdc++-v3/include/std/type_traits	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/std/type_traits	Sun Jul 20 22:32:36 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1992,1999 ****
      : __make_unsigned_selector_base
      {
        // With -fshort-enums, an enum may be as small as a char.
        using _UInts = _List<unsigned char, unsigned short, unsigned int,
! 			   unsigned long, unsigned long long>;
  
        using __unsigned_type = typename __select<sizeof(_Tp), _UInts>::__type;
  
--- 1992,2004 ----
      : __make_unsigned_selector_base
      {
        // With -fshort-enums, an enum may be as small as a char.
+       __extension__
        using _UInts = _List<unsigned char, unsigned short, unsigned int,
! 			   unsigned long, unsigned long long
! #ifdef __SIZEOF_INT128__
! 			   , unsigned __int128
! #endif
! 			  >;
  
        using __unsigned_type = typename __select<sizeof(_Tp), _UInts>::__type;
  
diff -Nrcpad gcc-16-20250713/libstdc++-v3/include/std/variant gcc-16-20250720/libstdc++-v3/include/std/variant
*** gcc-16-20250713/libstdc++-v3/include/std/variant	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/include/std/variant	Sun Jul 20 22:32:36 2025
*************** namespace __detail::__variant
*** 1387,1392 ****
--- 1387,1394 ----
      noexcept(noexcept(__lhs.swap(__rhs)))
      { __lhs.swap(__rhs); }
  
+   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+   // 2766. Swapping non-swappable types
    template<typename... _Types>
      enable_if_t<!((is_move_constructible_v<_Types> && ...)
  		   && (is_swappable_v<_Types> && ...))>
diff -Nrcpad gcc-16-20250713/libstdc++-v3/libsupc++/exception gcc-16-20250720/libstdc++-v3/libsupc++/exception
*** gcc-16-20250713/libstdc++-v3/libsupc++/exception	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/libsupc++/exception	Sun Jul 20 22:32:36 2025
***************
*** 38,43 ****
--- 38,44 ----
  #include <bits/exception.h>
  
  #define __glibcxx_want_uncaught_exceptions
+ #define __glibcxx_want_constexpr_exceptions
  #define __glibcxx_want_exception_ptr_cast
  #include <bits/version.h>
  
diff -Nrcpad gcc-16-20250713/libstdc++-v3/libsupc++/exception_ptr.h gcc-16-20250720/libstdc++-v3/libsupc++/exception_ptr.h
*** gcc-16-20250713/libstdc++-v3/libsupc++/exception_ptr.h	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/libsupc++/exception_ptr.h	Sun Jul 20 22:32:36 2025
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 83,91 ****
  
  #if __cpp_lib_exception_ptr_cast >= 202506L
    template<typename _Ex>
!   constexpr const _Ex* exception_ptr_cast(const exception_ptr&) noexcept;
    template<typename _Ex>
!   void exception_ptr_cast(const exception_ptr&&) = delete;
  #endif
  
    namespace __exception_ptr
--- 83,91 ----
  
  #if __cpp_lib_exception_ptr_cast >= 202506L
    template<typename _Ex>
!     constexpr const _Ex* exception_ptr_cast(const exception_ptr&) noexcept;
    template<typename _Ex>
!     void exception_ptr_cast(const exception_ptr&&) = delete;
  #endif
  
    namespace __exception_ptr
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 138,145 ****
  	_GLIBCXX_USE_NOEXCEPT;
  #if __cpp_lib_exception_ptr_cast >= 202506L
        template<typename _Ex>
!       friend constexpr const _Ex* std::exception_ptr_cast(const exception_ptr&)
! 	noexcept;
  #endif
  
        const void* _M_exception_ptr_cast(const type_info&) const
--- 138,145 ----
  	_GLIBCXX_USE_NOEXCEPT;
  #if __cpp_lib_exception_ptr_cast >= 202506L
        template<typename _Ex>
! 	friend constexpr const _Ex*
! 	std::exception_ptr_cast(const exception_ptr&) noexcept;
  #endif
  
        const void* _M_exception_ptr_cast(const type_info&) const
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 296,335 ****
    using __exception_ptr::swap; // So that std::swap(exp1, exp2) finds it.
  
    /// Obtain an exception_ptr pointing to a copy of the supplied object.
- #if (__cplusplus >= 201103L && __cpp_rtti) || __cpp_exceptions
    template<typename _Ex>
      _GLIBCXX26_CONSTEXPR exception_ptr
      make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
      {
- #if __cplusplus >= 202400L
-       if consteval {
- 	try
- 	  {
- 	    throw __ex;
- 	  }
- 	catch(...)
- 	  {
- 	    return current_exception();
- 	  }
-       }
- #endif
  #if __cplusplus >= 201103L && __cpp_rtti
!       using _Ex2 = typename decay<_Ex>::type;
!       void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex));
!       (void) __cxxabiv1::__cxa_init_primary_exception(
! 	  __e, const_cast<std::type_info*>(&typeid(_Ex)),
! 	  __exception_ptr::__dest_thunk<_Ex2>);
!       __try
! 	{
! 	  ::new (__e) _Ex2(__ex);
! 	  return exception_ptr(__e);
! 	}
!       __catch(...)
  	{
! 	  __cxxabiv1::__cxa_free_exception(__e);
! 	  return current_exception();
  	}
! #else
        try
  	{
            throw __ex;
--- 296,336 ----
    using __exception_ptr::swap; // So that std::swap(exp1, exp2) finds it.
  
    /// Obtain an exception_ptr pointing to a copy of the supplied object.
    template<typename _Ex>
+ #if !(__cplusplus >= 201103L && __cpp_rtti) && !__cpp_exceptions
+     // This is always_inline so the linker will never use a useless definition
+     // instead of a working one compiled with RTTI and/or exceptions enabled.
+     __attribute__ ((__always_inline__)) inline
+ #endif
      _GLIBCXX26_CONSTEXPR exception_ptr
      make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
      {
  #if __cplusplus >= 201103L && __cpp_rtti
!       // For runtime calls with -frtti enabled we can avoid try-catch overhead.
!       // We can't use this for C++98 because it relies on std::decay.
! #ifdef __glibcxx_constexpr_exceptions
!       if ! consteval
! #endif
  	{
! 	  using _Ex2 = typename decay<_Ex>::type;
! 	  void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex));
! 	  (void) __cxxabiv1::__cxa_init_primary_exception(
! 	      __e, const_cast<std::type_info*>(&typeid(_Ex)),
! 	      __exception_ptr::__dest_thunk<_Ex2>);
! 	  __try
! 	    {
! 	      ::new (__e) _Ex2(__ex);
! 	      return exception_ptr(__e);
! 	    }
! 	  __catch(...)
! 	    {
! 	      __cxxabiv1::__cxa_free_exception(__e);
! 	      return current_exception();
! 	    }
  	}
! #endif
! 
! #ifdef __cpp_exceptions
        try
  	{
            throw __ex;
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 339,359 ****
  	  return current_exception();
  	}
  #endif
      }
- #else // no RTTI and no exceptions
-   // This is always_inline so the linker will never use this useless definition
-   // instead of a working one compiled with RTTI and/or exceptions enabled.
-   template<typename _Ex>
-     __attribute__ ((__always_inline__))
-     _GLIBCXX26_CONSTEXPR inline exception_ptr
-     make_exception_ptr(_Ex) _GLIBCXX_USE_NOEXCEPT
-     { return exception_ptr(); }
- #endif
  
  #if __cpp_lib_exception_ptr_cast >= 202506L
    template<typename _Ex>
      [[__gnu__::__always_inline__]]
!     constexpr const _Ex* exception_ptr_cast(const exception_ptr& __p) noexcept
      {
        static_assert(!std::is_const_v<_Ex>);
        static_assert(!std::is_reference_v<_Ex>);
--- 340,353 ----
  	  return current_exception();
  	}
  #endif
+       return exception_ptr();
      }
  
  #if __cpp_lib_exception_ptr_cast >= 202506L
    template<typename _Ex>
      [[__gnu__::__always_inline__]]
!     constexpr const _Ex*
!     exception_ptr_cast(const exception_ptr& __p) noexcept
      {
        static_assert(!std::is_const_v<_Ex>);
        static_assert(!std::is_reference_v<_Ex>);
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 361,388 ****
        static_assert(!std::is_array_v<_Ex>);
        static_assert(!std::is_pointer_v<_Ex>);
        static_assert(!std::is_member_pointer_v<_Ex>);
  #ifdef __cpp_rtti
!       if consteval {
! 	if (__p._M_exception_object)
! 	  try
! 	    {
! 	      std::rethrow_exception(__p);
! 	    }
! 	  catch (const _Ex& __exc)
! 	    {
! 	      return &__exc;
! 	    }
! 	  catch (...)
! 	    {
! 	    }
! 	return nullptr;
!       } else {
  	const type_info &__id = typeid(const _Ex&);
  	return static_cast<const _Ex*>(__p._M_exception_ptr_cast(__id));
        }
- #else
-       return nullptr;
  #endif
      }
  #endif
  
--- 355,385 ----
        static_assert(!std::is_array_v<_Ex>);
        static_assert(!std::is_pointer_v<_Ex>);
        static_assert(!std::is_member_pointer_v<_Ex>);
+ 
  #ifdef __cpp_rtti
!       // For runtime calls with -frtti enabled we can avoid try-catch overhead.
!       if ! consteval {
  	const type_info &__id = typeid(const _Ex&);
  	return static_cast<const _Ex*>(__p._M_exception_ptr_cast(__id));
        }
  #endif
+ 
+ #ifdef __cpp_exceptions
+       if (__p._M_exception_object)
+ 	try
+ 	  {
+ 	    std::rethrow_exception(__p);
+ 	  }
+ 	catch (const _Ex& __exc)
+ 	  {
+ 	    return &__exc;
+ 	  }
+ 	catch (...)
+ 	  {
+ 	  }
+ #endif
+ 
+       return nullptr;
      }
  #endif
  
diff -Nrcpad gcc-16-20250713/libstdc++-v3/scripts/gen_windows_zones_map.py gcc-16-20250720/libstdc++-v3/scripts/gen_windows_zones_map.py
*** gcc-16-20250713/libstdc++-v3/scripts/gen_windows_zones_map.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/scripts/gen_windows_zones_map.py	Sun Jul 20 22:32:36 2025
***************
*** 0 ****
--- 1,115 ----
+ #!/usr/bin/env python3
+ #
+ # Script to generate the map for libstdc++ std::chrono::current_zone under Windows.
+ #
+ # This file is part of GCC.
+ #
+ # GCC is free software; you can redistribute it and/or modify it under
+ # the terms of the GNU General Public License as published by the Free
+ # Software Foundation; either version 3, or (at your option) any later
+ # version.
+ #
+ # GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ # for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with GCC; see the file COPYING3.  If not see
+ # <http://www.gnu.org/licenses/>.
+ 
+ # To update the Libstdc++ static data in src/c++20/windows_zones-map.h download the latest:
+ # https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/windowsZones.xml
+ # Then run this script and save the output to
+ # src/c++20/windows_zones-map.h
+ 
+ import os
+ import sys
+ import xml.etree.ElementTree as et
+ 
+ if len(sys.argv) != 2:
+     print("Usage: %s <windows zones xml>" % sys.argv[0], file=sys.stderr)
+     sys.exit(1)
+ 
+ self = os.path.basename(__file__)
+ print("// Generated by scripts/{}, do not edit.".format(self))
+ print("""
+ // Copyright The GNU Toolchain Authors.
+ //
+ // 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/>.
+ 
+ """)
+ 
+ class WindowsZoneMapEntry:
+     def __init__(self, windows, territory, iana):
+         self.windows = windows
+         self.territory = territory
+         self.iana = iana
+ 
+     def __lt__(self, other):
+         return (self.windows, self.territory) < (other.windows, other.territory)
+ 
+ windows_zone_map = []
+ 
+ tree = et.parse(sys.argv[1])
+ xml_zone_map = tree.getroot().find("windowsZones").find("mapTimezones")
+ 
+ for entry in xml_zone_map.iter("mapZone"):
+     iana = entry.attrib["type"]
+     space = iana.find(" ")
+     if space != -1:
+         iana = iana[0:space]
+     windows_zone_map.append(WindowsZoneMapEntry(entry.attrib["other"], entry.attrib["territory"], iana))
+ 
+ # Sort so we can use binary search on the array.
+ windows_zone_map.sort()
+ 
+ # Skip territories which have the same IANA zone as 001, so we can reduce the data.
+ last_windows_zone = ""
+ for entry in windows_zone_map[:]:
+     if entry.windows != last_windows_zone:
+         if entry.territory != "001":
+             raise ValueError('Territory "001" not the first one, this breaks assumptions in tzdb.cc!')
+         last_windows_zone = entry.windows
+         fallback_iana = entry.iana
+     else:
+         if entry.iana == fallback_iana:
+             windows_zone_map.remove(entry)
+ 
+ print("""struct windows_zone_map_entry
+ {{
+   wstring_view windows_name;
+   wstring_view territory;
+   string_view iana_name;
+ }};
+ 
+ static constexpr array<windows_zone_map_entry, {}> windows_zone_map{{
+   {{""".format(len(windows_zone_map)))
+ 
+ for entry in windows_zone_map:
+     print('    {{L"{}", L"{}", "{}"}},'.format(entry.windows, entry.territory, entry.iana))
+ 
+ print("""  }
+ };""")
+ 
+ # src/c++20/tzdb.cc gives an error if this macro is not defined.
+ # Do this last, so that the generated output is not usable unless we reach here.
+ print("\n#define _GLIBCXX_WINDOWS_ZONES_MAP_COMPLETE")
diff -Nrcpad gcc-16-20250713/libstdc++-v3/src/c++20/tzdb.cc gcc-16-20250720/libstdc++-v3/src/c++20/tzdb.cc
*** gcc-16-20250713/libstdc++-v3/src/c++20/tzdb.cc	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/src/c++20/tzdb.cc	Sun Jul 20 22:32:36 2025
***************
*** 44,49 ****
--- 44,57 ----
  # include <cstdlib>   // getenv
  #endif
  
+ #if _GLIBCXX_HAVE_WINDOWS_H
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+ # include <psapi.h>
+ 
+ # include <array>
+ #endif
+ 
  #if defined __GTHREADS && ATOMIC_POINTER_LOCK_FREE == 2
  # define USE_ATOMIC_LIST_HEAD 1
  // TODO benchmark atomic<shared_ptr<>> vs mutex.
*************** namespace std::chrono
*** 1145,1150 ****
--- 1153,1186 ----
        else
  	path = _GLIBCXX_ZONEINFO_DIR;
  #endif
+ #ifdef _GLIBCXX_HAVE_WINDOWS_H
+       if (path.empty())
+ 	{
+ 	  HMODULE dll_module;
+ 	  if (GetModuleHandleExA(
+ 		  GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
+ 		      | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
+ 		  reinterpret_cast<const char *>(&zoneinfo_file), &dll_module))
+ 	    {
+ 	      char dll_path[MAX_PATH];
+ 	      if (GetModuleFileNameA(dll_module, dll_path, MAX_PATH) != 0)
+ 		{
+ 		  string_view dll_path_view = dll_path;
+ 		  auto pos = dll_path_view.find_last_of('\\');
+ 		  dll_path_view = dll_path_view.substr(0, pos);
+ 		  if (dll_path_view.ends_with("\\bin"))
+ 		    {
+ 		      constexpr string_view remaining_path = "share\\zoneinfo";
+ 		      dll_path_view.remove_suffix(3); // Remove bin
+ 		      path.reserve(dll_path_view.size()
+ 				   + remaining_path.size());
+ 		      path = dll_path_view;
+ 		      path += remaining_path;
+ 		    }
+ 		}
+ 	    }
+ 	}
+ #endif
        if (!path.empty())
  	path.append(filename);
        return path;
*************** namespace std::chrono
*** 1734,1739 ****
--- 1770,1867 ----
  
        return nullptr; // not found
      }
+ 
+ #ifdef _GLIBCXX_HAVE_WINDOWS_H
+     string_view
+     detect_windows_zone() noexcept
+     {
+       DYNAMIC_TIME_ZONE_INFORMATION information{};
+       if (GetDynamicTimeZoneInformation(&information) == TIME_ZONE_ID_INVALID)
+ 	return {};
+ 
+       constexpr SYSTEMTIME all_zero_time{};
+       const wstring_view zone_name{ information.TimeZoneKeyName };
+       auto equal = [](const SYSTEMTIME &lhs, const SYSTEMTIME &rhs) noexcept
+ 	{ return memcmp(&lhs, &rhs, sizeof(SYSTEMTIME)) == 0; };
+       // The logic is copied from icu, couldn't find the source.
+       // Detect if DST is disabled.
+       if (information.DynamicDaylightTimeDisabled
+ 	  && equal(information.StandardDate, information.DaylightDate)
+ 	  && ((!zone_name.empty()
+ 	       && equal(information.StandardDate, all_zero_time))
+ 	      || (zone_name.empty()
+ 		  && !equal(information.StandardDate, all_zero_time))))
+ 	{
+ 	  if (information.Bias == 0)
+ 	    return "Etc/UTC";
+ 
+ 	  if (information.Bias % 60 != 0)
+ 	    // If the offset is not in full hours, we can't do anything really.
+ 	    return {};
+ 
+ 	  const auto raw_index = information.Bias / 60;
+ 
+ 	  // The bias added to the local time equals UTC. And GMT+X corresponds
+ 	  // to UTC-X, the sign is negated. Thus we can use the hourly bias as
+ 	  // an index into an array.
+ 	  if (raw_index < 0 && raw_index >= -14)
+ 	    {
+ 	      static constexpr array<string_view, 14> table{
+ 		"Etc/GMT-1",  "Etc/GMT-2",  "Etc/GMT-3",  "Etc/GMT-4",
+ 		"Etc/GMT-5",  "Etc/GMT-6",  "Etc/GMT-7",  "Etc/GMT-8",
+ 		"Etc/GMT-9",  "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12",
+ 		"Etc/GMT-13", "Etc/GMT-14"
+ 	      };
+ 	      return table[-raw_index - 1];
+ 	    }
+ 	  else if (raw_index > 0 && raw_index <= 12)
+ 	    {
+ 	      static constexpr array<string_view, 12> table{
+ 		"Etc/GMT+1", "Etc/GMT+2",  "Etc/GMT+3",	 "Etc/GMT+4",
+ 		"Etc/GMT+5", "Etc/GMT+6",  "Etc/GMT+7",	 "Etc/GMT+8",
+ 		"Etc/GMT+9", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12"
+ 	      };
+ 	      return table[raw_index - 1];
+ 	    }
+ 	  return {};
+ 	}
+ 
+ #include "windows_zones-map.h"
+ #ifndef _GLIBCXX_WINDOWS_ZONES_MAP_COMPLETE
+ # error "Invalid windows_zones map"
+ #endif
+ 
+       const auto zone_range
+ 	  = ranges::equal_range(windows_zone_map, zone_name, {},
+ 				&windows_zone_map_entry::windows_name);
+ 
+       const auto size = ranges::size(zone_range);
+       if (size == 0)
+ 	// Unknown zone, we can't detect anything.
+ 	return {};
+ 
+       if (size == 1)
+ 	// Some zones have only one territory, use the quick path.
+ 	return zone_range.front().iana_name;
+ 
+       const auto geo_id = GetUserGeoID(GEOCLASS_NATION);
+       // We ask for a 2-letter country code plus the zero terminator. "001" is
+       // only contained in the zone map, not returned by GetGeoInfoW.
+       wchar_t territory[3] = {};
+       if (GetGeoInfoW(geo_id, GEO_ISO2, territory, 3, 0) == 0)
+ 	// Couldn't detect the territory, fallback to "001", which is the first
+ 	// entry.
+ 	return zone_range.front().iana_name;
+ 
+       const auto iter = ranges::lower_bound(
+ 	  zone_range, territory, {}, &windows_zone_map_entry::territory);
+       if (iter == zone_range.end() || iter->territory != territory)
+ 	// Territory not within the the map, use "001".
+ 	return zone_range.front().iana_name;
+ 
+       return iter->iana_name;
+     }
+ #endif
    } // namespace
  
    // Implementation of std::chrono::tzdb::locate_zone(string_view).
*************** namespace std::chrono
*** 1756,1762 ****
    {
      // TODO cache this function's result?
  
! #ifndef _AIX
      // Repeat the preprocessor condition used by filesystem::read_symlink,
      // to avoid a dependency on src/c++17/fs_ops.o if it won't work anyway.
  #if defined(_GLIBCXX_HAVE_READLINK) && defined(_GLIBCXX_HAVE_SYS_STAT_H)
--- 1884,1890 ----
    {
      // TODO cache this function's result?
  
! #if !defined(_AIX) && !defined(_GLIBCXX_HAVE_WINDOWS_H)
      // Repeat the preprocessor condition used by filesystem::read_symlink,
      // to avoid a dependency on src/c++17/fs_ops.o if it won't work anyway.
  #if defined(_GLIBCXX_HAVE_READLINK) && defined(_GLIBCXX_HAVE_SYS_STAT_H)
*************** namespace std::chrono
*** 1813,1819 ****
  		  return tz;
  	      }
        }
! #else
      // AIX stores current zone in $TZ in /etc/environment but the value
      // is typically a POSIX time zone name, not IANA zone.
      // https://developer.ibm.com/articles/au-aix-posix/
--- 1941,1951 ----
  		  return tz;
  	      }
        }
! #elif defined(_GLIBCXX_HAVE_WINDOWS_H)
!     if (auto tz
! 	= do_locate_zone(this->zones, this->links, detect_windows_zone()))
!       return tz;
! #else // defined(_AIX)
      // AIX stores current zone in $TZ in /etc/environment but the value
      // is typically a POSIX time zone name, not IANA zone.
      // https://developer.ibm.com/articles/au-aix-posix/
diff -Nrcpad gcc-16-20250713/libstdc++-v3/src/c++20/windows_zones-map.h gcc-16-20250720/libstdc++-v3/src/c++20/windows_zones-map.h
*** gcc-16-20250713/libstdc++-v3/src/c++20/windows_zones-map.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/src/c++20/windows_zones-map.h	Sun Jul 20 22:32:36 2025
***************
*** 0 ****
--- 1,399 ----
+ // Generated by scripts/gen_windows_zones_map.py, do not edit.
+ 
+ // Copyright The GNU Toolchain Authors.
+ //
+ // 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/>.
+ 
+ 
+ struct windows_zone_map_entry
+ {
+   wstring_view windows_name;
+   wstring_view territory;
+   string_view iana_name;
+ };
+ 
+ static constexpr array<windows_zone_map_entry, 361> windows_zone_map{
+   {
+     {L"AUS Central Standard Time", L"001", "Australia/Darwin"},
+     {L"AUS Eastern Standard Time", L"001", "Australia/Sydney"},
+     {L"Afghanistan Standard Time", L"001", "Asia/Kabul"},
+     {L"Alaskan Standard Time", L"001", "America/Anchorage"},
+     {L"Aleutian Standard Time", L"001", "America/Adak"},
+     {L"Altai Standard Time", L"001", "Asia/Barnaul"},
+     {L"Arab Standard Time", L"001", "Asia/Riyadh"},
+     {L"Arab Standard Time", L"BH", "Asia/Bahrain"},
+     {L"Arab Standard Time", L"KW", "Asia/Kuwait"},
+     {L"Arab Standard Time", L"QA", "Asia/Qatar"},
+     {L"Arab Standard Time", L"YE", "Asia/Aden"},
+     {L"Arabian Standard Time", L"001", "Asia/Dubai"},
+     {L"Arabian Standard Time", L"OM", "Asia/Muscat"},
+     {L"Arabian Standard Time", L"ZZ", "Etc/GMT-4"},
+     {L"Arabic Standard Time", L"001", "Asia/Baghdad"},
+     {L"Argentina Standard Time", L"001", "America/Buenos_Aires"},
+     {L"Astrakhan Standard Time", L"001", "Europe/Astrakhan"},
+     {L"Atlantic Standard Time", L"001", "America/Halifax"},
+     {L"Atlantic Standard Time", L"BM", "Atlantic/Bermuda"},
+     {L"Atlantic Standard Time", L"GL", "America/Thule"},
+     {L"Aus Central W. Standard Time", L"001", "Australia/Eucla"},
+     {L"Azerbaijan Standard Time", L"001", "Asia/Baku"},
+     {L"Azores Standard Time", L"001", "Atlantic/Azores"},
+     {L"Azores Standard Time", L"GL", "America/Scoresbysund"},
+     {L"Bahia Standard Time", L"001", "America/Bahia"},
+     {L"Bangladesh Standard Time", L"001", "Asia/Dhaka"},
+     {L"Bangladesh Standard Time", L"BT", "Asia/Thimphu"},
+     {L"Belarus Standard Time", L"001", "Europe/Minsk"},
+     {L"Bougainville Standard Time", L"001", "Pacific/Bougainville"},
+     {L"Canada Central Standard Time", L"001", "America/Regina"},
+     {L"Cape Verde Standard Time", L"001", "Atlantic/Cape_Verde"},
+     {L"Cape Verde Standard Time", L"ZZ", "Etc/GMT+1"},
+     {L"Caucasus Standard Time", L"001", "Asia/Yerevan"},
+     {L"Cen. Australia Standard Time", L"001", "Australia/Adelaide"},
+     {L"Central America Standard Time", L"001", "America/Guatemala"},
+     {L"Central America Standard Time", L"BZ", "America/Belize"},
+     {L"Central America Standard Time", L"CR", "America/Costa_Rica"},
+     {L"Central America Standard Time", L"EC", "Pacific/Galapagos"},
+     {L"Central America Standard Time", L"HN", "America/Tegucigalpa"},
+     {L"Central America Standard Time", L"NI", "America/Managua"},
+     {L"Central America Standard Time", L"SV", "America/El_Salvador"},
+     {L"Central America Standard Time", L"ZZ", "Etc/GMT+6"},
+     {L"Central Asia Standard Time", L"001", "Asia/Bishkek"},
+     {L"Central Asia Standard Time", L"AQ", "Antarctica/Vostok"},
+     {L"Central Asia Standard Time", L"CN", "Asia/Urumqi"},
+     {L"Central Asia Standard Time", L"IO", "Indian/Chagos"},
+     {L"Central Asia Standard Time", L"ZZ", "Etc/GMT-6"},
+     {L"Central Brazilian Standard Time", L"001", "America/Cuiaba"},
+     {L"Central Europe Standard Time", L"001", "Europe/Budapest"},
+     {L"Central Europe Standard Time", L"AL", "Europe/Tirane"},
+     {L"Central Europe Standard Time", L"CZ", "Europe/Prague"},
+     {L"Central Europe Standard Time", L"ME", "Europe/Podgorica"},
+     {L"Central Europe Standard Time", L"RS", "Europe/Belgrade"},
+     {L"Central Europe Standard Time", L"SI", "Europe/Ljubljana"},
+     {L"Central Europe Standard Time", L"SK", "Europe/Bratislava"},
+     {L"Central European Standard Time", L"001", "Europe/Warsaw"},
+     {L"Central European Standard Time", L"BA", "Europe/Sarajevo"},
+     {L"Central European Standard Time", L"HR", "Europe/Zagreb"},
+     {L"Central European Standard Time", L"MK", "Europe/Skopje"},
+     {L"Central Pacific Standard Time", L"001", "Pacific/Guadalcanal"},
+     {L"Central Pacific Standard Time", L"AQ", "Antarctica/Casey"},
+     {L"Central Pacific Standard Time", L"FM", "Pacific/Ponape"},
+     {L"Central Pacific Standard Time", L"NC", "Pacific/Noumea"},
+     {L"Central Pacific Standard Time", L"VU", "Pacific/Efate"},
+     {L"Central Pacific Standard Time", L"ZZ", "Etc/GMT-11"},
+     {L"Central Standard Time", L"001", "America/Chicago"},
+     {L"Central Standard Time", L"CA", "America/Winnipeg"},
+     {L"Central Standard Time", L"MX", "America/Matamoros"},
+     {L"Central Standard Time (Mexico)", L"001", "America/Mexico_City"},
+     {L"Chatham Islands Standard Time", L"001", "Pacific/Chatham"},
+     {L"China Standard Time", L"001", "Asia/Shanghai"},
+     {L"China Standard Time", L"HK", "Asia/Hong_Kong"},
+     {L"China Standard Time", L"MO", "Asia/Macau"},
+     {L"Cuba Standard Time", L"001", "America/Havana"},
+     {L"Dateline Standard Time", L"001", "Etc/GMT+12"},
+     {L"E. Africa Standard Time", L"001", "Africa/Nairobi"},
+     {L"E. Africa Standard Time", L"AQ", "Antarctica/Syowa"},
+     {L"E. Africa Standard Time", L"DJ", "Africa/Djibouti"},
+     {L"E. Africa Standard Time", L"ER", "Africa/Asmera"},
+     {L"E. Africa Standard Time", L"ET", "Africa/Addis_Ababa"},
+     {L"E. Africa Standard Time", L"KM", "Indian/Comoro"},
+     {L"E. Africa Standard Time", L"MG", "Indian/Antananarivo"},
+     {L"E. Africa Standard Time", L"SO", "Africa/Mogadishu"},
+     {L"E. Africa Standard Time", L"TZ", "Africa/Dar_es_Salaam"},
+     {L"E. Africa Standard Time", L"UG", "Africa/Kampala"},
+     {L"E. Africa Standard Time", L"YT", "Indian/Mayotte"},
+     {L"E. Africa Standard Time", L"ZZ", "Etc/GMT-3"},
+     {L"E. Australia Standard Time", L"001", "Australia/Brisbane"},
+     {L"E. Europe Standard Time", L"001", "Europe/Chisinau"},
+     {L"E. South America Standard Time", L"001", "America/Sao_Paulo"},
+     {L"Easter Island Standard Time", L"001", "Pacific/Easter"},
+     {L"Eastern Standard Time", L"001", "America/New_York"},
+     {L"Eastern Standard Time", L"BS", "America/Nassau"},
+     {L"Eastern Standard Time", L"CA", "America/Toronto"},
+     {L"Eastern Standard Time (Mexico)", L"001", "America/Cancun"},
+     {L"Egypt Standard Time", L"001", "Africa/Cairo"},
+     {L"Ekaterinburg Standard Time", L"001", "Asia/Yekaterinburg"},
+     {L"FLE Standard Time", L"001", "Europe/Kiev"},
+     {L"FLE Standard Time", L"AX", "Europe/Mariehamn"},
+     {L"FLE Standard Time", L"BG", "Europe/Sofia"},
+     {L"FLE Standard Time", L"EE", "Europe/Tallinn"},
+     {L"FLE Standard Time", L"FI", "Europe/Helsinki"},
+     {L"FLE Standard Time", L"LT", "Europe/Vilnius"},
+     {L"FLE Standard Time", L"LV", "Europe/Riga"},
+     {L"Fiji Standard Time", L"001", "Pacific/Fiji"},
+     {L"GMT Standard Time", L"001", "Europe/London"},
+     {L"GMT Standard Time", L"ES", "Atlantic/Canary"},
+     {L"GMT Standard Time", L"FO", "Atlantic/Faeroe"},
+     {L"GMT Standard Time", L"GG", "Europe/Guernsey"},
+     {L"GMT Standard Time", L"IE", "Europe/Dublin"},
+     {L"GMT Standard Time", L"IM", "Europe/Isle_of_Man"},
+     {L"GMT Standard Time", L"JE", "Europe/Jersey"},
+     {L"GMT Standard Time", L"PT", "Europe/Lisbon"},
+     {L"GTB Standard Time", L"001", "Europe/Bucharest"},
+     {L"GTB Standard Time", L"CY", "Asia/Nicosia"},
+     {L"GTB Standard Time", L"GR", "Europe/Athens"},
+     {L"Georgian Standard Time", L"001", "Asia/Tbilisi"},
+     {L"Greenland Standard Time", L"001", "America/Godthab"},
+     {L"Greenwich Standard Time", L"001", "Atlantic/Reykjavik"},
+     {L"Greenwich Standard Time", L"BF", "Africa/Ouagadougou"},
+     {L"Greenwich Standard Time", L"CI", "Africa/Abidjan"},
+     {L"Greenwich Standard Time", L"GH", "Africa/Accra"},
+     {L"Greenwich Standard Time", L"GL", "America/Danmarkshavn"},
+     {L"Greenwich Standard Time", L"GM", "Africa/Banjul"},
+     {L"Greenwich Standard Time", L"GN", "Africa/Conakry"},
+     {L"Greenwich Standard Time", L"GW", "Africa/Bissau"},
+     {L"Greenwich Standard Time", L"LR", "Africa/Monrovia"},
+     {L"Greenwich Standard Time", L"ML", "Africa/Bamako"},
+     {L"Greenwich Standard Time", L"MR", "Africa/Nouakchott"},
+     {L"Greenwich Standard Time", L"SH", "Atlantic/St_Helena"},
+     {L"Greenwich Standard Time", L"SL", "Africa/Freetown"},
+     {L"Greenwich Standard Time", L"SN", "Africa/Dakar"},
+     {L"Greenwich Standard Time", L"TG", "Africa/Lome"},
+     {L"Haiti Standard Time", L"001", "America/Port-au-Prince"},
+     {L"Hawaiian Standard Time", L"001", "Pacific/Honolulu"},
+     {L"Hawaiian Standard Time", L"CK", "Pacific/Rarotonga"},
+     {L"Hawaiian Standard Time", L"PF", "Pacific/Tahiti"},
+     {L"Hawaiian Standard Time", L"ZZ", "Etc/GMT+10"},
+     {L"India Standard Time", L"001", "Asia/Calcutta"},
+     {L"Iran Standard Time", L"001", "Asia/Tehran"},
+     {L"Israel Standard Time", L"001", "Asia/Jerusalem"},
+     {L"Jordan Standard Time", L"001", "Asia/Amman"},
+     {L"Kaliningrad Standard Time", L"001", "Europe/Kaliningrad"},
+     {L"Korea Standard Time", L"001", "Asia/Seoul"},
+     {L"Libya Standard Time", L"001", "Africa/Tripoli"},
+     {L"Line Islands Standard Time", L"001", "Pacific/Kiritimati"},
+     {L"Line Islands Standard Time", L"ZZ", "Etc/GMT-14"},
+     {L"Lord Howe Standard Time", L"001", "Australia/Lord_Howe"},
+     {L"Magadan Standard Time", L"001", "Asia/Magadan"},
+     {L"Magallanes Standard Time", L"001", "America/Punta_Arenas"},
+     {L"Marquesas Standard Time", L"001", "Pacific/Marquesas"},
+     {L"Mauritius Standard Time", L"001", "Indian/Mauritius"},
+     {L"Mauritius Standard Time", L"RE", "Indian/Reunion"},
+     {L"Mauritius Standard Time", L"SC", "Indian/Mahe"},
+     {L"Middle East Standard Time", L"001", "Asia/Beirut"},
+     {L"Montevideo Standard Time", L"001", "America/Montevideo"},
+     {L"Morocco Standard Time", L"001", "Africa/Casablanca"},
+     {L"Morocco Standard Time", L"EH", "Africa/El_Aaiun"},
+     {L"Mountain Standard Time", L"001", "America/Denver"},
+     {L"Mountain Standard Time", L"CA", "America/Edmonton"},
+     {L"Mountain Standard Time", L"MX", "America/Ciudad_Juarez"},
+     {L"Mountain Standard Time (Mexico)", L"001", "America/Mazatlan"},
+     {L"Myanmar Standard Time", L"001", "Asia/Rangoon"},
+     {L"Myanmar Standard Time", L"CC", "Indian/Cocos"},
+     {L"N. Central Asia Standard Time", L"001", "Asia/Novosibirsk"},
+     {L"Namibia Standard Time", L"001", "Africa/Windhoek"},
+     {L"Nepal Standard Time", L"001", "Asia/Katmandu"},
+     {L"New Zealand Standard Time", L"001", "Pacific/Auckland"},
+     {L"New Zealand Standard Time", L"AQ", "Antarctica/McMurdo"},
+     {L"Newfoundland Standard Time", L"001", "America/St_Johns"},
+     {L"Norfolk Standard Time", L"001", "Pacific/Norfolk"},
+     {L"North Asia East Standard Time", L"001", "Asia/Irkutsk"},
+     {L"North Asia Standard Time", L"001", "Asia/Krasnoyarsk"},
+     {L"North Korea Standard Time", L"001", "Asia/Pyongyang"},
+     {L"Omsk Standard Time", L"001", "Asia/Omsk"},
+     {L"Pacific SA Standard Time", L"001", "America/Santiago"},
+     {L"Pacific Standard Time", L"001", "America/Los_Angeles"},
+     {L"Pacific Standard Time", L"CA", "America/Vancouver"},
+     {L"Pacific Standard Time (Mexico)", L"001", "America/Tijuana"},
+     {L"Pakistan Standard Time", L"001", "Asia/Karachi"},
+     {L"Paraguay Standard Time", L"001", "America/Asuncion"},
+     {L"Qyzylorda Standard Time", L"001", "Asia/Qyzylorda"},
+     {L"Romance Standard Time", L"001", "Europe/Paris"},
+     {L"Romance Standard Time", L"BE", "Europe/Brussels"},
+     {L"Romance Standard Time", L"DK", "Europe/Copenhagen"},
+     {L"Romance Standard Time", L"ES", "Europe/Madrid"},
+     {L"Russia Time Zone 10", L"001", "Asia/Srednekolymsk"},
+     {L"Russia Time Zone 11", L"001", "Asia/Kamchatka"},
+     {L"Russia Time Zone 3", L"001", "Europe/Samara"},
+     {L"Russian Standard Time", L"001", "Europe/Moscow"},
+     {L"Russian Standard Time", L"UA", "Europe/Simferopol"},
+     {L"SA Eastern Standard Time", L"001", "America/Cayenne"},
+     {L"SA Eastern Standard Time", L"AQ", "Antarctica/Rothera"},
+     {L"SA Eastern Standard Time", L"BR", "America/Fortaleza"},
+     {L"SA Eastern Standard Time", L"FK", "Atlantic/Stanley"},
+     {L"SA Eastern Standard Time", L"SR", "America/Paramaribo"},
+     {L"SA Eastern Standard Time", L"ZZ", "Etc/GMT+3"},
+     {L"SA Pacific Standard Time", L"001", "America/Bogota"},
+     {L"SA Pacific Standard Time", L"BR", "America/Rio_Branco"},
+     {L"SA Pacific Standard Time", L"CA", "America/Coral_Harbour"},
+     {L"SA Pacific Standard Time", L"EC", "America/Guayaquil"},
+     {L"SA Pacific Standard Time", L"JM", "America/Jamaica"},
+     {L"SA Pacific Standard Time", L"KY", "America/Cayman"},
+     {L"SA Pacific Standard Time", L"PA", "America/Panama"},
+     {L"SA Pacific Standard Time", L"PE", "America/Lima"},
+     {L"SA Pacific Standard Time", L"ZZ", "Etc/GMT+5"},
+     {L"SA Western Standard Time", L"001", "America/La_Paz"},
+     {L"SA Western Standard Time", L"AG", "America/Antigua"},
+     {L"SA Western Standard Time", L"AI", "America/Anguilla"},
+     {L"SA Western Standard Time", L"AW", "America/Aruba"},
+     {L"SA Western Standard Time", L"BB", "America/Barbados"},
+     {L"SA Western Standard Time", L"BL", "America/St_Barthelemy"},
+     {L"SA Western Standard Time", L"BQ", "America/Kralendijk"},
+     {L"SA Western Standard Time", L"BR", "America/Manaus"},
+     {L"SA Western Standard Time", L"CA", "America/Blanc-Sablon"},
+     {L"SA Western Standard Time", L"CW", "America/Curacao"},
+     {L"SA Western Standard Time", L"DM", "America/Dominica"},
+     {L"SA Western Standard Time", L"DO", "America/Santo_Domingo"},
+     {L"SA Western Standard Time", L"GD", "America/Grenada"},
+     {L"SA Western Standard Time", L"GP", "America/Guadeloupe"},
+     {L"SA Western Standard Time", L"GY", "America/Guyana"},
+     {L"SA Western Standard Time", L"KN", "America/St_Kitts"},
+     {L"SA Western Standard Time", L"LC", "America/St_Lucia"},
+     {L"SA Western Standard Time", L"MF", "America/Marigot"},
+     {L"SA Western Standard Time", L"MQ", "America/Martinique"},
+     {L"SA Western Standard Time", L"MS", "America/Montserrat"},
+     {L"SA Western Standard Time", L"PR", "America/Puerto_Rico"},
+     {L"SA Western Standard Time", L"SX", "America/Lower_Princes"},
+     {L"SA Western Standard Time", L"TT", "America/Port_of_Spain"},
+     {L"SA Western Standard Time", L"VC", "America/St_Vincent"},
+     {L"SA Western Standard Time", L"VG", "America/Tortola"},
+     {L"SA Western Standard Time", L"VI", "America/St_Thomas"},
+     {L"SA Western Standard Time", L"ZZ", "Etc/GMT+4"},
+     {L"SE Asia Standard Time", L"001", "Asia/Bangkok"},
+     {L"SE Asia Standard Time", L"AQ", "Antarctica/Davis"},
+     {L"SE Asia Standard Time", L"CX", "Indian/Christmas"},
+     {L"SE Asia Standard Time", L"ID", "Asia/Jakarta"},
+     {L"SE Asia Standard Time", L"KH", "Asia/Phnom_Penh"},
+     {L"SE Asia Standard Time", L"LA", "Asia/Vientiane"},
+     {L"SE Asia Standard Time", L"VN", "Asia/Saigon"},
+     {L"SE Asia Standard Time", L"ZZ", "Etc/GMT-7"},
+     {L"Saint Pierre Standard Time", L"001", "America/Miquelon"},
+     {L"Sakhalin Standard Time", L"001", "Asia/Sakhalin"},
+     {L"Samoa Standard Time", L"001", "Pacific/Apia"},
+     {L"Sao Tome Standard Time", L"001", "Africa/Sao_Tome"},
+     {L"Saratov Standard Time", L"001", "Europe/Saratov"},
+     {L"Singapore Standard Time", L"001", "Asia/Singapore"},
+     {L"Singapore Standard Time", L"BN", "Asia/Brunei"},
+     {L"Singapore Standard Time", L"ID", "Asia/Makassar"},
+     {L"Singapore Standard Time", L"MY", "Asia/Kuala_Lumpur"},
+     {L"Singapore Standard Time", L"PH", "Asia/Manila"},
+     {L"Singapore Standard Time", L"ZZ", "Etc/GMT-8"},
+     {L"South Africa Standard Time", L"001", "Africa/Johannesburg"},
+     {L"South Africa Standard Time", L"BI", "Africa/Bujumbura"},
+     {L"South Africa Standard Time", L"BW", "Africa/Gaborone"},
+     {L"South Africa Standard Time", L"CD", "Africa/Lubumbashi"},
+     {L"South Africa Standard Time", L"LS", "Africa/Maseru"},
+     {L"South Africa Standard Time", L"MW", "Africa/Blantyre"},
+     {L"South Africa Standard Time", L"MZ", "Africa/Maputo"},
+     {L"South Africa Standard Time", L"RW", "Africa/Kigali"},
+     {L"South Africa Standard Time", L"SZ", "Africa/Mbabane"},
+     {L"South Africa Standard Time", L"ZM", "Africa/Lusaka"},
+     {L"South Africa Standard Time", L"ZW", "Africa/Harare"},
+     {L"South Africa Standard Time", L"ZZ", "Etc/GMT-2"},
+     {L"South Sudan Standard Time", L"001", "Africa/Juba"},
+     {L"Sri Lanka Standard Time", L"001", "Asia/Colombo"},
+     {L"Sudan Standard Time", L"001", "Africa/Khartoum"},
+     {L"Syria Standard Time", L"001", "Asia/Damascus"},
+     {L"Taipei Standard Time", L"001", "Asia/Taipei"},
+     {L"Tasmania Standard Time", L"001", "Australia/Hobart"},
+     {L"Tocantins Standard Time", L"001", "America/Araguaina"},
+     {L"Tokyo Standard Time", L"001", "Asia/Tokyo"},
+     {L"Tokyo Standard Time", L"ID", "Asia/Jayapura"},
+     {L"Tokyo Standard Time", L"PW", "Pacific/Palau"},
+     {L"Tokyo Standard Time", L"TL", "Asia/Dili"},
+     {L"Tokyo Standard Time", L"ZZ", "Etc/GMT-9"},
+     {L"Tomsk Standard Time", L"001", "Asia/Tomsk"},
+     {L"Tonga Standard Time", L"001", "Pacific/Tongatapu"},
+     {L"Transbaikal Standard Time", L"001", "Asia/Chita"},
+     {L"Turkey Standard Time", L"001", "Europe/Istanbul"},
+     {L"Turks And Caicos Standard Time", L"001", "America/Grand_Turk"},
+     {L"US Eastern Standard Time", L"001", "America/Indianapolis"},
+     {L"US Mountain Standard Time", L"001", "America/Phoenix"},
+     {L"US Mountain Standard Time", L"CA", "America/Creston"},
+     {L"US Mountain Standard Time", L"MX", "America/Hermosillo"},
+     {L"US Mountain Standard Time", L"ZZ", "Etc/GMT+7"},
+     {L"UTC", L"001", "Etc/UTC"},
+     {L"UTC+12", L"001", "Etc/GMT-12"},
+     {L"UTC+12", L"KI", "Pacific/Tarawa"},
+     {L"UTC+12", L"MH", "Pacific/Majuro"},
+     {L"UTC+12", L"NR", "Pacific/Nauru"},
+     {L"UTC+12", L"TV", "Pacific/Funafuti"},
+     {L"UTC+12", L"UM", "Pacific/Wake"},
+     {L"UTC+12", L"WF", "Pacific/Wallis"},
+     {L"UTC+13", L"001", "Etc/GMT-13"},
+     {L"UTC+13", L"KI", "Pacific/Enderbury"},
+     {L"UTC+13", L"TK", "Pacific/Fakaofo"},
+     {L"UTC-02", L"001", "Etc/GMT+2"},
+     {L"UTC-02", L"BR", "America/Noronha"},
+     {L"UTC-02", L"GS", "Atlantic/South_Georgia"},
+     {L"UTC-08", L"001", "Etc/GMT+8"},
+     {L"UTC-08", L"PN", "Pacific/Pitcairn"},
+     {L"UTC-09", L"001", "Etc/GMT+9"},
+     {L"UTC-09", L"PF", "Pacific/Gambier"},
+     {L"UTC-11", L"001", "Etc/GMT+11"},
+     {L"UTC-11", L"AS", "Pacific/Pago_Pago"},
+     {L"UTC-11", L"NU", "Pacific/Niue"},
+     {L"UTC-11", L"UM", "Pacific/Midway"},
+     {L"Ulaanbaatar Standard Time", L"001", "Asia/Ulaanbaatar"},
+     {L"Venezuela Standard Time", L"001", "America/Caracas"},
+     {L"Vladivostok Standard Time", L"001", "Asia/Vladivostok"},
+     {L"Volgograd Standard Time", L"001", "Europe/Volgograd"},
+     {L"W. Australia Standard Time", L"001", "Australia/Perth"},
+     {L"W. Central Africa Standard Time", L"001", "Africa/Lagos"},
+     {L"W. Central Africa Standard Time", L"AO", "Africa/Luanda"},
+     {L"W. Central Africa Standard Time", L"BJ", "Africa/Porto-Novo"},
+     {L"W. Central Africa Standard Time", L"CD", "Africa/Kinshasa"},
+     {L"W. Central Africa Standard Time", L"CF", "Africa/Bangui"},
+     {L"W. Central Africa Standard Time", L"CG", "Africa/Brazzaville"},
+     {L"W. Central Africa Standard Time", L"CM", "Africa/Douala"},
+     {L"W. Central Africa Standard Time", L"DZ", "Africa/Algiers"},
+     {L"W. Central Africa Standard Time", L"GA", "Africa/Libreville"},
+     {L"W. Central Africa Standard Time", L"GQ", "Africa/Malabo"},
+     {L"W. Central Africa Standard Time", L"NE", "Africa/Niamey"},
+     {L"W. Central Africa Standard Time", L"TD", "Africa/Ndjamena"},
+     {L"W. Central Africa Standard Time", L"TN", "Africa/Tunis"},
+     {L"W. Central Africa Standard Time", L"ZZ", "Etc/GMT-1"},
+     {L"W. Europe Standard Time", L"001", "Europe/Berlin"},
+     {L"W. Europe Standard Time", L"AD", "Europe/Andorra"},
+     {L"W. Europe Standard Time", L"AT", "Europe/Vienna"},
+     {L"W. Europe Standard Time", L"CH", "Europe/Zurich"},
+     {L"W. Europe Standard Time", L"GI", "Europe/Gibraltar"},
+     {L"W. Europe Standard Time", L"IT", "Europe/Rome"},
+     {L"W. Europe Standard Time", L"LI", "Europe/Vaduz"},
+     {L"W. Europe Standard Time", L"LU", "Europe/Luxembourg"},
+     {L"W. Europe Standard Time", L"MC", "Europe/Monaco"},
+     {L"W. Europe Standard Time", L"MT", "Europe/Malta"},
+     {L"W. Europe Standard Time", L"NL", "Europe/Amsterdam"},
+     {L"W. Europe Standard Time", L"NO", "Europe/Oslo"},
+     {L"W. Europe Standard Time", L"SE", "Europe/Stockholm"},
+     {L"W. Europe Standard Time", L"SJ", "Arctic/Longyearbyen"},
+     {L"W. Europe Standard Time", L"SM", "Europe/San_Marino"},
+     {L"W. Europe Standard Time", L"VA", "Europe/Vatican"},
+     {L"W. Mongolia Standard Time", L"001", "Asia/Hovd"},
+     {L"West Asia Standard Time", L"001", "Asia/Tashkent"},
+     {L"West Asia Standard Time", L"AQ", "Antarctica/Mawson"},
+     {L"West Asia Standard Time", L"KZ", "Asia/Oral"},
+     {L"West Asia Standard Time", L"MV", "Indian/Maldives"},
+     {L"West Asia Standard Time", L"TF", "Indian/Kerguelen"},
+     {L"West Asia Standard Time", L"TJ", "Asia/Dushanbe"},
+     {L"West Asia Standard Time", L"TM", "Asia/Ashgabat"},
+     {L"West Asia Standard Time", L"ZZ", "Etc/GMT-5"},
+     {L"West Bank Standard Time", L"001", "Asia/Hebron"},
+     {L"West Pacific Standard Time", L"001", "Pacific/Port_Moresby"},
+     {L"West Pacific Standard Time", L"AQ", "Antarctica/DumontDUrville"},
+     {L"West Pacific Standard Time", L"FM", "Pacific/Truk"},
+     {L"West Pacific Standard Time", L"GU", "Pacific/Guam"},
+     {L"West Pacific Standard Time", L"MP", "Pacific/Saipan"},
+     {L"West Pacific Standard Time", L"ZZ", "Etc/GMT-10"},
+     {L"Yakutsk Standard Time", L"001", "Asia/Yakutsk"},
+     {L"Yukon Standard Time", L"001", "America/Whitehorse"},
+   }
+ };
+ 
+ #define _GLIBCXX_WINDOWS_ZONES_MAP_COMPLETE
diff -Nrcpad gcc-16-20250713/libstdc++-v3/src/c++23/std.cc.in gcc-16-20250720/libstdc++-v3/src/c++23/std.cc.in
*** gcc-16-20250713/libstdc++-v3/src/c++23/std.cc.in	Sun Jul 13 22:33:05 2025
--- gcc-16-20250720/libstdc++-v3/src/c++23/std.cc.in	Sun Jul 20 22:32:36 2025
*************** export namespace std
*** 1513,1519 ****
    using std::initializer_list;
  }
  
! // <inplace_vector> FIXME
  
  // <iomanip>
  export namespace std
--- 1513,1527 ----
    using std::initializer_list;
  }
  
! // <inplace_vector>
! #if __cpp_lib_inplace_vector
! export namespace std
! {
!   using std::inplace_vector;
!   using std::erase;
!   using std::erase_if;
! }
! #endif
  
  // <iomanip>
  export namespace std
*************** export namespace std
*** 1842,1853 ****
  export namespace std
  {
    using std::extents;
    using std::layout_left;
    using std::layout_right;
    using std::layout_stride;
    using std::default_accessor;
    using std::mdspan;
!   // FIXME layout_left_padded, layout_right_padded, aligned_accessor, mdsubspan
  }
  #endif
  
--- 1850,1864 ----
  export namespace std
  {
    using std::extents;
+   using std::dextents;
    using std::layout_left;
    using std::layout_right;
    using std::layout_stride;
    using std::default_accessor;
    using std::mdspan;
!   // FIXME layout_left_padded, layout_right_padded, aligned_accessor,
!   // strided_slice, submdspan_mapping_result, full_extent_t, full_extent,
!   // submdspan_extents, mdsubspan
  }
  #endif
  
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/18_support/exception/version.cc gcc-16-20250720/libstdc++-v3/testsuite/18_support/exception/version.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/18_support/exception/version.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/18_support/exception/version.cc	Sun Jul 20 22:32:37 2025
***************
*** 0 ****
--- 1,9 ----
+ // { dg-do preprocess { target c++26 } }
+ // { dg-add-options no_pch }
+ 
+ #include <exception>
+ 
+ #ifdef __cpp_lib_constexpr_exceptions
+ # error "Feature test macro for constexpr_exceptions should not be provided by <exception>"
+ #endif
+ 
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/20_util/hash/int128.cc gcc-16-20250720/libstdc++-v3/testsuite/20_util/hash/int128.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/20_util/hash/int128.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/20_util/hash/int128.cc	Sun Jul 20 22:32:37 2025
***************
*** 0 ****
--- 1,20 ----
+ // { dg-do run { target c++11 } }
+ // { dg-add-options strict_std }
+ 
+ #include <functional>
+ #include <testsuite_hooks.h>
+ 
+ int main()
+ {
+ #ifdef __SIZEOF_INT128__
+   std::hash<__int128> h;
+   __int128 i = (__int128)0x123456789;
+   VERIFY( h(i) == (std::size_t)i );
+   VERIFY( h(-i) == (std::size_t)-i );
+   VERIFY( h(~i) == (std::size_t)~i );
+   std::hash<unsigned __int128> hu;
+   unsigned __int128 u = i;
+   VERIFY( hu(u) == (std::size_t)u );
+   VERIFY( hu(~u) == (std::size_t)~u );
+ #endif
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/20_util/make_unsigned/int128.cc gcc-16-20250720/libstdc++-v3/testsuite/20_util/make_unsigned/int128.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/20_util/make_unsigned/int128.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/20_util/make_unsigned/int128.cc	Sun Jul 20 22:32:40 2025
***************
*** 0 ****
--- 1,14 ----
+ // { dg-do compile { target c++11 } }
+ // { dg-add-options strict_std }
+ 
+ #include <type_traits>
+ 
+ #ifdef __SIZEOF_INT128__
+ enum E : __int128 { };
+ using U = std::make_unsigned<E>::type;
+ static_assert( std::is_integral<U>::value, "type is an integer" );
+ static_assert( sizeof(U) == sizeof(E), "width of type is 128 bits" );
+ using I = std::make_signed<E>::type;
+ static_assert( std::is_integral<I>::value, "type is an integer" );
+ static_assert( sizeof(I) == sizeof(E), "width of type is 128 bits" );
+ #endif
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/20_util/specialized_algorithms/destroy/121024.cc gcc-16-20250720/libstdc++-v3/testsuite/20_util/specialized_algorithms/destroy/121024.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/20_util/specialized_algorithms/destroy/121024.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/20_util/specialized_algorithms/destroy/121024.cc	Sun Jul 20 22:32:40 2025
***************
*** 0 ****
--- 1,77 ----
+ // { dg-do compile { target c++26 } }
+ 
+ // Bug 121024
+ // ranges::destroy and ranges::destroy_n do not end lifetime of trivial types
+ 
+ #include <memory>
+ 
+ consteval bool is_within_lifetime(const auto* p) noexcept
+ {
+   return __builtin_constant_p(*p);
+ }
+ 
+ template<typename T>
+ struct Buf
+ {
+   constexpr Buf() : p(std::allocator<T>().allocate(2)) { }
+   constexpr ~Buf() { std::allocator<T>().deallocate(p, 2); }
+   T* p;
+ };
+ 
+ template<typename T>
+ consteval bool
+ test_destroy()
+ {
+   Buf<T> buf;
+   std::uninitialized_value_construct(buf.p, buf.p + 2);
+   std::destroy(buf.p, buf.p + 2);
+   return not is_within_lifetime(buf.p) && not is_within_lifetime(buf.p + 1);
+ }
+ 
+ template<typename T>
+ consteval bool
+ test_destroy_n()
+ {
+   Buf<T> buf;
+   std::uninitialized_value_construct_n(buf.p, 2);
+   std::destroy_n(buf.p, 2);
+   return not is_within_lifetime(buf.p) && not is_within_lifetime(buf.p + 1);
+ }
+ 
+ template<typename T>
+ consteval bool
+ test_ranges_destroy()
+ {
+   Buf<T> buf;
+   std::uninitialized_value_construct(buf.p, buf.p + 2);
+   std::ranges::destroy(buf.p, buf.p + 2);
+   return not is_within_lifetime(buf.p) && not is_within_lifetime(buf.p + 1);
+ }
+ 
+ template<typename T>
+ consteval bool
+ test_ranges_destroy_n()
+ {
+   Buf<T> buf;
+   std::uninitialized_value_construct_n(buf.p, 2);
+   std::ranges::destroy_n(buf.p, 2);
+   return not is_within_lifetime(buf.p) && not is_within_lifetime(buf.p + 1);
+ }
+ 
+ struct O
+ {
+   constexpr O() { }
+   constexpr ~O() { }
+ };
+ 
+ // These all fail for GCC because is_within_lifetime still returns true
+ // after the lifetime has been ended.
+ // { dg-xfail-if "PR c++/102284" { *-*-* } }
+ static_assert( test_destroy<int>() );
+ static_assert( test_destroy<O>() );
+ static_assert( test_destroy_n<int>() );
+ static_assert( test_destroy_n<O>() );
+ static_assert( test_ranges_destroy<int>() );
+ static_assert( test_ranges_destroy<O>() );
+ static_assert( test_ranges_destroy_n<int>() );
+ static_assert( test_ranges_destroy_n<O>() );
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc	Sun Jul 13 22:33:06 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc	Sun Jul 20 22:32:41 2025
*************** int n1 = std::get<1>(a);
*** 26,31 ****
  int n2 = std::get<1>(std::move(a));
  int n3 = std::get<1>(ca);
  
! // { dg-error "static assertion failed" "" { target *-*-* } 394 }
! // { dg-error "static assertion failed" "" { target *-*-* } 403 }
! // { dg-error "static assertion failed" "" { target *-*-* } 412 }
--- 26,31 ----
  int n2 = std::get<1>(std::move(a));
  int n3 = std::get<1>(ca);
  
! // { dg-error "static assertion failed" "" { target *-*-* } 396 }
! // { dg-error "static assertion failed" "" { target *-*-* } 405 }
! // { dg-error "static assertion failed" "" { target *-*-* } 414 }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/access/capacity.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/access/capacity.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/access/capacity.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/access/capacity.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,51 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ 
+ #include <span>
+ #include <testsuite_hooks.h>
+ 
+ template<size_t N, typename T>
+ constexpr void
+ test_reserve()
+ {
+   std::inplace_vector<T, N> v;
+ 
+   static_assert(v.max_size() == N);
+   static_assert(v.capacity() == N);
+ 
+   // static methods
+   v.shrink_to_fit();
+   v.reserve(0);
+   v.reserve(N);
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   try
+   {
+     v.reserve(N + 2);
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+ #endif
+ }
+ 
+ int main()
+ {
+   auto test_all = [] {
+     test_reserve<0, int>();
+     test_reserve<4, int>();
+     return true;
+   };
+ 
+   test_all();
+   static_assert(test_all());;
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,103 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ 
+ #include <span>
+ #include <stdexcept>
+ #include <testsuite_hooks.h>
+ #include <utility>
+ 
+ template<size_t N, typename T>
+ constexpr void
+ test_out_of_capacity()
+ {
+   std::inplace_vector<T, N> v;
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   try
+   {
+     (void)v.at(N + 2);
+     VERIFY(false);
+   }
+   catch (std::out_of_range const&)
+   {
+   }
+ 
+   try
+   {
+     (void)as_const(v).at(N + 2);
+     VERIFY(false);
+   }
+   catch (std::out_of_range const&)
+   {
+   }
+ #endif
+ }
+ 
+ template<typename T>
+ constexpr void
+ test_access()
+ {
+   std::inplace_vector<T, 10> v{1, 2, 3, 4, 5};
+ 
+   auto& e3a = v[2];
+   auto& e3b = std::as_const(v).at(2);
+   VERIFY( &e3a == &e3b );
+   VERIFY( &e3a == &v.begin()[2] );
+   VERIFY( &e3a == std::as_const(v).data() + 2 );
+   VERIFY( e3a == T(3) );
+ 
+   auto& e4a = as_const(v)[4];
+   auto& e4b = v.at(4);
+   VERIFY( &e4a == &e4b );
+   VERIFY( &e4a == &v.cbegin()[4] );
+   VERIFY( &e4a == v.data() + 4 );
+   VERIFY( e4a == T(5) );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   try
+   {
+     (void)v.at(7);
+     VERIFY(false);
+   }
+   catch (std::out_of_range const&)
+   {
+   }
+ 
+   try
+   {
+     (void)as_const(v).at(7);
+     VERIFY(false);
+   }
+   catch (std::out_of_range const&)
+   {
+   }
+ #endif
+ }
+ 
+ int main()
+ {
+   auto test_all = [] {
+     test_out_of_capacity<0, int>();
+     test_out_of_capacity<4, int>();
+     test_access<int>();
+     return true;
+   };
+ 
+   test_all();
+   static_assert(test_all());;
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem_neg.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem_neg.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem_neg.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,29 ----
+ // { dg-do compile { target c++26 } }
+ 
+ #include <inplace_vector>
+ 
+ template<size_t N, typename T>
+ constexpr bool
+ test_out_of_capacity()
+ {
+   std::inplace_vector<T, N> v;
+   (void)v[N+2]; // { dg-error "in 'constexpr' expansion of" }
+   return true;
+ }
+ 
+ template<typename T>
+ constexpr bool
+ test_out_of_size()
+ {
+   std::inplace_vector<T, 10> v{1, 2, 3, 4, 5};
+   (void)v[7]; // { dg-error "in 'constexpr' expansion of" }
+   return true;
+ }
+ 
+ static_assert(test_out_of_capacity<0, int>()); // { dg-error "in 'constexpr' expansion of" }
+ static_assert(test_out_of_capacity<4, int>()); // { dg-error "in 'constexpr' expansion of" }
+ static_assert(test_out_of_size<int>());        // { dg-error "in 'constexpr' expansion of" }
+ 
+ // { dg-prune-output "non-constant condition for static assertion" }
+ // { dg-prune-output "is not a constant expression" }
+ // { dg-prune-output "call to non-'constexpr' function" }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,385 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ #include <testsuite_hooks.h>
+ 
+ struct X
+ {
+   constexpr X() { } // not trivially default constructible
+ };
+ 
+ struct N
+ {
+   constexpr N() noexcept { } // not trivially default constructible
+ };
+ 
+ struct D
+ {
+   ~D() {} // not trivially destructible
+ };
+ 
+ struct U
+ {
+   U() noexcept(false) = default; // lies about noexcept
+ };
+ 
+ // n5008 inplace.vector.overview says for inplace_vector<T, 0>
+ // provides trivial copy/move/default cosntructpr regardless of T
+ struct Z
+ {
+   constexpr Z(int) {}
+   Z() = delete;
+ };
+ 
+ static_assert(std::is_default_constructible_v<std::inplace_vector<int, 2>>);
+ static_assert(std::is_default_constructible_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_default_constructible_v<std::inplace_vector<N, 2>>);
+ static_assert(std::is_default_constructible_v<std::inplace_vector<D, 2>>);
+ static_assert(std::is_default_constructible_v<std::inplace_vector<U, 2>>);
+ // The operators are not constrained, as for any other container
+ static_assert(std::is_default_constructible_v<std::inplace_vector<Z, 2>>);
+ 
+ static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<int, 2>>);
+ static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<N, 2>>);
+ static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<D, 2>>);
+ static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<U, 2>>);
+ 
+ // Needs to set size to zero, not trivial
+ static_assert(!std::is_trivially_default_constructible_v<std::inplace_vector<int, 2>>);
+ static_assert(!std::is_trivially_default_constructible_v<std::inplace_vector<X, 2>>);
+ static_assert(!std::is_trivially_default_constructible_v<std::inplace_vector<N, 2>>);
+ static_assert(!std::is_trivially_default_constructible_v<std::inplace_vector<D, 2>>);
+ static_assert(!std::is_trivially_default_constructible_v<std::inplace_vector<U, 2>>);
+ 
+ static_assert(std::is_trivially_destructible_v<std::inplace_vector<int, 2>>);
+ static_assert(std::is_trivially_destructible_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_trivially_destructible_v<std::inplace_vector<N, 2>>);
+ static_assert(!std::is_trivially_destructible_v<std::inplace_vector<D, 2>>);
+ static_assert(std::is_trivially_destructible_v<std::inplace_vector<U, 2>>);
+ 
+ static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<N, 0>>);
+ static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<U, 0>>);
+ 
+ // Size is always zero, so trivial
+ static_assert(std::is_trivially_default_constructible_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_trivially_default_constructible_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_trivially_default_constructible_v<std::inplace_vector<N, 0>>);
+ static_assert(std::is_trivially_default_constructible_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_trivially_default_constructible_v<std::inplace_vector<U, 0>>);
+ static_assert(std::is_trivially_default_constructible_v<std::inplace_vector<Z, 0>>);
+ 
+ static_assert(std::is_trivially_destructible_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_trivially_destructible_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_trivially_destructible_v<std::inplace_vector<N, 0>>);
+ static_assert(std::is_trivially_destructible_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_trivially_destructible_v<std::inplace_vector<U, 0>>);
+ 
+ static_assert(std::is_empty_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_empty_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_empty_v<std::inplace_vector<N, 0>>);
+ static_assert(std::is_empty_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_empty_v<std::inplace_vector<U, 0>>);
+ static_assert(std::is_empty_v<std::inplace_vector<Z, 0>>);
+ 
+ constexpr void
+ test_default()
+ {
+   std::inplace_vector<int, 5> c;
+   VERIFY( c.size() == 0 );
+   VERIFY( c.capacity() == 5 );
+   VERIFY( c.empty() );
+   VERIFY( c.begin() == c.end() );
+ 
+   std::inplace_vector<int, 0> c0;
+   VERIFY( c0.size() == 0 );
+   VERIFY( c0.capacity() == 0 );
+   VERIFY( c0.empty() );
+   VERIFY( c0.begin() == c0.end() );
+ 
+   std::inplace_vector<Z, 0> z0;
+   VERIFY( z0.size() == 0 );
+   VERIFY( z0.capacity() == 0 );
+   VERIFY( z0.empty() );
+   VERIFY( z0.begin() == z0.end() );
+ 
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   std::inplace_vector<X, 5> cx;
+   VERIFY( cx.size() == 0 );
+   VERIFY( cx.capacity() == 5 );
+   VERIFY( cx.empty() );
+   VERIFY( cx.begin() == cx.end() );
+ 
+   std::inplace_vector<X, 0> cx0;
+   VERIFY( cx0.size() == 0 );
+   VERIFY( cx0.capacity() == 0 );
+   VERIFY( cx0.empty() );
+   VERIFY( cx0.begin() == cx0.end() );
+ }
+ 
+ constexpr void
+ test_n()
+ {
+   std::inplace_vector<int, 5> c(2);
+   VERIFY( c.size() == 2 );
+   VERIFY( c.capacity() == 5 );
+   VERIFY( not c.empty() );
+   VERIFY( c.begin() + 2 == c.end() );
+   VERIFY( c[0] == 0 );
+   VERIFY( c[1] == 0 );
+ 
+   std::inplace_vector<int, 2> c2(2);
+   VERIFY( c2.size() == 2 );
+   VERIFY( c2.capacity() == 2 );
+   VERIFY( not c2.empty() );
+   VERIFY( c2.begin() + 2 == c2.end() );
+   VERIFY( c2[0] == 0 );
+   VERIFY( c2[1] == 0 );
+ 
+   std::inplace_vector<int, 0> c0(0);
+   VERIFY( c0.size() == 0 );
+   VERIFY( c0.capacity() == 0 );
+   VERIFY( c0.empty() );
+   VERIFY( c0.begin() == c0.end() );
+ 
+   std::inplace_vector<int, 2> c20(0);
+   VERIFY( c20.size() == 0 );
+   VERIFY( c20.capacity() == 2 );
+   VERIFY( c20.empty() );
+   VERIFY( c20.begin() == c20.end() );
+ 
+   std::inplace_vector<Z, 0> z0(0);
+   VERIFY( z0.size() == 0 );
+   VERIFY( z0.capacity() == 0 );
+   VERIFY( z0.empty() );
+   VERIFY( z0.begin() == z0.end() );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if not consteval {
+     try
+     {
+       std::inplace_vector<int, 2> ct(3);
+       VERIFY(false);
+     }
+     catch (std::bad_alloc const&)
+     {
+     }
+ 
+     try
+     {
+       std::inplace_vector<int, 0> ct(1);
+       VERIFY(false);
+     }
+     catch (std::bad_alloc const&)
+     {
+     }
+ 
+   }
+ #endif
+ 
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   std::inplace_vector<X, 5> cx(3);
+   VERIFY( cx.size() == 3 );
+   VERIFY( cx.capacity() == 5 );
+   VERIFY( not cx.empty() );
+   VERIFY( cx.begin() + 3 == cx.end() );
+   (void) cx[2];
+ }
+ 
+ constexpr void
+ test_n_val()
+ {
+   std::inplace_vector<int, 5> c(2, 99);
+   VERIFY( c.size() == 2 );
+   VERIFY( c.capacity() == 5 );
+   VERIFY( not c.empty() );
+   VERIFY( c.begin() + 2 == c.end() );
+   VERIFY( c[0] == 99 );
+   VERIFY( c[1] == 99 );
+ 
+   std::inplace_vector<int, 1> c1(1, 44);
+   VERIFY( c1.size() == 1 );
+   VERIFY( c1.capacity() == 1 );
+   VERIFY( not c1.empty() );
+   VERIFY( c1.begin() + 1 == c1.end() );
+   VERIFY( c1[0] == 44 );
+ 
+   std::inplace_vector<int, 0> c0(0, 33);
+   VERIFY( c0.size() == 0 );
+   VERIFY( c0.capacity() == 0 );
+   VERIFY( c0.empty() );
+   VERIFY( c0.begin() == c0.end() );
+ 
+   std::inplace_vector<int, 2> c20(0, 22);
+   VERIFY( c20.size() == 0 );
+   VERIFY( c20.capacity() == 2 );
+   VERIFY( c20.empty() );
+   VERIFY( c20.begin() == c20.end() );
+ 
+   std::inplace_vector<Z, 0> z0(0, 33);
+   VERIFY( z0.size() == 0 );
+   VERIFY( z0.capacity() == 0 );
+   VERIFY( z0.empty() );
+   VERIFY( z0.begin() == z0.end() );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if not consteval {
+     try
+     {
+       std::inplace_vector<int, 2> ct(3, 11);
+       VERIFY(false);
+     }
+     catch (std::bad_alloc const&)
+     {
+     }
+ 
+     try
+     {
+       std::inplace_vector<int, 0> ct(2, 11);
+       VERIFY(false);
+     }
+     catch (std::bad_alloc const&)
+     {
+     }
+   }
+ #endif
+ 
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   std::inplace_vector<X, 5> cx(4);
+   VERIFY( cx.size() == 4 );
+   VERIFY( cx.capacity() == 5 );
+   VERIFY( not cx.empty() );
+   VERIFY( cx.begin() + 4 == cx.end() );
+   (void) cx[3];
+ }
+ 
+ constexpr void
+ test_initializer_list()
+ {
+   std::inplace_vector<int, 5> c{22, 33};
+   VERIFY( c.size() == 2 );
+   VERIFY( c.capacity() == 5 );
+   VERIFY( not c.empty() );
+   VERIFY( c.begin() + 2 == c.end() );
+   VERIFY( c[0] == 22 );
+   VERIFY( c[1] == 33 );
+ 
+   std::inplace_vector<int, 1> c1{44};
+   VERIFY( c1.size() == 1 );
+   VERIFY( c1.capacity() == 1 );
+   VERIFY( not c1.empty() );
+   VERIFY( c1.begin() + 1 == c1.end() );
+   VERIFY( c1[0] == 44 );
+ 
+   std::inplace_vector<int, 0> c0({});
+   VERIFY( c0.size() == 0 );
+   VERIFY( c0.capacity() == 0 );
+   VERIFY( c0.empty() );
+   VERIFY( c0.begin() == c0.end() );
+ 
+   std::inplace_vector<int, 2> c20({});
+   VERIFY( c20.size() == 0 );
+   VERIFY( c20.capacity() == 2 );
+   VERIFY( c20.empty() );
+   VERIFY( c20.begin() == c20.end() );
+ 
+   std::inplace_vector<Z, 0> z0({});
+   VERIFY( z0.size() == 0 );
+   VERIFY( z0.capacity() == 0 );
+   VERIFY( z0.empty() );
+   VERIFY( z0.begin() == z0.end() );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if not consteval {
+     try
+     {
+       std::inplace_vector<int, 2> ct{11, 22, 33};
+       VERIFY(false);
+     }
+     catch (std::bad_alloc const&)
+     {
+     }
+ 
+     try
+     {
+       std::inplace_vector<int, 0> ct{11, 22};
+       VERIFY(false);
+     }
+     catch (std::bad_alloc const&)
+     {
+     }
+   }
+ #endif
+ 
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   std::inplace_vector<X, 5> cx{X(), X(), X(), X()};
+   VERIFY( cx.size() == 4 );
+   VERIFY( cx.capacity() == 5 );
+   VERIFY( not cx.empty() );
+   VERIFY( cx.begin() + 4 == cx.end() );
+   (void) cx[3];
+ }
+ 
+ constexpr std::inplace_vector<int, 0> e0;
+ constexpr std::inplace_vector<X, 0> e1;
+ constexpr std::inplace_vector<Z, 0> e2;
+ 
+ constexpr std::inplace_vector<int, 5> g1;
+ constexpr std::inplace_vector<int, 5> g2(2, 100);
+ constexpr std::inplace_vector<int, 5> g3 = g2;
+ constexpr std::inplace_vector<int, 5> g4{1, 2, 3};
+ constexpr std::inplace_vector<int, 5> g5 = [] {
+   std::inplace_vector<int, 5> res;
+   res = g3;
+   return res;
+ }();
+ 
+ int main()
+ {
+   auto tests = [] {
+     test_default();
+     test_n();
+     test_n_val();
+     test_initializer_list();
+     return true;
+   };
+ 
+   tests();
+   constexpr bool _ = tests();
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,184 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ 
+ #include <span>
+ #include <testsuite_hooks.h>
+ #include <testsuite_iterators.h>
+ #include <testsuite_allocator.h>
+ 
+ template<typename T, typename V, size_t N>
+ constexpr bool
+ eq(const std::inplace_vector<V, N>& l, std::span<const T> r) {
+   if (l.size() != r.size())
+     return false;
+   for (auto i = 0u; i < l.size(); ++i)
+     if (l[i] != r[i])
+       return false;
+   return true;
+ };
+ 
+ template<typename T, template<class TT> class ItType>
+ constexpr void
+ do_test_it()
+ {
+   // The vector's value_type.
+   using V = int;
+ 
+   T a[]{1,2,3,4,5,6,7,8,9};
+   using It = ItType<T>;
+ 
+   auto bounds = typename It::ContainerType(a, a+9);
+   std::inplace_vector<V, 0> e0(It(a, &bounds), It(a, &bounds));
+   VERIFY( e0.empty() );
+ 
+   bounds = typename It::ContainerType(a, a+9);
+   std::inplace_vector<V, 10> v0(It(a, &bounds), It(a, &bounds));
+   VERIFY( v0.empty() );
+ 
+   bounds = typename It::ContainerType(a, a+9);
+   std::inplace_vector<V, 10> v4(It(a, &bounds), It(a+4, &bounds));
+   VERIFY( eq<T>(v4, {a, 4}) );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   bounds = typename It::ContainerType(a, a+9);
+   try
+   {
+     std::inplace_vector<int, 5> v9(It(a, &bounds), It(a+9, &bounds));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+ 
+   bounds = typename It::ContainerType(a, a+9);
+   try
+   {
+     std::inplace_vector<int, 0> v2(It(a, &bounds), It(a+2, &bounds));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+ #endif
+ }
+ 
+ bool
+ test_iterators()
+ {
+   using namespace __gnu_test;
+ 
+   do_test_it<int, input_iterator_wrapper>();
+   do_test_it<int, forward_iterator_wrapper>();
+   do_test_it<int, random_access_iterator_wrapper>();
+   
+   do_test_it<short, forward_iterator_wrapper>();
+   return true;
+ }
+ 
+ template<typename Range>
+ constexpr void
+ do_test_r()
+ {
+   // The vector's value_type.
+   using V = int;
+ 
+   // The range's value_type.
+   using T = std::ranges::range_value_t<Range>;
+   T a[]{1,2,3,4,5,6,7,8,9};
+ 
+   std::inplace_vector<V, 0> e0(std::from_range, Range(a, a+0));
+   VERIFY( e0.empty() );
+ 
+   std::inplace_vector<V, 10> v0(std::from_range, Range(a, a+0));
+   VERIFY( v0.empty() );
+ 
+   std::inplace_vector<V, 10> v4(std::from_range, Range(a, a+4));
+   VERIFY( eq<T>(v4, {a, 4}) );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+   
+   try
+   {
+     std::inplace_vector<V, 5> v9(std::from_range, Range(a, a+9));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+ 
+   try
+   {
+     std::inplace_vector<V, 0> v3(std::from_range, Range(a, a+3));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+ #endif
+ }
+ 
+ bool
+ test_ranges()
+ {
+   using namespace __gnu_test;
+ 
+   do_test_r<test_forward_range<int>>();
+   do_test_r<test_sized_range_sized_sent<int, forward_iterator_wrapper>>();
+ 
+   do_test_r<test_input_range<int>>();
+   do_test_r<test_input_sized_range<int>>();
+   do_test_r<test_sized_range_sized_sent<int, input_iterator_wrapper>>();
+ 
+   do_test_r<test_range<int, input_iterator_wrapper_nocopy>>();
+   do_test_r<test_sized_range<int, input_iterator_wrapper_nocopy>>();
+   do_test_r<test_sized_range_sized_sent<int, input_iterator_wrapper_nocopy>>();
+ 
+   do_test_r<test_forward_range<short>>();
+   do_test_r<test_input_range<short>>();
+ 
+   // Not lvalue-convertible to int
+   struct C {
+     C(int v) : val(v) { }
+     operator int() && { return val; }
+     bool operator==(int b) const { return b == val; }
+     int val;
+   };
+   using rvalue_input_range = test_range<C, input_iterator_wrapper_rval>;
+   do_test_r<rvalue_input_range>();
+ 
+   return true;
+ }
+ 
+ constexpr bool
+ test_constexpr()
+ {
+   // XXX: this doesn't test the non-forward_range code paths are constexpr.
+   std::initializer_list<int> il{1, 2, 3, 4};
+   std::inplace_vector<int, 6> v(il.begin(), il.end());
+   eq<int>(v, il);
+ 
+   do_test_r<std::span<short>>();
+   return true;
+ }
+ 
+ int main()
+ {
+   test_iterators();
+   test_ranges();
+   static_assert( test_constexpr() );
+ }
+ 
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/throws.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/throws.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/throws.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/throws.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,129 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ 
+ #include <span>
+ #include <testsuite_hooks.h>
+ #include <testsuite_iterators.h>
+ #include <testsuite_allocator.h>
+ 
+ struct CopyFailed {};
+ 
+ struct Thrower
+ {
+   static inline size_t throw_after = 0;
+   static inline size_t incontainer = 0;
+ 
+   Thrower() {}
+   Thrower(int x) {}
+   Thrower(const Thrower&)
+   {
+     if (incontainer >= throw_after)
+       throw CopyFailed();
+     ++incontainer;
+   }
+ 
+   ~Thrower()
+   { --incontainer; }
+ };
+ 
+ template<template<class TT> class ItType>
+ void
+ do_test_it()
+ {
+   // The vector's value_type.
+   using V = Thrower;
+ 
+   V a[]{1,2,3,4,5,6,7,8,9};
+   using It = ItType<V>;
+ 
+   auto bounds = typename It::ContainerType(a, a+9);
+   Thrower::throw_after = 100;
+   Thrower::incontainer = 0;
+   try
+   {
+     std::inplace_vector<V, 5> v9(It(a, &bounds), It(a+9, &bounds));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( Thrower::incontainer == 0 );
+ 
+   bounds = typename It::ContainerType(a, a+9);
+   Thrower::throw_after = 2;
+   Thrower::incontainer = 0;
+   try
+   {
+     std::inplace_vector<V, 5> v2(It(a, &bounds), It(a+3, &bounds));
+     VERIFY(false);
+   }
+   catch (CopyFailed const&)
+   {
+   }
+   VERIFY( Thrower::incontainer == 0 );
+ }
+ 
+ bool
+ test_iterators()
+ {
+   using namespace __gnu_test;
+   do_test_it<input_iterator_wrapper>();
+   do_test_it<forward_iterator_wrapper>();
+   do_test_it<random_access_iterator_wrapper>();
+   return true;
+ }
+ 
+ template<typename Range>
+ void
+ do_test_r()
+ {
+   // The vector's value_type.
+   using V = Thrower;
+ 
+   V a[]{1,2,3,4,5,6,7,8,9};
+ 
+   Thrower::throw_after = 100;
+   Thrower::incontainer = 0;
+   try
+   {
+     std::inplace_vector<V, 5> v9(std::from_range, Range(a, a+9));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( Thrower::incontainer == 0 );
+ 
+   Thrower::throw_after = 2;
+   Thrower::incontainer = 0;
+   try
+   {
+     std::inplace_vector<V, 5> v9(std::from_range, Range(a, a+3));
+     VERIFY(false);
+   }
+   catch (CopyFailed const&)
+   {
+   }
+   VERIFY( Thrower::incontainer == 0 );
+ }
+ 
+ bool
+ test_ranges()
+ {
+   using namespace __gnu_test;
+   do_test_r<test_forward_range<Thrower>>();
+   do_test_r<test_sized_range_sized_sent<Thrower, forward_iterator_wrapper>>();
+ 
+   do_test_r<test_input_range<Thrower>>();
+   do_test_r<test_input_sized_range<Thrower>>();
+   do_test_r<test_sized_range_sized_sent<Thrower, input_iterator_wrapper>>();
+   return true;
+ }
+ 
+ int main()
+ {
+   test_iterators();
+   test_ranges();
+ }
+ 
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,247 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ #include <ranges>
+ #include <testsuite_hooks.h>
+ 
+ struct X
+ {
+   X() = default;
+   constexpr X(int p) : v(p) {}
+   constexpr X(const X& o) : v(o.v) { } // not trivial
+   constexpr X& operator=(const X& o) // not trivial
+   { v = o.v; return *this; }
+ 
+   int v;
+ 
+   friend auto operator<=>(const X&, const X&) = default;
+ };
+ 
+ template<bool CNoex, bool ANoex>
+ struct N
+ {
+   N() = default;
+   constexpr N(const N&) noexcept(CNoex) { } // not trivial
+   constexpr N& operator=(const N& o) noexcept(ANoex) // not trivial
+   { return *this; }
+ };
+ 
+ struct D
+ {
+   D() = default;
+   D(const D&) = default;
+   D& operator=(const D&) = default;
+   ~D() {} // not trivially destructible
+ };
+ 
+ struct U
+ {
+   U() = default;
+   U(const U&) noexcept(false) = default; // lies about noexcept, is trivial but throwing
+   U& operator=(const U&) noexcept(false) = default; // lies about noexcept, is trivial but throwing
+ };
+ 
+ // n5008 inplace.vector.overview p5 says for inplace_vector<T, 0>
+ // provides trivial copy/move/default cosntructpr regardless of T
+ struct Z
+ {
+   Z(Z&&) = delete;
+   Z& operator=(Z&&) = delete;
+ };
+ 
+ template<size_t N, typename T>
+   constexpr std::inplace_vector<T, N> const&
+   materialize(std::inplace_vector<T, N> const& r)
+   { return r; }
+ 
+ static_assert(std::is_copy_constructible_v<std::inplace_vector<int, 2>>);
+ static_assert(std::is_copy_constructible_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_copy_constructible_v<std::inplace_vector<N<false, false>, 2>>);
+ static_assert(std::is_copy_constructible_v<std::inplace_vector<D, 2>>);
+ static_assert(std::is_copy_constructible_v<std::inplace_vector<U, 2>>);
+ // The operators are not constrained, as for any other container
+ static_assert(std::is_copy_constructible_v<std::inplace_vector<Z, 2>>);
+ 
+ // conditional noexcept here is libstdc++ extension,
+ static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<int, 2>>);
+ static_assert(!std::is_nothrow_copy_constructible_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<N<true, true>, 2>>);
+ static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<N<true, false>, 2>>);
+ static_assert(!std::is_nothrow_copy_constructible_v<std::inplace_vector<N<false, true>, 2>>);
+ static_assert(!std::is_nothrow_copy_constructible_v<std::inplace_vector<N<false, false>, 2>>);
+ static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<D, 2>>);
+ static_assert(!std::is_nothrow_copy_constructible_v<std::inplace_vector<U, 2>>);
+ 
+ static_assert(std::is_trivially_copy_constructible_v<std::inplace_vector<int, 2>>);
+ static_assert(!std::is_trivially_copy_constructible_v<std::inplace_vector<X, 2>>);
+ static_assert(!std::is_trivially_copy_constructible_v<std::inplace_vector<N<true, true>, 2>>);
+ // is_trivially_copy_constructible_v checks destructor
+ static_assert(!std::is_trivially_copy_constructible_v<std::inplace_vector<D, 2>>);
+ static_assert(std::is_trivially_copy_constructible_v<std::inplace_vector<U, 2>>);
+ 
+ static_assert(std::is_copy_assignable_v<std::inplace_vector<int, 2>>);
+ static_assert(std::is_copy_assignable_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_copy_assignable_v<std::inplace_vector<N<false, false>, 2>>);
+ static_assert(std::is_copy_assignable_v<std::inplace_vector<D, 2>>);
+ static_assert(std::is_copy_assignable_v<std::inplace_vector<U, 2>>);
+ // The operators are not constrained, as for any other container
+ static_assert(std::is_copy_assignable_v<std::inplace_vector<Z, 2>>);
+ 
+ static_assert(std::is_nothrow_copy_assignable_v<std::inplace_vector<int, 2>>);
+ static_assert(!std::is_nothrow_copy_assignable_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_nothrow_copy_assignable_v<std::inplace_vector<N<true, true>, 2>>);
+ static_assert(!std::is_nothrow_copy_assignable_v<std::inplace_vector<N<true, false>, 2>>);
+ static_assert(!std::is_nothrow_copy_assignable_v<std::inplace_vector<N<false, true>, 2>>);
+ static_assert(!std::is_nothrow_copy_assignable_v<std::inplace_vector<N<false, false>, 2>>);
+ static_assert(std::is_nothrow_copy_assignable_v<std::inplace_vector<D, 2>>);
+ static_assert(!std::is_nothrow_copy_assignable_v<std::inplace_vector<U, 2>>);
+ 
+ // conditional noexcept here is libstdc++ extension,
+ static_assert(std::is_trivially_copy_assignable_v<std::inplace_vector<int, 2>>);
+ static_assert(!std::is_trivially_copy_assignable_v<std::inplace_vector<X, 2>>);
+ static_assert(!std::is_trivially_copy_assignable_v<std::inplace_vector<N<true, true>, 2>>);
+ // destructor is not trivial
+ static_assert(!std::is_trivially_copy_assignable_v<std::inplace_vector<D, 2>>);
+ static_assert(std::is_trivially_copy_assignable_v<std::inplace_vector<U, 2>>);
+ 
+ static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<N<false, false>, 0>>);
+ static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<U, 0>>);
+ static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<Z, 0>>);
+ 
+ static_assert(std::is_trivially_copy_constructible_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_trivially_copy_constructible_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_trivially_copy_constructible_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_trivially_copy_constructible_v<std::inplace_vector<U, 0>>);
+ static_assert(std::is_trivially_copy_constructible_v<std::inplace_vector<Z, 0>>);
+ 
+ static_assert(std::is_nothrow_copy_assignable_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_nothrow_copy_assignable_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_nothrow_copy_assignable_v<std::inplace_vector<N<false, false>, 0>>);
+ static_assert(std::is_nothrow_copy_assignable_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_nothrow_copy_assignable_v<std::inplace_vector<U, 0>>);
+ static_assert(std::is_nothrow_copy_assignable_v<std::inplace_vector<Z, 0>>);
+ 
+ static_assert(std::is_trivially_copy_assignable_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_trivially_copy_assignable_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_trivially_copy_assignable_v<std::inplace_vector<N<false, false>, 0>>);
+ static_assert(std::is_trivially_copy_assignable_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_trivially_copy_assignable_v<std::inplace_vector<U, 0>>);
+ static_assert(std::is_trivially_copy_assignable_v<std::inplace_vector<Z, 0>>);
+ 
+ 
+ template<typename T, size_t N>
+ constexpr bool
+ eq(const std::inplace_vector<T, N>& s, std::span<const T> o)
+ { return std::ranges::equal(s, o); }
+ 
+ constexpr void
+ test_ctor()
+ {
+   auto e0 = materialize<0, int>({});
+   VERIFY( e0.empty() );
+   auto e1 = materialize<0, X>({});
+   VERIFY( e1.empty() );
+   auto e2 = materialize<0, Z>({});
+   VERIFY( e2.empty() );
+ 
+   auto c0 = materialize<5, int>({});
+   VERIFY( c0.empty() );
+ 
+   auto c3 = materialize<5, int>({1, 2, 3});
+   VERIFY( eq(c3, {1, 2, 3}) );
+ 
+   auto c5 = materialize<5, int>({1, 2, 3, 4, 5});
+   VERIFY( eq(c5, {1, 2, 3, 4, 5}) );
+ 
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   auto x0 = materialize<3, X>({});
+   VERIFY( x0.empty() );
+ 
+   auto x2 = materialize<3, X>({1, 2});
+   VERIFY( eq(x2, {1, 2}) );
+ 
+   auto x3 = materialize<3, X>({1, 2, 3});
+   VERIFY( eq(x3, {1, 2, 3}) );
+ }
+ 
+ constexpr void
+ test_assign()
+ {
+   std::inplace_vector<int, 0> e0;
+   e0 = materialize<0, int>({});
+   VERIFY( e0.empty() );
+   std::inplace_vector<X, 0> e1;
+   e1 = materialize<0, X>({});
+   VERIFY( e1.empty() );
+   std::inplace_vector<Z, 0> e2;
+   e2 = materialize<0, Z>({});
+   VERIFY( e2.empty() );
+ 
+   std::inplace_vector<int, 5> c;
+   c = materialize<5, int>({});
+   VERIFY( c.empty() );
+ 
+   c = materialize<5, int>({1, 2, 3});
+   VERIFY( eq(c, {1, 2, 3}) );
+ 
+   c = materialize<5, int>({1, 2, 3, 4, 5});
+   VERIFY( eq(c, {1, 2, 3, 4, 5}) );
+ 
+   c = materialize<5, int>({4, 5});
+   VERIFY( eq(c, {4, 5}) );
+ 
+   c = materialize<5, int>({});
+   VERIFY( c.empty() );
+ 
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   std::inplace_vector<X, 5> x;
+   x = materialize<5, X>({});
+   VERIFY( x.empty() );
+ 
+   x = materialize<5, X>({1, 2, 3});
+   VERIFY( eq(x, {1, 2, 3}) );
+ 
+   x = materialize<5, X>({1, 2, 3, 4, 5});
+   VERIFY( eq(x, {1, 2, 3, 4, 5}) );
+ 
+   x = materialize<5, X>({4, 5});
+   VERIFY( eq(x, {4, 5}) );
+ 
+   x = materialize<5, X>({});
+   VERIFY( x.empty() );
+ }
+ 
+ constexpr auto e0 = materialize<0, int>({});
+ constexpr auto e1 = materialize<0, X>({});
+ constexpr auto e2 = materialize<0, Z>({});
+ 
+ constexpr auto t1 = materialize<3, int>({});
+ constexpr auto t2 = materialize<3, int>({1, 2});
+ constexpr auto t3 = materialize<3, int>({11, 22, 33});
+ 
+ int main()
+ {
+   auto tests = [] {
+     test_ctor();
+     test_assign();
+     return true;
+   };
+ 
+   tests();
+   constexpr bool _ = tests();
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/erasure.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/erasure.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/erasure.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/erasure.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,49 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ #include <testsuite_hooks.h>
+ 
+ constexpr void
+ test_erase()
+ {
+   std::inplace_vector<int, 15> c{1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 4, 4, 9};
+   std::erase(c, 4);
+   VERIFY( c.size() == 10 );
+   std::erase(c, 1);
+   VERIFY( c.size() == 8 );
+   std::erase(c, 9);
+   VERIFY( c.size() == 7 );
+   VERIFY( (c == std::inplace_vector<int, 15>{2, 3, 5, 6, 5, 3, 2}) );
+ 
+   std::inplace_vector<int, 0> e;
+   std::erase(e, 10);
+   VERIFY( e.empty() );
+ }
+ 
+ constexpr void
+ test_erase_if()
+ {
+   std::inplace_vector<int, 15> c{1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 4, 4, 9};
+   std::erase_if(c, [](int i) { return i > 5; });
+   VERIFY( c.size() == 12 );
+   std::erase_if(c, [](int i) { return i == 4; });
+   VERIFY( c.size() == 8 );
+   std::erase_if(c, [](int i) { return i & 1; });
+   VERIFY( (c == std::inplace_vector<int, 15>{2, 2}) );
+ 
+   std::inplace_vector<int, 0> e;
+   std::erase_if(e, [](int i) { return i > 5; });
+   VERIFY( e.empty() );
+ }
+ 
+ int main()
+ {
+   test_erase();
+   test_erase_if();
+ 
+   constexpr bool _ = [] {
+     test_erase();
+     test_erase_if();
+     return true;
+   }();
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/assign.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/assign.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/assign.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/assign.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,386 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ 
+ #include <span>
+ #include <testsuite_hooks.h>
+ #include <testsuite_iterators.h>
+ 
+ struct X
+ {
+   X() = default;
+   constexpr X(int p) : v(p) {}
+   constexpr X(const X& o) : v(o.v) { } // not trivial
+   constexpr X& operator=(const X& o) // not trivial
+   { v = o.v; return *this; }
+ 
+   int v;
+ 
+   friend auto operator<=>(const X&, const X&) = default;
+ };
+ 
+ template<typename T, typename V, size_t N>
+ constexpr bool
+ eq(const std::inplace_vector<V, N>& l, std::span<const T> r) {
+   if (l.size() != r.size())
+     return false;
+   for (auto i = 0u; i < l.size(); ++i)
+     if (l[i] != r[i])
+       return false;
+   return true;
+ };
+ 
+ template<size_t N, typename T, template<class TT> class ItType>
+ constexpr void
+ test_assign_empty_it()
+ {
+   using namespace __gnu_test;
+ 
+   T a[]{1,2,3,4,5,6,7,8,9,10};
+   using It = ItType<T>;
+   using Range = test_range<T, ItType>;
+   using SizedRange = test_sized_range<T, ItType>;
+ 
+   const std::inplace_vector<T, N> src(std::from_range, std::span(a, N));
+   std::inplace_vector<T, N> v;
+ 
+   v = src;
+   v.assign_range(Range(a, a));
+   VERIFY( v.empty() );
+   v.assign_range(Range(a, a));
+   VERIFY( v.empty() );
+ 
+   v = src;
+   v.assign_range(SizedRange(a, a));
+   VERIFY( v.empty() );
+ 
+   v = src;
+   auto bounds = typename It::ContainerType(a, a+9);
+   v.assign(It(a, &bounds), It(a, &bounds));
+   VERIFY( v.empty() );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   static_assert(N < 9);
+ 
+   v = src;
+   try
+   {
+     v.assign_range(Range(a, a+9));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   if constexpr (std::ranges::sized_range<Range> || std::ranges::forward_range<Range>)
+     VERIFY( eq<T>(v, {a, N}) );
+ 
+   v = src;
+   try
+   {
+     v.assign_range(SizedRange(a, a+9));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   v = src;
+   bounds = typename It::ContainerType(a, a+9);
+   try
+   {
+     v.assign(It(a, &bounds), It(a+9, &bounds));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   if constexpr(std::forward_iterator<It>)
+     VERIFY( eq<T>(v, {a, N}) );
+ #endif
+ }
+ 
+ template<size_t N, typename T>
+ constexpr void
+ test_assign_empty_other()
+ {
+   T a[]{1,2,3,4,5,6,7,8,9,10};
+   const std::inplace_vector<T, N> src(std::from_range, std::span(a, N));
+   std::inplace_vector<T, N> v;
+ 
+   v = src;
+   v.assign(0, T(4));
+   VERIFY( v.empty() );
+ 
+   v = src;
+   v.assign({});
+   VERIFY( v.empty() );
+ 
+   v = src;
+   v = {};
+   VERIFY( v.empty() );
+ 
+   v = src;
+   v.resize(0, T(3));
+   VERIFY( v.empty() );
+ 
+   v = src;
+   v.resize(0);
+   VERIFY( v.empty() );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   static_assert(N < 9);
+ 
+   v = src;
+   try
+   {
+     v.assign(9, T(4));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   std::initializer_list<T> il =
+   {T(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(9), T(10)};
+   try
+   {
+     v.assign(il);
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v = il;
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.resize(9, T(3));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.resize(9);
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ #endif
+ }
+ 
+ template<size_t N, typename T>
+ constexpr void
+ test_assign_empty()
+ {
+   // TODO make test iterators consteval
+   if !consteval
+   {
+     using namespace __gnu_test;
+     test_assign_empty_it<N, T, input_iterator_wrapper>();
+     test_assign_empty_it<N, T, forward_iterator_wrapper>();
+     test_assign_empty_it<N, T, random_access_iterator_wrapper>();
+   }
+ 
+   test_assign_empty_other<N, T>;
+ }
+ 
+ template<typename Range>
+ constexpr void
+ test_assign_range()
+ {
+   using T = std::ranges::range_value_t<Range>;
+   T a[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ 
+   std::inplace_vector<T, 10> v;
+   v.assign_range(Range(a,a+5));
+   VERIFY( eq<T>(v, {a, 5}) );
+ 
+   v.assign_range(Range(a,a+7));
+   VERIFY( eq<T>(v, {a, 7}) );
+ 
+   v.assign_range(Range(a,a+3));
+   VERIFY( eq<T>(v, {a, 3}) );
+ 
+   v.assign_range(Range(a,a+10));
+   VERIFY( eq<T>(v, {a, 10}) );
+ }
+ 
+ template<typename T, template<class TT> class ItType>
+ constexpr void
+ test_assign_iterators()
+ {
+   T a[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+   using It = ItType<T>;
+ 
+   std::inplace_vector<T, 10> v;
+ 
+   auto bounds = typename It::ContainerType(a, a+15);
+   v.assign(It(a, &bounds), It(a+5, &bounds));
+   VERIFY( eq<T>(v, {a, 5}) );
+ 
+   bounds = typename It::ContainerType(a, a+15);
+   v.assign(It(a, &bounds), It(a+7, &bounds));
+   VERIFY( eq<T>(v, {a, 7}) );
+ 
+   bounds = typename It::ContainerType(a, a+15);
+   v.assign(It(a, &bounds), It(a+3, &bounds));
+   VERIFY( eq<T>(v, {a, 3}) );
+ 
+   bounds = typename It::ContainerType(a, a+15);
+   v.assign(It(a, &bounds), It(a+10, &bounds));
+   VERIFY( eq<T>(v, {a, 10}) );
+ }
+ 
+ template<typename T>
+ constexpr void
+ test_assign_initializer_list()
+ {
+   T a[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ 
+   std::inplace_vector<T, 10> v;
+ 
+   v.assign({T(1), T(2), T(3), T(4), T(5)});
+   VERIFY( eq<T>(v, {a, 5}) );
+ 
+   v = {T(1), T(2), T(3), T(4), T(5), T(6), T(7)};
+   VERIFY( eq<T>(v, {a, 7}) );
+ 
+   v.assign({T(1), T(2), T(3)});
+   VERIFY( eq<T>(v, {a, 3}) );
+ 
+   v = {T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(9), T(10)};
+   VERIFY( eq<T>(v, {a, 10}) );
+ }
+ 
+ template<typename T>
+ constexpr void
+ test_assign_repeated()
+ {
+   auto rep = [](const std::inplace_vector<T, 10>& v, size_t c, const T& t)
+   {
+     if (v.size() != c)
+       return false;
+     for (const T& o : v)
+       if (o != t)
+ 	return false;
+     return true;
+   };
+ 
+   std::inplace_vector<T, 10> v;
+ 
+   v.assign(5, T(1));
+   VERIFY( rep(v, 5, T(1)) );
+ 
+   v.assign(7, T(2));
+   VERIFY( rep(v, 7, T(2)) );
+ 
+   v.assign(3, T(4));
+   VERIFY( rep(v, 3, T(4)) );
+ 
+   v.assign(10, T(8));
+   VERIFY( rep(v, 10, T(8)) );
+ }
+ 
+ template<typename T>
+ constexpr void
+ test_resize()
+ {
+   T a[]{1,1,1,1,2,2,2,0,0,0};
+ 
+   std::inplace_vector<T, 10> v;
+ 
+   v.resize(4, T(1));
+   VERIFY( eq<T>(v, {a, 4}) );
+ 
+   v.resize(7, T(2));
+   VERIFY( eq<T>(v, {a, 7}) );
+ 
+   v.resize(10);
+   VERIFY( eq<T>(v, {a, 10}) );
+ 
+   v.resize(6, T(1));
+   VERIFY( eq<T>(v, {a, 6}) );
+ }
+ 
+ template<typename T>
+ constexpr void
+ test_assigns()
+ {
+   using namespace __gnu_test;
+   // TODO make test iterators consteval
+   if !consteval {
+     test_assign_range<test_forward_range<int>>();
+     test_assign_range<test_sized_range_sized_sent<int, forward_iterator_wrapper>>();
+ 
+     test_assign_range<test_input_range<int>>();
+     test_assign_range<test_input_sized_range<int>>();
+     test_assign_range<test_sized_range_sized_sent<int, input_iterator_wrapper>>();
+ 
+     test_assign_range<test_range<int, input_iterator_wrapper_nocopy>>();
+     test_assign_range<test_sized_range<int, input_iterator_wrapper_nocopy>>();
+     test_assign_range<test_sized_range_sized_sent<int, input_iterator_wrapper_nocopy>>();
+ 
+     test_assign_iterators<T, input_iterator_wrapper>();
+     test_assign_iterators<T, forward_iterator_wrapper>();
+     test_assign_iterators<T, random_access_iterator_wrapper>();
+   }
+ 
+   test_assign_initializer_list<T>();
+   test_assign_repeated<T>();
+   test_resize<T>();
+ }
+ 
+ int main()
+ {
+   auto test_all = [] {
+     test_assign_empty<0, int>();
+     test_assign_empty<0, X>();
+     test_assign_empty<2, int>();
+ 
+     test_assigns<int>();
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error uncomemnt test_inserts<X>()
+ #endif
+     if !consteval {
+       test_assign_empty<2, X>();
+       test_assigns<X>();
+     }
+     return true;
+   };
+ 
+ 
+   test_all();
+   static_assert(test_all());
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,117 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ 
+ #include <span>
+ #include <testsuite_hooks.h>
+ 
+ struct X
+ {
+   X() = default;
+   constexpr X(int p) : v(p) {}
+   constexpr X(const X& o) : v(o.v) { } // not trivial
+   constexpr X& operator=(const X& o) // not trivial
+   { v = o.v; return *this; }
+ 
+   int v;
+ 
+   friend auto operator<=>(const X&, const X&) = default;
+ };
+ 
+ template<typename T, typename V, size_t N>
+ constexpr bool
+ eq(const std::inplace_vector<V, N>& l, std::span<const T> r) {
+   if (l.size() != r.size())
+     return false;
+   for (auto i = 0u; i < l.size(); ++i)
+     if (l[i] != r[i])
+       return false;
+   return true;
+ };
+ 
+ template<typename T, typename V, size_t N>
+ constexpr bool
+ eq(const std::inplace_vector<V, N>& l, std::initializer_list<T> r)
+ { return eq<T>(l, std::span<const T>(r)); }
+ 
+ template<size_t N, typename T>
+ constexpr void
+ test_erase_all_or_none()
+ {
+   using namespace __gnu_test;
+ 
+   T a[]{1,2,3,4,5,6,7,8,9};
+   const T c(10);
+ 
+   std::inplace_vector<T, N> src(std::from_range, std::span(a, a+N));
+   std::inplace_vector<T, N> v;
+ 
+   v = src;
+   auto it = v.erase(v.begin(), v.begin());
+   VERIFY( it == v.begin() );
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   it = v.erase(v.end(), v.end());
+   VERIFY( it == v.end() );
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   it = v.erase(v.begin(), v.end());
+   VERIFY( it == v.begin() );
+   VERIFY( v.empty() );
+ 
+   v = src;
+   v.clear();
+   VERIFY( v.empty() );
+ }
+ 
+ template<typename T>
+ constexpr void
+ test_erase()
+ {
+   std::inplace_vector<T, 10> v{T(1), T(2), T(3), T(4), T(5), T(6), T(7)};
+ 
+   auto it = v.erase(v.begin());
+   VERIFY( eq<T>(v, {T(2), T(3), T(4), T(5), T(6), T(7)}) );
+   VERIFY( it == v.begin() );
+ 
+   it = v.erase(v.end()-1);
+   VERIFY( eq<T>(v, {T(2), T(3), T(4), T(5), T(6)}) );
+   VERIFY( it == v.end() );
+ 
+   it = v.erase(v.begin()+2, v.begin()+4);
+   VERIFY( eq<T>(v, {T(2), T(3), T(6)}) );
+   VERIFY( it == v.begin()+2 );
+ 
+   it = v.erase(v.end()-1, v.end());
+   VERIFY( eq<T>(v, {T(2), T(3)}) );
+   VERIFY( it == v.end() );
+ 
+   it = v.erase(v.begin(), v.begin()+1);
+   VERIFY( eq<T>(v, {T(3)}) );
+   VERIFY( it == v.begin() );
+ 
+   v.pop_back();
+   VERIFY( v.empty() );
+ }
+ 
+ int main()
+ {
+   auto test_all = [] {
+     test_erase_all_or_none<0, int>();
+     test_erase_all_or_none<0, X>();
+ 
+     test_erase_all_or_none<4, int>();
+ 
+     test_erase<int>();
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error uncomemnt test_inserts<X>()
+ #endif
+     if ! consteval {
+       test_erase_all_or_none<4, X>();
+     }
+     return true;
+   };
+ 
+   test_all();
+   static_assert(test_all());;
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,611 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ 
+ #include <span>
+ #include <testsuite_hooks.h>
+ #include <testsuite_iterators.h>
+ 
+ struct X
+ {
+   X() = default;
+   constexpr X(int p) : v(p) {}
+   constexpr X(const X& o) : v(o.v) { } // not trivial
+   constexpr X& operator=(const X& o) // not trivial
+   { v = o.v; return *this; }
+ 
+   int v;
+ 
+   friend auto operator<=>(const X&, const X&) = default;
+ };
+ 
+ template<typename T, typename V, size_t N>
+ constexpr bool
+ eq(const std::inplace_vector<V, N>& l, std::span<const T> r) {
+   if (l.size() != r.size())
+     return false;
+   for (auto i = 0u; i < l.size(); ++i)
+     if (l[i] != r[i])
+       return false;
+   return true;
+ };
+ 
+ template<typename T, typename V, size_t N>
+ constexpr bool
+ prefix(const std::inplace_vector<V, N>& l, std::span<const T> r) {
+   if (l.size() < r.size())
+     return false;
+   for (auto i = 0u; i < r.size(); ++i)
+     if (l[i] != r[i])
+       return false;
+   return true;
+ };
+ 
+ template<size_t N, typename T, template<class TT> class ItType>
+ constexpr void
+ test_add_to_full_it()
+ {
+   using namespace __gnu_test;
+ 
+   T a[]{1,2,3,4,5,6,7,8,9};
+   using It = ItType<T>;
+   using Range = test_range<T, ItType>;
+   using SizedRange = test_sized_range<T, ItType>;
+ 
+   std::inplace_vector<T, N> v(std::from_range, std::span(a, a+N));
+ 
+   Range r1(a, a);
+   auto rit1 = v.try_append_range(r1);
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( rit1.base() == a );
+ 
+   SizedRange r2(a, a);
+   auto rit2 = v.try_append_range(r2);
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( rit2.base() == a );
+ 
+   v.append_range(Range(a, a));
+   VERIFY( eq<T>(v, {a, N}) );
+   v.append_range(SizedRange(a, a));
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   auto it = v.insert_range(v.end(), Range(a, a));
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( it == v.end() );
+   it = v.insert_range(v.end(), SizedRange(a, a));
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( it == v.end() );
+ 
+   auto bounds = typename It::ContainerType(a, a+9);
+   it = v.insert(v.end(), It(a, &bounds), It(a, &bounds));
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( it == v.end() );
+ 
+   it = v.insert_range(v.begin(), SizedRange(a, a));
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( it == v.begin() );
+   it = v.insert_range(v.begin(), Range(a, a));
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( it == v.begin() );
+ 
+   bounds = typename It::ContainerType(a, a+9);
+   it = v.insert(v.begin(), It(a, &bounds), It(a, &bounds));
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( it == v.begin() );
+ 
+   // Inserting non-empty range
+   Range r3(a+3, a+5);
+   auto rit3 = v.try_append_range(r3);
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( rit3.base() == a+3 );
+ 
+   SizedRange r4(a+2, a+5);
+   auto rit4 = v.try_append_range(r4);
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( rit4.base() == a+2 );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   try
+   {
+     v.append_range(Range(a, a + 5));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.append_range(SizedRange(a, a + 5));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.insert_range(v.begin(), SizedRange(a, a+5));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.insert_range(v.begin(), Range(a, a+5));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   auto gn = std::ranges::sized_range<Range> || std::ranges::forward_range<Range> ? N : 0;
+   VERIFY( prefix<T>(v, {a, gn}) );
+ 
+   v = std::inplace_vector<T, N>(std::from_range, std::span(a, a+N));
+   try
+   {
+     v.insert_range(v.begin(), Range(a, a+5));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   gn = std::forward_iterator<It> ? N : 0;
+   VERIFY( prefix<T>(v, {a, gn}) );
+ #endif
+ }
+ 
+ template<size_t N, typename T>
+ constexpr void
+ test_add_to_full_other()
+ {
+   using namespace __gnu_test;
+ 
+   T a[]{1,2,3,4,5,6,7,8,9};
+   std::inplace_vector<T, N> v(std::from_range, std::span(a, a+N));
+ 
+   auto it = v.insert(v.end(), {});
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( it == v.end() );
+   it = v.insert(v.end(), 0u, T(2));
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( it == v.end() );
+ 
+   it = v.insert(v.begin(), {});
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( it == v.begin() );
+   it = v.insert(v.begin(), 0u, T(2));
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( it == v.begin() );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   v = std::inplace_vector<T, N>(std::from_range, std::span(a, a+N));
+   try
+   {
+     v.insert(v.begin(), {T(1), T(2), T(3)});
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.insert(v.begin(), 4u, T(3));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ #endif
+ }
+ 
+ 
+ template<size_t N, typename T>
+ constexpr void
+ test_add_to_full()
+ {
+   using namespace __gnu_test;
+   // TODO make test iterators consteval
+   if !consteval {
+     test_add_to_full_it<N, T, input_iterator_wrapper>();
+     test_add_to_full_it<N, T, forward_iterator_wrapper>();
+     test_add_to_full_it<N, T, random_access_iterator_wrapper>();
+   }
+   test_add_to_full_other<N, T>();
+ }
+ 
+ template<typename Range>
+ constexpr void
+ test_append_range()
+ {
+   using T = std::ranges::range_value_t<Range>;
+   T a[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ 
+   std::inplace_vector<T, 20> v;
+   v.append_range(Range(a,a+10));
+   VERIFY( eq<T>(v, {a, 10}) );
+ 
+   v.append_range(Range(a+10, a+15));
+   VERIFY( eq<T>(v, {a, 15}) );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   try
+   {
+     v.append_range(Range(a, a+10));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( prefix<T>(v, {a, 15}) );
+ #endif
+ }
+ 
+ template<typename Range>
+ constexpr void
+ test_try_append_range()
+ {
+   using T = std::ranges::range_value_t<Range>;
+   T a[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
+ 
+   std::inplace_vector<T, 20> v;
+   Range r1 = Range(a, a+10);
+   auto it1 = v.try_append_range(r1);
+   VERIFY( eq<T>(v, {a, 10}) );
+   VERIFY( it1.base() == a+10 );
+ 
+   Range r2 = Range(a+10, a+15);
+   auto it2 = v.try_append_range(r2);
+   VERIFY( eq<T>(v, {a, 15}) );
+   VERIFY( it2.base() == a+15 );
+ 
+   Range r3 = Range(a+15, a+25);
+   auto it3 = v.try_append_range(r3);
+   VERIFY( eq<T>(v, {a, 20}) );
+   VERIFY( it3.base() == a+20 );
+ }
+ 
+ template<typename Range>
+ constexpr void
+ test_insert_range()
+ {
+   using T = std::ranges::range_value_t<Range>;
+   T a[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ 
+   std::inplace_vector<T, 20> v;
+   auto it = v.insert_range(v.begin(), Range(a+10,a+15));
+   VERIFY( eq<T>(v, {a+10, 5}) );
+   VERIFY( it == v.begin() );
+ 
+   it = v.insert_range(v.begin(), Range(a, a+5));
+   VERIFY( prefix<T>(v, {a, 5}) );
+   VERIFY( it == v.begin() );
+ 
+   it = v.insert_range(v.begin() + 5, Range(a+5, a+10));
+   VERIFY( eq<T>(v, {a, 15}) );
+   VERIFY( it == v.begin() + 5 );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   const bool seg = std::ranges::sized_range<Range> || std::ranges::forward_range<Range>;
+   auto vc = v;
+   try
+   {
+     vc.insert_range(vc.begin(), Range(a, a+10));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( prefix<T>(vc, {a, seg ? 15 : 0}) );
+ 
+   vc = v;
+   try
+   {
+     vc.insert_range(vc.begin()+5, Range(a, a+10));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( prefix<T>(vc, {a, seg ? 15 : 5}) );
+ 
+   vc = v;
+   try
+   {
+     vc.insert_range(vc.end(), Range(a, a+10));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( prefix<T>(vc, {a, 15}) );
+ #endif
+ }
+ 
+ template<typename Range>
+ constexpr void
+ do_test_ranges()
+ {
+   test_append_range<Range>();
+   test_try_append_range<Range>();
+   test_insert_range<Range>();
+ }
+ 
+ template<typename T, template<class TT> class ItType>
+ constexpr void
+ test_insert_iterators()
+ {
+   T a[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+   using It = ItType<T>;
+ 
+   std::inplace_vector<T, 20> v;
+ 
+   auto bounds = typename It::ContainerType(a, a+15);
+   auto it = v.insert(v.begin(), It(a+10, &bounds), It(a+15, &bounds));
+   VERIFY( eq<T>(v, {a+10, 5}) );
+   VERIFY( it == v.begin() );
+ 
+   bounds = typename It::ContainerType(a, a+15);
+   it = v.insert(v.begin(), It(a, &bounds), It(a+5, &bounds));
+   VERIFY( prefix<T>(v, {a, 5}) );
+   VERIFY( it == v.begin() );
+ 
+   bounds = typename It::ContainerType(a, a+15);
+   it = v.insert(v.begin() + 5, It(a+5, &bounds), It(a+10, &bounds));
+   VERIFY( eq<T>(v, {a, 15}) );
+   VERIFY( it == v.begin() + 5 );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   const bool seg = std::forward_iterator<It>;
+   auto vc = v;
+   bounds = typename It::ContainerType(a, a+15);
+   try
+   {
+     vc.insert(vc.begin(), It(a, &bounds), It(a+10, &bounds));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( prefix<T>(vc, {a, seg ? 15 : 0}) );
+ 
+   vc = v;
+   bounds = typename It::ContainerType(a, a+15);
+   try
+   {
+     vc.insert(vc.begin()+5, It(a, &bounds), It(a+10, &bounds));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( prefix<T>(vc, {a, seg ? 15 : 5}) );
+ 
+   vc = v;
+   bounds = typename It::ContainerType(a, a+15);
+   try
+   {
+     vc.insert(vc.end(), It(a, &bounds), It(a+10, &bounds));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( prefix<T>(vc, {a, 15}) );
+ #endif
+ }
+ 
+ template<typename T>
+ constexpr void
+ test_insert_initializer_list()
+ {
+   T a[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ 
+   std::inplace_vector<T, 20> v;
+ 
+   auto it = v.insert(v.begin(), {T(11), T(12), T(13), T(14), T(15)});
+   VERIFY( eq<T>(v, {a+10, 5}) );
+   VERIFY( it == v.begin() );
+ 
+   it = v.insert(v.begin(), {T(1), T(2), T(3), T(4), T(5)});
+   VERIFY( prefix<T>(v, {a, 5}) );
+   VERIFY( it == v.begin() );
+ 
+   it = v.insert(v.begin() + 5, {T(6), T(7), T(8), T(9), T(10)});
+   VERIFY( eq<T>(v, {a, 15}) );
+   VERIFY( it == v.begin() + 5 );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   std::initializer_list<T> il
+   = {T(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(9)};
+ 
+   try
+   {
+     v.insert(v.begin(), il);
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, 15}) );
+ 
+   try
+   {
+     v.insert(v.begin()+5, il);
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, 15}) );
+ 
+   try
+   {
+     v.insert(v.end(), il);
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, 15}) );
+ #endif
+ }
+ 
+ template<typename T>
+ constexpr void
+ test_insert_repeated()
+ {
+   T a[]{5,5,5,5,5,6,6,6,6,6,7,7,7,7,7};
+ 
+   std::inplace_vector<T, 20> v;
+ 
+   auto it = v.insert(v.begin(), 5, T(7));
+   VERIFY( eq<T>(v, {a+10, 5}) );
+   VERIFY( it == v.begin() );
+ 
+   it = v.insert(v.begin(), 5, T(5));
+   VERIFY( prefix<T>(v, {a, 5}) );
+   VERIFY( it == v.begin() );
+ 
+   it = v.insert(v.begin() + 5, 5, T(6));
+   VERIFY( eq<T>(v, {a, 15}) );
+   VERIFY( it == v.begin() + 5 );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   try
+   {
+     v.insert(v.begin(), 10u, T(6));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, 15}) );
+ 
+   try
+   {
+     v.insert(v.begin()+5, 10u, T(6));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, 15}) );
+ 
+   try
+   {
+     v.insert(v.end(), 10u, T(6));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, 15}) );
+ #endif
+ }
+ 
+ template<typename T>
+ constexpr void
+ test_inserts()
+ {
+   using namespace __gnu_test;
+   // TODO make test iterators consteval
+   if !consteval {
+     do_test_ranges<test_forward_range<int>>();
+     do_test_ranges<test_sized_range_sized_sent<int, forward_iterator_wrapper>>();
+ 
+     do_test_ranges<test_input_range<int>>();
+     do_test_ranges<test_input_sized_range<int>>();
+     do_test_ranges<test_sized_range_sized_sent<int, input_iterator_wrapper>>();
+ 
+     do_test_ranges<test_range<int, input_iterator_wrapper_nocopy>>();
+     do_test_ranges<test_sized_range<int, input_iterator_wrapper_nocopy>>();
+     do_test_ranges<test_sized_range_sized_sent<int, input_iterator_wrapper_nocopy>>();
+ 
+     test_insert_iterators<T, input_iterator_wrapper>();
+     test_insert_iterators<T, forward_iterator_wrapper>();
+     test_insert_iterators<T, random_access_iterator_wrapper>();
+   }
+ 
+   test_insert_initializer_list<T>();
+   test_insert_repeated<T>();
+ }
+ 
+ int main()
+ {
+   auto test_all = []{
+     test_add_to_full<0, int>();
+     test_add_to_full<0, X>();
+     test_add_to_full<4, int>();
+ 
+     test_inserts<int>();
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error uncomemnt test_inserts<X>()
+ #endif
+     if !consteval {
+       test_add_to_full<4, X>();
+       test_inserts<X>();
+     }
+     return true;
+   };
+ 
+   test_all();
+   static_assert(test_all());
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,215 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ 
+ #include <span>
+ #include <testsuite_hooks.h>
+ 
+ struct X
+ {
+   X() = default;
+   constexpr X(int p) : v(p) {}
+   constexpr X(const X& o) : v(o.v) { } // not trivial
+   constexpr X& operator=(const X& o) // not trivial
+   { v = o.v; return *this; }
+ 
+   int v;
+ 
+   friend auto operator<=>(const X&, const X&) = default;
+ };
+ 
+ template<typename T, typename V, size_t N>
+ constexpr bool
+ eq(const std::inplace_vector<V, N>& l, std::span<const T> r) {
+   if (l.size() != r.size())
+     return false;
+   for (auto i = 0u; i < l.size(); ++i)
+     if (l[i] != r[i])
+       return false;
+   return true;
+ };
+ 
+ template<size_t N, typename T>
+ constexpr void
+ test_add_to_full()
+ {
+   using namespace __gnu_test;
+ 
+   T a[]{1,2,3,4,5,6,7,8,9};
+   const T c(10);
+ 
+   std::inplace_vector<T, N> v(std::from_range, std::span(a, a+N));
+ 
+   VERIFY( v.try_emplace_back(1) == nullptr );
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( v.try_push_back(T(1)) == nullptr );
+   VERIFY( eq<T>(v, {a, N}) );
+   VERIFY( v.try_push_back(c) == nullptr );
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+ #ifdef __cpp_exceptions
+ #ifdef __cpp_lib_constexpr_exceptions
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   try
+   {
+     v.emplace_back(1);
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.push_back(T(1));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.push_back(c);
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.insert(v.end(), T(1));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.insert(v.begin(), c);
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.emplace(v.end(), c);
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ 
+   try
+   {
+     v.emplace(v.begin(), T(2));
+     VERIFY(false);
+   }
+   catch (std::bad_alloc const&)
+   {
+   }
+   VERIFY( eq<T>(v, {a, N}) );
+ #endif
+ }
+ 
+ template<typename T>
+ constexpr void
+ test_inserts()
+ {
+   T a[]{3,14,13,1,2,3,4,5,3,7,8,3,10,11,3};
+   const T c(3);
+ 
+   std::inplace_vector<T, 20> v;
+ 
+   v.emplace_back(1);
+   VERIFY( eq<T>(v, {a+3, 1}) );
+   v.push_back(T(2));
+   VERIFY( eq<T>(v, {a+3, 2}) );
+   v.push_back(c);
+   VERIFY( eq<T>(v, {a+3, 3}) );
+ 
+   v.unchecked_emplace_back(4);
+   VERIFY( eq<T>(v, {a+3, 4}) );
+   v.unchecked_push_back(T(5));
+   VERIFY( eq<T>(v, {a+3, 5}) );
+   v.unchecked_push_back(c);
+   VERIFY( eq<T>(v, {a+3, 6}) );
+ 
+   T* ptr = v.try_emplace_back(7);
+   VERIFY( eq<T>(v, {a+3, 7}) );
+   VERIFY( ptr = &v.back() );
+   ptr = v.try_push_back(T(8));
+   VERIFY( eq<T>(v, {a+3, 8}) );
+   VERIFY( ptr = &v.back() );
+   ptr = v.try_push_back(c);
+   VERIFY( eq<T>(v, {a+3, 9}) );
+   VERIFY( ptr = &v.back() );
+ 
+   auto it = v.emplace(v.end(), 10);
+   VERIFY( eq<T>(v, {a+3, 10}) );
+   VERIFY( it == v.end()-1 );
+   it = v.insert(v.end(), T(11));
+   VERIFY( eq<T>(v, {a+3, 11}) );
+   VERIFY( it == v.end()-1 );
+   it = v.insert(v.end(), c);
+   VERIFY( eq<T>(v, {a+3, 12}) );
+   VERIFY( it == v.end()-1 );
+ 
+   it = v.emplace(v.begin(), 13);
+   VERIFY( eq<T>(v, {a+2, 13}) );
+   VERIFY( it == v.begin() );
+   it = v.insert(v.begin(), T(14));
+   VERIFY( eq<T>(v, {a+1, 14}) );
+   VERIFY( it == v.begin() );
+   it = v.insert(v.begin(), c);
+   VERIFY( eq<T>(v, {a+0, 15}) );
+   VERIFY( it == v.begin() );
+ 
+   it = v.emplace(v.begin()+2, 22);
+   VERIFY( *it == 22 );
+   VERIFY( it == v.begin()+2 );
+   it = v.insert(v.begin()+6, T(24));
+   VERIFY( *it == 24 );
+   VERIFY( it == v.begin()+6 );
+   it = v.insert(v.begin()+13, c);
+   VERIFY( *it == 3 );
+   VERIFY( it == v.begin()+13 );
+ }
+ 
+ int main()
+ {
+   auto test_all = [] {
+     test_add_to_full<0, int>();
+     test_add_to_full<0, X>();
+ 
+     test_add_to_full<4, int>();
+ 
+     test_inserts<int>();
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error uncomemnt test_inserts<X>()
+ #endif
+     if ! consteval {
+       test_add_to_full<4, X>();
+       test_inserts<X>();
+     }
+     return true;
+   };
+ 
+   test_all();
+   static_assert(test_all());;
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,358 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ #include <ranges>
+ #include <testsuite_hooks.h>
+ 
+ struct X
+ {
+   X() = default;
+   constexpr X(int p) : v(p) {}
+   constexpr X(const X& o) : v(o.v) { } // not trivial
+   constexpr X(X&& o) : v(o.v) { } // not trivial
+ 
+   constexpr X& operator=(const X& o) // not trivial
+   { v = o.v; return *this; }
+   constexpr X& operator=(X&& o) // not trivial
+   { v = o.v; return *this; }
+ 
+   int v;
+ 
+   friend auto operator<=>(const X&, const X&) = default;
+ };
+ 
+ template<bool CNoex, bool ANoex>
+ struct N
+ {
+   N() = default;
+   constexpr N(N&&) noexcept(CNoex) { } // not trivial
+   constexpr N& operator=(N&& o) noexcept(ANoex) // not trivial
+   { return *this; }
+ };
+ 
+ struct D
+ {
+   D() = default;
+   D(D&&) = default;
+   D& operator=(D&&) = default;
+   ~D() {} // not trivially destructible
+ };
+ 
+ struct U
+ {
+   U() = default;
+   U(U&&) noexcept(false) = default; // lies about noexcept, is trivial but throwing
+   U& operator=(U&&) noexcept(false) = default; // lies about noexcept, is trivial but throwing
+ };
+ 
+ template<bool SNoex, bool CNoex, bool ANoex>
+ struct S {
+   S() = default;
+   constexpr S(S&&) noexcept(CNoex) { } // not trivial
+   constexpr S& operator=(S&& o) noexcept(ANoex) // not trivial
+   { return *this; }
+ 
+   friend constexpr
+   void swap(S&, S&) noexcept(SNoex) {}
+ };
+ 
+ // n5008 inplace.vector.overview says for inplace_vector<T, 0>
+ // provides trivial copy/move/default cosntructpr regardless of T
+ struct Z
+ {
+   Z(const Z&) = delete;
+   Z& operator=(const Z&) = delete;
+ };
+ 
+ template<size_t N, typename T>
+   constexpr std::inplace_vector<T, N>
+   materialize(std::initializer_list<int> il)
+   { 
+     std::inplace_vector<T, N> res;
+     for (int x : il)
+       res.emplace_back(x);
+     return res;
+   }
+ 
+ static_assert(std::is_move_constructible_v<std::inplace_vector<int, 2>>);
+ static_assert(std::is_move_constructible_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_move_constructible_v<std::inplace_vector<N<false, false>, 2>>);
+ static_assert(std::is_move_constructible_v<std::inplace_vector<D, 2>>);
+ static_assert(std::is_move_constructible_v<std::inplace_vector<U, 2>>);
+ // The operators are not constrained, as for any other container
+ static_assert(std::is_move_constructible_v<std::inplace_vector<Z, 2>>);
+ 
+ static_assert(std::is_nothrow_move_constructible_v<std::inplace_vector<int, 2>>);
+ static_assert(!std::is_nothrow_move_constructible_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_nothrow_move_constructible_v<std::inplace_vector<N<true, true>, 2>>);
+ static_assert(std::is_nothrow_move_constructible_v<std::inplace_vector<N<true, false>, 2>>);
+ static_assert(!std::is_nothrow_move_constructible_v<std::inplace_vector<N<false, true>, 2>>);
+ static_assert(!std::is_nothrow_move_constructible_v<std::inplace_vector<N<false, false>, 2>>);
+ static_assert(std::is_nothrow_move_constructible_v<std::inplace_vector<D, 2>>);
+ static_assert(!std::is_nothrow_move_constructible_v<std::inplace_vector<U, 2>>);
+ 
+ static_assert(std::is_trivially_move_constructible_v<std::inplace_vector<int, 2>>);
+ static_assert(!std::is_trivially_move_constructible_v<std::inplace_vector<X, 2>>);
+ static_assert(!std::is_trivially_move_constructible_v<std::inplace_vector<N<true, true>, 2>>);
+ // is_trivially_move_constructible_v checks destructor
+ static_assert(!std::is_trivially_move_constructible_v<std::inplace_vector<D, 2>>);
+ static_assert(std::is_trivially_move_constructible_v<std::inplace_vector<U, 2>>);
+ 
+ static_assert(std::is_move_assignable_v<std::inplace_vector<int, 2>>);
+ static_assert(std::is_move_assignable_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_move_assignable_v<std::inplace_vector<N<false, false>, 2>>);
+ static_assert(std::is_move_assignable_v<std::inplace_vector<D, 2>>);
+ static_assert(std::is_move_assignable_v<std::inplace_vector<U, 2>>);
+ // The operators are not constrained, as for any other container
+ static_assert(std::is_move_assignable_v<std::inplace_vector<Z, 2>>);
+ 
+ static_assert(std::is_nothrow_move_assignable_v<std::inplace_vector<int, 2>>);
+ static_assert(!std::is_nothrow_move_assignable_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_nothrow_move_assignable_v<std::inplace_vector<N<true, true>, 2>>);
+ static_assert(!std::is_nothrow_move_assignable_v<std::inplace_vector<N<true, false>, 2>>);
+ static_assert(!std::is_nothrow_move_assignable_v<std::inplace_vector<N<false, true>, 2>>);
+ static_assert(!std::is_nothrow_move_assignable_v<std::inplace_vector<N<false, false>, 2>>);
+ static_assert(std::is_nothrow_move_assignable_v<std::inplace_vector<D, 2>>);
+ static_assert(!std::is_nothrow_move_assignable_v<std::inplace_vector<U, 2>>);
+ 
+ static_assert(std::is_trivially_move_assignable_v<std::inplace_vector<int, 2>>);
+ static_assert(!std::is_trivially_move_assignable_v<std::inplace_vector<X, 2>>);
+ static_assert(!std::is_trivially_move_assignable_v<std::inplace_vector<N<true, true>, 2>>);
+ // destructor is not trivial
+ static_assert(!std::is_trivially_move_assignable_v<std::inplace_vector<D, 2>>);
+ static_assert(std::is_trivially_move_assignable_v<std::inplace_vector<U, 2>>);
+ 
+ static_assert(std::is_nothrow_swappable_v<std::inplace_vector<int, 2>>);
+ static_assert(!std::is_nothrow_swappable_v<std::inplace_vector<X, 2>>);
+ static_assert(std::is_nothrow_swappable_v<std::inplace_vector<N<true, true>, 2>>);
+ static_assert(!std::is_nothrow_swappable_v<std::inplace_vector<N<true, false>, 2>>);
+ static_assert(!std::is_nothrow_swappable_v<std::inplace_vector<N<false, true>, 2>>);
+ static_assert(!std::is_nothrow_swappable_v<std::inplace_vector<N<false, false>, 2>>);
+ static_assert(std::is_nothrow_swappable_v<std::inplace_vector<S<true, true, true>, 2>>);
+ static_assert(std::is_nothrow_swappable_v<std::inplace_vector<S<true, true, false>, 2>>);
+ static_assert(!std::is_nothrow_swappable_v<std::inplace_vector<S<true, false, true>, 2>>);
+ static_assert(!std::is_nothrow_swappable_v<std::inplace_vector<S<true, false, false>, 2>>);
+ static_assert(!std::is_nothrow_swappable_v<std::inplace_vector<S<false, true, false>, 2>>);
+ static_assert(!std::is_nothrow_swappable_v<std::inplace_vector<S<false, false, false>, 2>>);
+ static_assert(std::is_nothrow_swappable_v<std::inplace_vector<D, 2>>);
+ static_assert(!std::is_nothrow_swappable_v<std::inplace_vector<U, 2>>);
+ 
+ static_assert(std::is_nothrow_move_constructible_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_nothrow_move_constructible_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_nothrow_move_constructible_v<std::inplace_vector<N<false, false>, 0>>);
+ static_assert(std::is_nothrow_move_constructible_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_nothrow_move_constructible_v<std::inplace_vector<U, 0>>);
+ static_assert(std::is_nothrow_move_constructible_v<std::inplace_vector<Z, 0>>);
+ 
+ static_assert(std::is_trivially_move_constructible_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_trivially_move_constructible_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_trivially_move_constructible_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_trivially_move_constructible_v<std::inplace_vector<U, 0>>);
+ static_assert(std::is_trivially_move_constructible_v<std::inplace_vector<Z, 0>>);
+ 
+ static_assert(std::is_nothrow_move_assignable_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_nothrow_move_assignable_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_nothrow_move_assignable_v<std::inplace_vector<N<false, false>, 0>>);
+ static_assert(std::is_nothrow_move_assignable_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_nothrow_move_assignable_v<std::inplace_vector<U, 0>>);
+ static_assert(std::is_nothrow_move_assignable_v<std::inplace_vector<Z, 0>>);
+ 
+ static_assert(std::is_trivially_move_assignable_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_trivially_move_assignable_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_trivially_move_assignable_v<std::inplace_vector<N<false, false>, 0>>);
+ static_assert(std::is_trivially_move_assignable_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_trivially_move_assignable_v<std::inplace_vector<U, 0>>);
+ static_assert(std::is_trivially_move_assignable_v<std::inplace_vector<Z, 0>>);
+ 
+ static_assert(std::is_nothrow_swappable_v<std::inplace_vector<int, 0>>);
+ static_assert(std::is_nothrow_swappable_v<std::inplace_vector<X, 0>>);
+ static_assert(std::is_nothrow_swappable_v<std::inplace_vector<N<false, false>, 0>>);
+ static_assert(std::is_nothrow_swappable_v<std::inplace_vector<D, 0>>);
+ static_assert(std::is_nothrow_swappable_v<std::inplace_vector<U, 0>>);
+ static_assert(std::is_nothrow_swappable_v<std::inplace_vector<Z, 0>>);
+ 
+ template<typename T, size_t N>
+ constexpr bool
+ eq(const std::inplace_vector<T, N>& s, std::span<const T> o)
+ { return std::ranges::equal(s, o); }
+ 
+ constexpr void
+ test_ctor()
+ {
+   auto e0 = materialize<0, int>({});
+   VERIFY( e0.empty() );
+   auto e1 = materialize<0, X>({});
+   VERIFY( e1.empty() );
+   auto e2 = materialize<0, Z>({});
+   VERIFY( e2.empty() );
+ 
+   auto c0 = materialize<5, int>({});
+   VERIFY( c0.empty() );
+ 
+   auto c3 = materialize<5, int>({1, 2, 3});
+   VERIFY( eq(c3, {1, 2, 3}) );
+ 
+   auto c5 = materialize<5, int>({1, 2, 3, 4, 5});
+   VERIFY( eq(c5, {1, 2, 3, 4, 5}) );
+ 
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   auto x0 = materialize<3, X>({});
+   VERIFY( x0.empty() );
+ 
+   auto x2 = materialize<3, X>({1, 2});
+   VERIFY( eq(x2, {1, 2}) );
+ 
+   auto x3 = materialize<3, X>({1, 2, 3});
+   VERIFY( eq(x3, {1, 2, 3}) );
+ }
+ 
+ constexpr void
+ test_assign()
+ {
+   std::inplace_vector<int, 0> e0;
+   e0 = materialize<0, int>({});
+   VERIFY( e0.empty() );
+   std::inplace_vector<X, 0> e1;
+   e1 = materialize<0, X>({});
+   VERIFY( e1.empty() );
+   std::inplace_vector<Z, 0> e2;
+   e2 = materialize<0, Z>({});
+   VERIFY( e2.empty() );
+ 
+   std::inplace_vector<int, 5> c;
+   c = materialize<5, int>({});
+   VERIFY( c.empty() );
+ 
+   c = materialize<5, int>({1, 2, 3});
+   VERIFY( eq(c, {1, 2, 3}) );
+  
+   c = materialize<5, int>({1, 2, 3, 4, 5});
+   VERIFY( eq(c, {1, 2, 3, 4, 5}) );
+ 
+   c = materialize<5, int>({4, 5});
+   VERIFY( eq(c, {4, 5}) );
+ 
+   c = materialize<5, int>({});
+   VERIFY( c.empty() );
+ 
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   std::inplace_vector<X, 5> x;
+   x = materialize<5, X>({});
+   VERIFY( x.empty() );
+ 
+   x = materialize<5, X>({1, 2, 3});
+   VERIFY( eq(x, {1, 2, 3}) );
+  
+   x = materialize<5, X>({1, 2, 3, 4, 5});
+   VERIFY( eq(x, {1, 2, 3, 4, 5}) );
+ 
+   x = materialize<5, X>({4, 5});
+   VERIFY( eq(x, {4, 5}) );
+ 
+   x = materialize<5, X>({});
+   VERIFY( x.empty() );
+ }
+ 
+ constexpr void
+ test_swap()
+ {
+   std::inplace_vector<int, 0> e0a, e0b;
+   swap(e0a, e0b);
+   VERIFY( e0a.empty() );
+   VERIFY( e0b.empty() );
+   e0a.swap(e0b);
+   VERIFY( e0a.empty() );
+   VERIFY( e0b.empty() );
+  
+   std::inplace_vector<X, 0> e1a, e1b;
+   swap(e1a, e1b);
+   VERIFY( e1a.empty() );
+   VERIFY( e1b.empty() );
+   e1a.swap(e1b);
+   VERIFY( e1a.empty() );
+   VERIFY( e1b.empty() );
+ 
+   std::inplace_vector<Z, 0> e2a, e2b;
+   swap(e2a, e2b);
+   VERIFY( e2a.empty() );
+   VERIFY( e2b.empty() );
+   e2a.swap(e2b);
+   VERIFY( e2a.empty() );
+   VERIFY( e2b.empty() );
+ 
+   std::inplace_vector<int, 5> c0;
+   std::inplace_vector<int, 5> c3{1, 2, 3};
+   std::inplace_vector<int, 5> c5{1, 2, 3, 4, 5};
+ 
+   swap(c0, c3);
+   VERIFY( c3.empty() );
+   VERIFY( eq(c0, {1, 2, 3}) );
+   c0.swap(c3);
+   VERIFY( c0.empty() );
+   VERIFY( eq(c3, {1, 2, 3}) );
+ 
+   swap(c3, c5);
+   VERIFY( eq(c5, {1, 2, 3}) );
+   VERIFY( eq(c3, {1, 2, 3, 4, 5}) );
+   c5.swap(c3);
+   VERIFY( eq(c3, {1, 2, 3}) );
+   VERIFY( eq(c5, {1, 2, 3, 4, 5}) );
+ 
+ #ifdef __cpp_lib_constexpr_inplace_vector
+ #error remove the consteval check
+ #endif
+   if consteval {
+     return;
+   }
+ 
+   std::inplace_vector<X, 5> x0;
+   std::inplace_vector<X, 5> x3 = {1, 2, 3};
+   std::inplace_vector<X, 5> x5 = {1, 2, 3, 4, 5};
+ 
+   swap(x0, x3);
+   VERIFY( x3.empty() );
+   VERIFY( eq(x0, {1, 2, 3}) );
+   x0.swap(x3);
+   VERIFY( x0.empty() );
+   VERIFY( eq(x3, {1, 2, 3}) );
+ 
+   swap(x3, x5);
+   VERIFY( eq(x5, {1, 2, 3}) );
+   VERIFY( eq(x3, {1, 2, 3, 4, 5}) );
+   x5.swap(x3);
+   VERIFY( eq(x3, {1, 2, 3}) );
+   VERIFY( eq(x5, {1, 2, 3, 4, 5}) );
+ }
+ 
+ constexpr auto e0 = materialize<0, int>({});
+ constexpr auto e1 = materialize<0, X>({});
+ constexpr auto e2 = materialize<0, Z>({});
+ 
+ constexpr auto t1 = materialize<3, int>({});
+ constexpr auto t2 = materialize<3, int>({1, 2});
+ constexpr auto t3 = materialize<3, int>({11, 22, 33});
+ 
+ int main()
+ {
+   auto tests = [] {
+     test_ctor();
+     test_assign();
+     test_swap();
+     return true;
+   };
+ 
+   tests();
+   constexpr bool _ = tests();
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/relops.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/relops.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/relops.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/relops.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,60 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <inplace_vector>
+ 
+ #include <span>
+ #include <testsuite_hooks.h>
+ 
+ template<size_t N, typename T>
+ constexpr void
+ test_equal(size_t c)
+ {
+   T a[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
+   std::inplace_vector<T, N> v(a, a+c);
+   VERIFY(   v == v  );
+   VERIFY( !(v != v) );
+   VERIFY( !(v <  v) );
+   VERIFY( !(v >  v) );
+   VERIFY(   v <= v  );
+   VERIFY(   v >= v  );
+   VERIFY( (v <=> v) == 0 );
+ }
+ 
+ template<typename T>
+ constexpr void
+ test_not_equal()
+ {
+   std::inplace_vector<T, 10> v3l{T{1}, T{2}, T{3}};
+   std::inplace_vector<T, 10> v3g{T{1}, T{3}, T{3}};
+   VERIFY( !(v3l == v3g) );
+   VERIFY(   v3l != v3g  );
+   VERIFY(   v3l <  v3g  );
+   VERIFY( !(v3l >  v3g) );
+   VERIFY(   v3l <= v3g  );
+   VERIFY( !(v3l >= v3g) );
+   VERIFY( (v3l <=> v3g) < 0 );
+ 
+   std::inplace_vector<T, 10> v2{T{1}, T{2}};
+   VERIFY( !(v2 == v3l) );
+   VERIFY(   v2 != v3l  );
+   VERIFY(   v2 <  v3l  );
+   VERIFY( !(v2 >  v3l) );
+   VERIFY(   v2 <= v3l  );
+   VERIFY( !(v2 >= v3l) );
+   VERIFY( (v2 <=> v3l) < 0 );
+ }
+ 
+ int main()
+ {
+   auto test_all = [] {
+     test_equal<0, int>(0);
+     test_equal<4, int>(0);
+     test_equal<4, int>(2);
+     test_equal<4, int>(4);
+     test_not_equal<int>();
+     return true;
+   };
+ 
+   test_all();
+   static_assert(test_all());;
+ }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/version.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/version.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/inplace_vector/version.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/inplace_vector/version.cc	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,20 ----
+ // { dg-do preprocess { target c++26 } }
+ // { dg-add-options no_pch }
+ 
+ #include <inplace_vector>
+ 
+ #ifndef __cpp_lib_inplace_vector
+ # error "Feature-test macro for inplace_vector missing in <inplace_vector>"
+ #elif __cpp_lib_inplace_vector != 202406L
+ # error "Feature-test macro for inplace_vector has wrong value in <inplace_vector>"
+ #endif
+ 
+ #undef __cpp_lib_inplace_vector
+ 
+ #include <version>
+ 
+ #ifndef __cpp_lib_inplace_vector
+ # error "Feature-test macro for inplace_vector missing in <version>"
+ #elif __cpp_lib_inplace_vector != 202406L
+ # error "Feature-test macro for inplace_vector has wrong value in <version>"
+ #endif
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc	Sun Jul 13 22:33:07 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc	Sun Jul 20 22:32:41 2025
***************
*** 2,8 ****
  #include <mdspan>
  
  #include <testsuite_hooks.h>
! #include "int_like.h"
  
  // Test construction from a custom integer-like object, that has
  // no copy/move ctor or copy/move assignment operator.
--- 2,8 ----
  #include <mdspan>
  
  #include <testsuite_hooks.h>
! #include "../int_like.h"
  
  // Test construction from a custom integer-like object, that has
  // no copy/move ctor or copy/move assignment operator.
*************** constexpr size_t dyn = std::dynamic_exte
*** 12,62 ****
  static_assert(std::is_convertible_v<IntLike, int>);
  static_assert(std::is_nothrow_constructible_v<int, IntLike>);
  
! void
! test_shape(const auto& s2, const auto& s23)
! {
!   std::extents<int, 2, 3> expected;
  
!   std::extents<int, 2, 3> e1(s23);
!   VERIFY(e1 == expected);
  
!   std::extents<int, dyn, 3> e2(s2);
!   VERIFY(e2 == expected);
  
!   std::extents<int, dyn, 3> e3(s23);
!   VERIFY(e3 == expected);
  
!   std::extents<int, dyn, dyn> e4(s23);
!   VERIFY(e4 == expected);
! }
  
! void
! test_pack()
! {
!   std::extents<int, 2, 3> expected;
  
!   std::extents<int, dyn, 3> e1(IntLike(2));
!   VERIFY(e1 == expected);
  
!   std::extents<int, dyn, 3> e2(IntLike(2), IntLike(3));
!   VERIFY(e2 == expected);
  
!   std::extents<int, dyn, dyn> e3(IntLike(2), IntLike(3));
!   VERIFY(e3 == expected);
! }
  
  int
  main()
  {
!   auto a2 = std::array<IntLike, 1>{IntLike(2)};
!   auto s2 = std::span<IntLike, 1>(a2);
! 
!   auto a23 = std::array<IntLike, 2>{IntLike(2), IntLike(3)};
!   auto s23 = std::span<IntLike, 2>(a23);
! 
!   test_shape(a2, a23);
!   test_shape(s2, s23);
!   test_pack();
  
    return 0;
  }
--- 12,96 ----
  static_assert(std::is_convertible_v<IntLike, int>);
  static_assert(std::is_nothrow_constructible_v<int, IntLike>);
  
! template<typename Extents, bool Valid>
!   void
!   test_shape(const auto& shape)
!   {
!     static_assert(std::is_constructible_v<Extents, decltype(shape)> == Valid);
  
!     if constexpr (Valid)
!       {
! 	std::extents<int, 2, 3> expected;
! 	Extents actual(shape);
! 	VERIFY(actual == expected);
!       }
!   }
  
! template<typename Int, bool Valid>
!   void
!   test_shape_all()
!   {
!     auto a2 = std::array<Int, 1>{Int(2)};
!     auto s2 = std::span<Int, 1>(a2);
  
!     auto a23 = std::array<Int, 2>{Int(2), Int(3)};
!     auto s23 = std::span<Int, 2>(a23);
  
!     auto check = [](const auto& dyn_exts, const auto& full_exts)
!       {
! 	test_shape<std::extents<int, 2, 3>, Valid>(full_exts);
! 	test_shape<std::extents<int, dyn, 3>, Valid>(dyn_exts);
! 	test_shape<std::extents<int, dyn, 3>, Valid>(full_exts);
! 	test_shape<std::extents<int, dyn, dyn>, Valid>(full_exts);
!       };
  
!     check(a2, a23);
!     check(s2, s23);
!   }
  
! // Needed because is_constructible requires that Ints are move constructible.
! template<typename Extents, typename... Ints>
!   concept has_ctor = requires
!   {
!     { Extents(Ints(0)...) } -> std::same_as<Extents>;
!   };
  
! template<typename Int, bool Valid>
!   void
!   test_pack_all()
!   {
!     static_assert(has_ctor<std::extents<int, dyn, 3>, Int> == Valid);
!     static_assert(has_ctor<std::extents<int, dyn, 3>, Int, Int> == Valid);
!     static_assert(has_ctor<std::extents<int, dyn, dyn>, Int, Int> == Valid);
  
!     if constexpr (Valid)
!       {
! 	std::extents<int, 2, 3> expected;
! 
! 	std::extents<int, dyn, 3> e1(Int(2));
! 	VERIFY(e1 == expected);
! 
! 	std::extents<int, dyn, 3> e2(Int(2), Int(3));
! 	VERIFY(e2 == expected);
! 
! 	std::extents<int, dyn, dyn> e3(Int(2), Int(3));
! 	VERIFY(e3 == expected);
!       }
!   }
  
  int
  main()
  {
!   test_shape_all<int, true>();
!   test_shape_all<IntLike, true>();
!   test_shape_all<ThrowingInt, false>();
!   test_shape_all<MutatingInt, false>();
!   test_shape_all<RValueInt, false>();
  
+   test_pack_all<int, true>();
+   test_pack_all<IntLike, true>();
+   test_pack_all<ThrowingInt, false>();
+   test_pack_all<MutatingInt, true>();
+   test_pack_all<RValueInt, true>();
    return 0;
  }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/extents/int_like.h gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/extents/int_like.h
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/extents/int_like.h	Sun Jul 13 22:33:07 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/extents/int_like.h	Thu Jan  1 00:00:00 1970
***************
*** 1,30 ****
- #ifndef TEST_MDSPAN_INT_LIKE_H
- #define TEST_MDSPAN_INT_LIKE_H
- 
- class IntLike
- {
- public:
-   explicit
-   IntLike(int i)
-   : _M_i(i)
-   { }
- 
-   IntLike() = delete;
-   IntLike(const IntLike&) = delete;
-   IntLike(IntLike&&) = delete;
- 
-   const IntLike&
-   operator=(const IntLike&) = delete;
- 
-   const IntLike&
-   operator=(IntLike&&) = delete;
- 
-   constexpr
-   operator int() const noexcept
-   { return _M_i; }
- 
- private:
-   int _M_i;
- };
- 
- #endif // TEST_MDSPAN_INT_LIKE_H
--- 0 ----
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h	Sun Jul 20 22:32:41 2025
***************
*** 0 ****
--- 1,63 ----
+ #ifndef TEST_MDSPAN_INT_LIKE_H
+ #define TEST_MDSPAN_INT_LIKE_H
+ 
+ enum class CustomIndexKind
+ {
+   Const,
+   Throwing,
+   Mutating,
+   RValue,
+ };
+ 
+ template<CustomIndexKind Kind>
+   class CustomIndexType
+   {
+   public:
+     explicit
+     CustomIndexType(int i)
+     : _M_i(i)
+     { }
+ 
+     CustomIndexType() = delete;
+     CustomIndexType(const CustomIndexType&) = delete;
+     CustomIndexType(CustomIndexType&&) = delete;
+ 
+     const CustomIndexType&
+     operator=(const CustomIndexType&) = delete;
+ 
+     const CustomIndexType&
+     operator=(CustomIndexType&&) = delete;
+ 
+     constexpr
+     operator int() const noexcept
+     requires (Kind == CustomIndexKind::Const)
+     { return _M_i; }
+ 
+     constexpr
+     operator int() const
+     requires (Kind == CustomIndexKind::Throwing)
+     { return _M_i; }
+ 
+     constexpr
+     operator int() noexcept
+     requires (Kind == CustomIndexKind::Mutating)
+     { return _M_i; }
+ 
+     constexpr
+     operator int() && noexcept
+     requires (Kind == CustomIndexKind::RValue)
+     { return _M_i; }
+ 
+   private:
+     int _M_i;
+   };
+ 
+ using IntLike = CustomIndexType<CustomIndexKind::Const>;
+ using ThrowingInt = CustomIndexType<CustomIndexKind::Throwing>;
+ using MutatingInt = CustomIndexType<CustomIndexKind::Mutating>;
+ using RValueInt = CustomIndexType<CustomIndexKind::RValue>;
+ 
+ struct NotIntLike
+ { };
+ 
+ #endif // TEST_MDSPAN_INT_LIKE_H
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc	Sun Jul 13 22:33:07 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc	Sun Jul 20 22:32:41 2025
***************
*** 1,6 ****
--- 1,7 ----
  // { dg-do run { target c++23 } }
  #include <mdspan>
  
+ #include "../int_like.h"
  #include <cstdint>
  #include <testsuite_hooks.h>
  
*************** template<typename Mapping, size_t N>
*** 59,72 ****
      return ret;
    }
  
! template<typename Mapping, typename... Indices>
    constexpr void
    test_linear_index(const Mapping& m, Indices... i)
    {
      using index_type = typename Mapping::index_type;
      index_type expected = linear_index(m, std::array{index_type(i)...});
!     VERIFY(m(i...) == expected);
!     VERIFY(m(uint8_t(i)...) == expected);
    }
  
  template<typename Layout>
--- 60,72 ----
      return ret;
    }
  
! template<typename Int, typename Mapping, typename... Indices>
    constexpr void
    test_linear_index(const Mapping& m, Indices... i)
    {
      using index_type = typename Mapping::index_type;
      index_type expected = linear_index(m, std::array{index_type(i)...});
!     VERIFY(m(Int(i)...) == expected);
    }
  
  template<typename Layout>
*************** template<typename Layout>
*** 77,102 ****
      VERIFY(m() == 0);
    }
  
! template<typename Layout>
    constexpr void
    test_linear_index_1d()
    {
      typename Layout::mapping<std::extents<int, 5>> m;
!     test_linear_index(m, 0);
!     test_linear_index(m, 1);
!     test_linear_index(m, 4);
    }
  
! template<typename Layout>
    constexpr void
    test_linear_index_2d()
    {
      typename Layout::mapping<std::extents<int, 3, 256>> m;
!     test_linear_index(m, 0, 0);
!     test_linear_index(m, 1, 0);
!     test_linear_index(m, 0, 1);
!     test_linear_index(m, 1, 1);
!     test_linear_index(m, 2, 4);
    }
  
  template<typename Layout>
--- 77,102 ----
      VERIFY(m() == 0);
    }
  
! template<typename Layout, typename Int>
    constexpr void
    test_linear_index_1d()
    {
      typename Layout::mapping<std::extents<int, 5>> m;
!     test_linear_index<Int>(m, 0);
!     test_linear_index<Int>(m, 1);
!     test_linear_index<Int>(m, 4);
    }
  
! template<typename Layout, typename Int>
    constexpr void
    test_linear_index_2d()
    {
      typename Layout::mapping<std::extents<int, 3, 256>> m;
!     test_linear_index<Int>(m, 0, 0);
!     test_linear_index<Int>(m, 1, 0);
!     test_linear_index<Int>(m, 0, 1);
!     test_linear_index<Int>(m, 1, 1);
!     test_linear_index<Int>(m, 2, 4);
    }
  
  template<typename Layout>
*************** template<>
*** 141,184 ****
        }
    };
  
! template<typename Layout>
    constexpr void
    test_linear_index_3d()
    {
      auto m = MappingFactory<Layout>::create(std::extents(3, 5, 7));
!     test_linear_index(m, 0, 0, 0);
!     test_linear_index(m, 1, 0, 0);
!     test_linear_index(m, 0, 1, 0);
!     test_linear_index(m, 0, 0, 1);
!     test_linear_index(m, 1, 1, 0);
!     test_linear_index(m, 2, 4, 6);
    }
  
! struct IntLikeA
! {
!   operator int()
!   { return 0; }
! };
! 
! struct IntLikeB
! {
!   operator int() noexcept
!   { return 0; }
! };
! 
! struct NotIntLike
! { };
  
  template<typename Layout>
    constexpr void
    test_has_linear_index_0d()
    {
      using Mapping = typename Layout::mapping<std::extents<int>>;
!     static_assert(std::invocable<Mapping>);
!     static_assert(!std::invocable<Mapping, int>);
!     static_assert(!std::invocable<Mapping, IntLikeA>);
!     static_assert(!std::invocable<Mapping, IntLikeB>);
!     static_assert(!std::invocable<Mapping, NotIntLike>);
    }
  
  template<typename Layout>
--- 141,174 ----
        }
    };
  
! template<typename Layout, typename Int>
    constexpr void
    test_linear_index_3d()
    {
      auto m = MappingFactory<Layout>::create(std::extents(3, 5, 7));
!     test_linear_index<Int>(m, 0, 0, 0);
!     test_linear_index<Int>(m, 1, 0, 0);
!     test_linear_index<Int>(m, 0, 1, 0);
!     test_linear_index<Int>(m, 0, 0, 1);
!     test_linear_index<Int>(m, 1, 1, 0);
!     test_linear_index<Int>(m, 2, 4, 6);
    }
  
! template<typename Mapping, typename... Ints>
!   concept has_linear_index = requires (Mapping m)
!   {
!     { m(Ints(0)...) } -> std::same_as<typename Mapping::index_type>;
!   };
  
  template<typename Layout>
    constexpr void
    test_has_linear_index_0d()
    {
      using Mapping = typename Layout::mapping<std::extents<int>>;
!     static_assert(has_linear_index<Mapping>);
!     static_assert(!has_linear_index<Mapping, int>);
!     static_assert(!has_linear_index<Mapping, IntLike>);
!     static_assert(!has_linear_index<Mapping, NotIntLike>);
    }
  
  template<typename Layout>
*************** template<typename Layout>
*** 186,197 ****
    test_has_linear_index_1d()
    {
      using Mapping = typename Layout::mapping<std::extents<int, 3>>;
!     static_assert(std::invocable<Mapping, int>);
!     static_assert(!std::invocable<Mapping>);
!     static_assert(!std::invocable<Mapping, IntLikeA>);
!     static_assert(std::invocable<Mapping, IntLikeB>);
!     static_assert(!std::invocable<Mapping, NotIntLike>);
!     static_assert(std::invocable<Mapping, double>);
    }
  
  template<typename Layout>
--- 176,189 ----
    test_has_linear_index_1d()
    {
      using Mapping = typename Layout::mapping<std::extents<int, 3>>;
!     static_assert(!has_linear_index<Mapping>);
!     static_assert(has_linear_index<Mapping, int>);
!     static_assert(has_linear_index<Mapping, double>);
!     static_assert(has_linear_index<Mapping, IntLike>);
!     static_assert(has_linear_index<Mapping, MutatingInt>);
!     static_assert(!has_linear_index<Mapping, ThrowingInt>);
!     static_assert(!has_linear_index<Mapping, NotIntLike>);
!     static_assert(!has_linear_index<Mapping, int, int>);
    }
  
  template<typename Layout>
*************** template<typename Layout>
*** 199,220 ****
    test_has_linear_index_2d()
    {
      using Mapping = typename Layout::mapping<std::extents<int, 3, 5>>;
!     static_assert(std::invocable<Mapping, int, int>);
!     static_assert(!std::invocable<Mapping, int>);
!     static_assert(!std::invocable<Mapping, IntLikeA, int>);
!     static_assert(std::invocable<Mapping, IntLikeB, int>);
!     static_assert(!std::invocable<Mapping, NotIntLike, int>);
!     static_assert(std::invocable<Mapping, double, double>);
    }
  
! template<typename Layout>
    constexpr bool
    test_linear_index_all()
    {
      test_linear_index_0d<Layout>();
!     test_linear_index_1d<Layout>();
!     test_linear_index_2d<Layout>();
!     test_linear_index_3d<Layout>();
      test_has_linear_index_0d<Layout>();
      test_has_linear_index_1d<Layout>();
      test_has_linear_index_2d<Layout>();
--- 191,214 ----
    test_has_linear_index_2d()
    {
      using Mapping = typename Layout::mapping<std::extents<int, 3, 5>>;
!     static_assert(!has_linear_index<Mapping, int>);
!     static_assert(has_linear_index<Mapping, int, int>);
!     static_assert(has_linear_index<Mapping, double, double>);
!     static_assert(has_linear_index<Mapping, IntLike, int>);
!     static_assert(has_linear_index<Mapping, MutatingInt, int>);
!     static_assert(!has_linear_index<Mapping, ThrowingInt, int>);
!     static_assert(!has_linear_index<Mapping, NotIntLike, int>);
!     static_assert(!has_linear_index<Mapping, int, int, int>);
    }
  
! template<typename Layout, typename Int>
    constexpr bool
    test_linear_index_all()
    {
      test_linear_index_0d<Layout>();
!     test_linear_index_1d<Layout, Int>();
!     test_linear_index_2d<Layout, Int>();
!     test_linear_index_3d<Layout, Int>();
      test_has_linear_index_0d<Layout>();
      test_has_linear_index_1d<Layout>();
      test_has_linear_index_2d<Layout>();
*************** template<typename Layout>
*** 527,533 ****
    constexpr bool
    test_mapping_all()
    {
!     test_linear_index_all<Layout>();
      test_required_span_size_all<Layout>();
      test_stride_all<Layout>();
  
--- 521,535 ----
    constexpr bool
    test_mapping_all()
    {
!     test_linear_index_all<Layout, uint8_t>();
!     test_linear_index_all<Layout, int>();
!     if !consteval
!       {
! 	test_linear_index_all<Layout, IntLike>();
! 	test_linear_index_all<Layout, MutatingInt>();
! 	test_linear_index_all<Layout, RValueInt>();
!       }
! 
      test_required_span_size_all<Layout>();
      test_stride_all<Layout>();
  
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc	Sun Jul 13 22:33:07 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc	Sun Jul 20 22:32:41 2025
***************
*** 1,6 ****
--- 1,7 ----
  // { dg-do run { target c++23 } }
  #include <mdspan>
  
+ #include "../int_like.h"
  #include <testsuite_hooks.h>
  
  constexpr size_t dyn = std::dynamic_extent;
*************** test_ctor_default_stride_all()
*** 42,62 ****
    return true;
  }
  
- struct IntLikeA
- {
-   operator int()
-   { return 0; }
- };
- 
- struct IntLikeB
- {
-   operator int() noexcept
-   { return 0; }
- };
- 
- struct NotIntLike
- { };
- 
  template<typename E, typename E_arg, typename T, size_t N, bool Expected>
  constexpr void
  test_stride_constructible()
--- 43,48 ----
*************** test_stride_constructible_all()
*** 77,84 ****
    using E2 = std::extents<int, dyn>;
  
    test_stride_constructible<E0, E0, int, 0, true>();
!   test_stride_constructible<E0, E0, IntLikeA, 0, false>();
!   test_stride_constructible<E0, E0, IntLikeB, 0, true>();
    test_stride_constructible<E0, E0, NotIntLike, 0, false>();
    test_stride_constructible<E1, E1, int, 1, true>();
    test_stride_constructible<E2, E1, int, 1, true>();
--- 63,71 ----
    using E2 = std::extents<int, dyn>;
  
    test_stride_constructible<E0, E0, int, 0, true>();
!   test_stride_constructible<E0, E0, IntLike, 0, true>();
!   test_stride_constructible<E0, E0, ThrowingInt, 0, false>();
!   test_stride_constructible<E0, E0, MutatingInt, 0, false>();
    test_stride_constructible<E0, E0, NotIntLike, 0, false>();
    test_stride_constructible<E1, E1, int, 1, true>();
    test_stride_constructible<E2, E1, int, 1, true>();
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc	Sun Jul 13 22:33:07 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc	Sun Jul 20 22:32:41 2025
***************
*** 2,8 ****
  #include <mdspan>
  
  #include <testsuite_hooks.h>
! #include "extents/int_like.h"
  #include "layout_like.h"
  
  constexpr auto dyn = std::dynamic_extent;
--- 2,8 ----
  #include <mdspan>
  
  #include <testsuite_hooks.h>
! #include "int_like.h"
  #include "layout_like.h"
  
  constexpr auto dyn = std::dynamic_extent;
*************** test_from_accessor()
*** 317,348 ****
    return true;
  }
  
! void
! test_from_int_like()
! {
!   constexpr size_t n = 3*5*7;
!   std::array<double, n> storage{};
  
!   auto verify = [&](auto md)
!     {
!       VERIFY(md.data_handle() == storage.data());
!       VERIFY(md.extent(0) == 3);
!       VERIFY(md.extent(1) == 5);
!       VERIFY(md.extent(2) == 7);
  
!       VERIFY((md[IntLike(0), 0, IntLike(0)]) == 0.0);
!       auto zero = std::array{IntLike(0), IntLike(0), IntLike(0)};
!       auto zero_view = std::span<IntLike, 3>{zero};
!       VERIFY((md[zero]) == 0.0);
!       VERIFY((md[zero_view]) == 0.0);
!     };
  
!   auto shape = std::array{IntLike(3), IntLike(5), IntLike(7)};
!   auto shape_view = std::span<IntLike, 3>{shape};
!   verify(std::mdspan(storage.data(), IntLike(3), 5, IntLike(7)));
!   verify(std::mdspan(storage.data(), shape));
!   verify(std::mdspan(storage.data(), shape_view));
! }
  
  template<typename T, bool NothrowConstructible = true,
  	 bool NothrowAssignable = true>
--- 317,366 ----
    return true;
  }
  
! template<typename MDSpan, typename Pointer, typename... Ints>
!   concept has_pack_ctor = requires
!   {
!     { MDSpan(Pointer{}, Ints(0)...) } -> std::same_as<MDSpan>;
!   };
  
! template<typename CustomInt, bool ValidForPacks, bool ValidForArrays>
!   constexpr bool
!   test_from_int_like()
!   {
!     constexpr size_t n = 3*5*7;
!     std::array<double, n> storage{};
  
!     auto verify = [&](auto md)
!       {
! 	VERIFY(md.data_handle() == storage.data());
! 	VERIFY(md.extent(0) == 3);
! 	VERIFY(md.extent(1) == 5);
! 	VERIFY(md.extent(2) == 7);
!       };
  
!     static_assert(has_pack_ctor<std::mdspan<float, std::dextents<int, 3>>,
! 	float*, CustomInt, int, CustomInt> == ValidForPacks);
! 
!     static_assert(std::is_constructible_v<
! 	std::mdspan<float, std::dextents<int, 3>>, float*,
! 	std::span<CustomInt, 3>> == ValidForArrays);
! 
!     static_assert(std::is_constructible_v<
! 	std::mdspan<float, std::dextents<int, 3>>, float*,
! 	std::array<CustomInt, 3>> == ValidForArrays);
! 
!     if constexpr (ValidForPacks)
!       verify(std::mdspan(storage.data(), CustomInt(3), 5, CustomInt(7)));
! 
!     if constexpr (ValidForArrays)
!       {
! 	auto shape = std::array{CustomInt(3), CustomInt(5), CustomInt(7)};
! 	auto shape_view = std::span<CustomInt, 3>{shape};
! 	verify(std::mdspan(storage.data(), shape));
! 	verify(std::mdspan(storage.data(), shape_view));
!       }
!     return true;
!   }
  
  template<typename T, bool NothrowConstructible = true,
  	 bool NothrowAssignable = true>
*************** test_empty_all()
*** 491,522 ****
    return true;
  }
  
! constexpr bool
! test_access()
  {
!   using Extents = std::extents<int, 3, 5, 7>;
!   auto exts = Extents{};
  
!   auto mapping = std::layout_left::mapping(exts);
!   constexpr size_t n = mapping.required_span_size();
!   std::array<double, n> storage{};
  
!   auto md = std::mdspan(storage.data(), mapping);
!   static_assert(std::__mdspan::__mapping_alike<decltype(md)>);
  
!   for(int i = 0; i < exts.extent(0); ++i)
!     for(int j = 0; j < exts.extent(1); ++j)
!       for(int k = 0; k < exts.extent(2); ++k)
! 	{
! 	  std::array<int, 3> ijk{i, j, k};
! 	  storage[mapping(i, j, k)] = 1.0;
! 	  VERIFY((md[i, j, k]) == 1.0);
! 	  VERIFY((md[ijk]) == 1.0);
! 	  VERIFY((md[std::span(ijk)]) == 1.0);
! 	  storage[mapping(i, j, k)] = 0.0;
! 	}
!   return true;
! }
  
  constexpr bool
  test_swap()
--- 509,561 ----
    return true;
  }
  
! template<typename MDSpan, typename... Args>
! concept indexable = requires (MDSpan md, Args... args)
  {
!   { md[args...] } -> std::same_as<typename MDSpan::reference>;
! };
  
! template<typename Int, bool ValidForPacks, bool ValidForArrays>
!   constexpr bool
!   test_access()
!   {
!     using Extents = std::extents<int, 3, 5, 7>;
!     auto exts = Extents{};
  
!     auto mapping = std::layout_left::mapping(exts);
!     constexpr size_t n = mapping.required_span_size();
!     std::array<double, n> storage{};
  
!     auto md = std::mdspan(storage.data(), mapping);
!     using MDSpan = decltype(md);
! 
!     for(int i = 0; i < exts.extent(0); ++i)
!       for(int j = 0; j < exts.extent(1); ++j)
! 	for(int k = 0; k < exts.extent(2); ++k)
! 	  {
! 	    storage[mapping(i, j, k)] = 1.0;
! 	    if constexpr (ValidForPacks)
! 	      VERIFY((md[Int(i), Int(j), Int(k)]) == 1.0);
! 
! 	    if constexpr (ValidForArrays)
! 	      {
! 		std::array<Int, 3> ijk{Int(i), Int(j), Int(k)};
! 		VERIFY((md[ijk]) == 1.0);
! 		VERIFY((md[std::span(ijk)]) == 1.0);
! 	      }
! 	    storage[mapping(i, j, k)] = 0.0;
! 	  }
! 
!     if constexpr (!ValidForPacks)
!       static_assert(!indexable<MDSpan, Int, int, Int>);
! 
!     if constexpr (!ValidForArrays)
!       {
! 	static_assert(!indexable<MDSpan, std::array<Int, 3>>);
! 	static_assert(!indexable<MDSpan, std::span<Int, 3>>);
!       }
!     return true;
!   }
  
  constexpr bool
  test_swap()
*************** main()
*** 650,663 ****
    test_from_accessor();
    static_assert(test_from_accessor());
  
!   test_from_int_like();
    test_from_opaque_accessor();
    test_from_base_class_accessor();
    test_from_mapping_like();
    static_assert(test_from_mapping_like());
  
!   test_access();
!   static_assert(test_access());
  
    test_swap();
    static_assert(test_swap());
--- 689,712 ----
    test_from_accessor();
    static_assert(test_from_accessor());
  
!   test_from_int_like<int, true, true>();
!   static_assert(test_from_int_like<int, true, true>());
!   test_from_int_like<IntLike, true, true>();
!   test_from_int_like<ThrowingInt, false, false>();
!   test_from_int_like<MutatingInt, true, false>();
!   test_from_int_like<RValueInt, true, false>();
! 
    test_from_opaque_accessor();
    test_from_base_class_accessor();
    test_from_mapping_like();
    static_assert(test_from_mapping_like());
  
!   test_access<int, true, true>();
!   static_assert(test_access<int, true, true>());
!   test_access<IntLike, true, true>();
!   test_access<ThrowingInt, false, false>();
!   test_access<MutatingInt, true, false>();
!   test_access<RValueInt, true, false>();
  
    test_swap();
    static_assert(test_swap());
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/copy/debug/constexpr_neg.cc gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/copy/debug/constexpr_neg.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/copy/debug/constexpr_neg.cc	Sun Jul 13 22:33:07 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/copy/debug/constexpr_neg.cc	Sun Jul 20 22:32:41 2025
*************** test1()
*** 33,39 ****
  }
  
  static_assert(test1()); // { dg-error "non-constant condition" }
! // { dg-error "_Error_formatter::_M_error()" "" { target *-*-* } 0 }
  
  constexpr bool
  test2()
--- 33,39 ----
  }
  
  static_assert(test1()); // { dg-error "non-constant condition" }
! // { dg-error "_Error_formatter::(_M_error|_S_at)" "" { target *-*-* } 0 }
  
  constexpr bool
  test2()
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/constexpr_neg.cc gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/constexpr_neg.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/constexpr_neg.cc	Sun Jul 13 22:33:07 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/constexpr_neg.cc	Sun Jul 20 22:32:41 2025
*************** test()
*** 35,38 ****
  
  static_assert(test()); // { dg-error "non-constant condition" }
  
! // { dg-prune-output "_Error_formatter::_M_error()" }
--- 35,38 ----
  
  static_assert(test()); // { dg-error "non-constant condition" }
  
! // { dg-prune-output "_Error_formatter::(_M_error|_S_at)" }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/equal/debug/constexpr_neg.cc gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/equal/debug/constexpr_neg.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/equal/debug/constexpr_neg.cc	Sun Jul 13 22:33:07 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/equal/debug/constexpr_neg.cc	Sun Jul 20 22:32:41 2025
*************** test01()
*** 32,38 ****
  }
  
  static_assert(test01()); // { dg-error "non-constant condition" }
! // { dg-error "_Error_formatter::_M_error()" "" { target *-*-* } 0 }
  
  constexpr bool
  test02()
--- 32,38 ----
  }
  
  static_assert(test01()); // { dg-error "non-constant condition" }
! // { dg-error "_Error_formatter::(_M_error|_S_at)" "" { target *-*-* } 0 }
  
  constexpr bool
  test02()
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc	Sun Jul 13 22:33:08 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc	Sun Jul 20 22:32:41 2025
*************** test()
*** 43,47 ****
  
  static_assert(test()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::_M_error()" }
  // { dg-prune-output "in 'constexpr'" }
--- 43,47 ----
  
  static_assert(test()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::(_M_error|_S_at)" }
  // { dg-prune-output "in 'constexpr'" }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc	Sun Jul 13 22:33:08 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc	Sun Jul 20 22:32:41 2025
*************** test()
*** 33,36 ****
  
  static_assert(test()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::_M_error()" }
--- 33,36 ----
  
  static_assert(test()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::(_M_error|_S_at)" }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc	Sun Jul 13 22:33:08 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc	Sun Jul 20 22:32:41 2025
*************** test2()
*** 46,50 ****
  
  static_assert(test2()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::_M_error()" }
  
--- 46,50 ----
  
  static_assert(test2()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::(_M_error|_S_at)" }
  
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc	Sun Jul 13 22:33:08 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc	Sun Jul 20 22:32:42 2025
*************** test()
*** 43,46 ****
  
  static_assert(test()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::_M_error()" }
--- 43,46 ----
  
  static_assert(test()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::(_M_error|_S_at)" }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc	Sun Jul 13 22:33:08 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc	Sun Jul 20 22:32:42 2025
*************** test()
*** 33,36 ****
  
  static_assert(test()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::_M_error()" }
--- 33,36 ----
  
  static_assert(test()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::(_M_error|_S_at)" }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc	Sun Jul 13 22:33:08 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc	Sun Jul 20 22:32:42 2025
*************** test2()
*** 46,49 ****
  
  static_assert(test2()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::_M_error()" }
--- 46,49 ----
  
  static_assert(test2()); // { dg-error "" }
  
! // { dg-prune-output "_Error_formatter::(_M_error|_S_at)" }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/experimental/memory/observer_ptr/make_observer.cc gcc-16-20250720/libstdc++-v3/testsuite/experimental/memory/observer_ptr/make_observer.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/experimental/memory/observer_ptr/make_observer.cc	Sun Jul 13 22:33:09 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/experimental/memory/observer_ptr/make_observer.cc	Sun Jul 20 22:32:43 2025
***************
*** 20,31 ****
  #include <experimental/memory>
  #include <testsuite_hooks.h>
  
! int main()
  {
    const int i = 42;
    auto o = std::experimental::make_observer(&i);
    static_assert( std::is_same<decltype(o),
!                  std::experimental::observer_ptr<const int>>(), "" );
    VERIFY( o && *o == 42 );
    VERIFY( o.get() == &i );
  }
--- 20,38 ----
  #include <experimental/memory>
  #include <testsuite_hooks.h>
  
! constexpr bool test()
  {
    const int i = 42;
    auto o = std::experimental::make_observer(&i);
    static_assert( std::is_same<decltype(o),
! 		   std::experimental::observer_ptr<const int>>(), "" );
    VERIFY( o && *o == 42 );
    VERIFY( o.get() == &i );
+   return true;
+ }
+ 
+ int main()
+ {
+   test();
+   static_assert( test(), "LWG 4295 - make_observer should be constexpr" );
  }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/experimental/memory/observer_ptr/relops/relops.cc gcc-16-20250720/libstdc++-v3/testsuite/experimental/memory/observer_ptr/relops/relops.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/experimental/memory/observer_ptr/relops/relops.cc	Sun Jul 13 22:33:09 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/experimental/memory/observer_ptr/relops/relops.cc	Sun Jul 20 22:32:43 2025
***************
*** 22,34 ****
  
  using std::experimental::observer_ptr;
  
! void test01()
  {
    observer_ptr<int> a, b;
    VERIFY(a == b);
  }
  
! void test02()
  {
    int x[2]{};
    observer_ptr<int> a{&x[0]};
--- 22,34 ----
  
  using std::experimental::observer_ptr;
  
! constexpr void test01()
  {
    observer_ptr<int> a, b;
    VERIFY(a == b);
  }
  
! constexpr void test02()
  {
    int x[2]{};
    observer_ptr<int> a{&x[0]};
*************** void test02()
*** 40,46 ****
    VERIFY(b > a);
  }
  
! void test03()
  {
    int x{};
    observer_ptr<int> a{&x};
--- 40,46 ----
    VERIFY(b > a);
  }
  
! constexpr void test03()
  {
    int x{};
    observer_ptr<int> a{&x};
*************** void test03()
*** 48,56 ****
    VERIFY(a == b);
  }
  
! void test04()
  {
-   static constexpr int x[2]{};
    constexpr observer_ptr<const int> a{&x[0]};
    constexpr observer_ptr<const int> b{&x[1]};
    VERIFY(a != b);
--- 48,57 ----
    VERIFY(a == b);
  }
  
! int x[2]{};
! 
! constexpr void test04()
  {
    constexpr observer_ptr<const int> a{&x[0]};
    constexpr observer_ptr<const int> b{&x[1]};
    VERIFY(a != b);
*************** void test04()
*** 60,79 ****
    VERIFY(b > a);
  }
  
! void test05()
  {
!   static constexpr int x{};
!   constexpr observer_ptr<const int> a{&x};
!   constexpr observer_ptr<const int> b{&x};
    VERIFY(a == b);
  }
  
! 
! int main()
  {
    test01();
    test02();
    test03();
    test04();
    test05();
  }
--- 61,85 ----
    VERIFY(b > a);
  }
  
! constexpr void test05()
  {
!   constexpr observer_ptr<const int> a{&x[0]};
!   constexpr observer_ptr<const int> b{&x[0]};
    VERIFY(a == b);
  }
  
! constexpr bool all_tests()
  {
    test01();
    test02();
    test03();
    test04();
    test05();
+   return true;
+ }
+ 
+ int main()
+ {
+   all_tests();
+   static_assert( all_tests(), "LWG 4295 - relops should be constexpr" );
  }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/experimental/memory/observer_ptr/swap/swap.cc gcc-16-20250720/libstdc++-v3/testsuite/experimental/memory/observer_ptr/swap/swap.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/experimental/memory/observer_ptr/swap/swap.cc	Sun Jul 13 22:33:09 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/experimental/memory/observer_ptr/swap/swap.cc	Sun Jul 20 22:32:43 2025
*************** using std::experimental::observer_ptr;
*** 25,31 ****
  struct B {};
  struct D : B {};
  
! void test01()
  {
    observer_ptr<int> a, b;
    VERIFY(a == b);
--- 25,31 ----
  struct B {};
  struct D : B {};
  
! constexpr void test01()
  {
    observer_ptr<int> a, b;
    VERIFY(a == b);
*************** void test01()
*** 33,39 ****
    VERIFY(a == b);
  }
  
! void test02()
  {
    int x{};
    observer_ptr<int> a;
--- 33,39 ----
    VERIFY(a == b);
  }
  
! constexpr void test02()
  {
    int x{};
    observer_ptr<int> a;
*************** void test02()
*** 45,51 ****
    VERIFY(!b);
  }
  
! void test03()
  {
    int x[2]{1,2};
    observer_ptr<int> a{&x[0]};
--- 45,51 ----
    VERIFY(!b);
  }
  
! constexpr void test03()
  {
    int x[2]{1,2};
    observer_ptr<int> a{&x[0]};
*************** void test03()
*** 57,66 ****
    VERIFY(*b == 1);
  }
  
- 
  int main()
  {
!   test01();
!   test02();
!   test03();
  }
--- 57,72 ----
    VERIFY(*b == 1);
  }
  
  int main()
  {
!   auto tests = [] {
!     test01();
!     test02();
!     test03();
!     return true;
!   };
!   tests();
! #if __cpp_lib_constexpr_algorithms >= 201806L // >= C++20
!   static_assert( tests(), "LWG 4295 - swap should be constexpr" );
! #endif
  }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/ext/unicode/view.cc gcc-16-20250720/libstdc++-v3/testsuite/ext/unicode/view.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/ext/unicode/view.cc	Sun Jul 13 22:33:09 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/ext/unicode/view.cc	Sun Jul 20 22:32:43 2025
***************
*** 7,19 ****
  namespace uc = std::__unicode;
  using namespace std::string_view_literals;
  
  constexpr void
  test_utf8_to_utf8()
  {
    const auto s8 = u8"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"sv;
    uc::_Utf8_view v(s8);
!   VERIFY( std::ranges::distance(v) == s8.size() );
!   VERIFY( std::ranges::equal(v,  s8) );
  }
  
  constexpr void
--- 7,30 ----
  namespace uc = std::__unicode;
  using namespace std::string_view_literals;
  
+ template<std::ranges::range View>
+ constexpr void
+ compare(View v, std::basic_string_view<std::ranges::range_value_t<View>> s)
+ {
+   long size = s.size();
+   VERIFY( std::ranges::distance(v) == size );
+   VERIFY( std::ranges::equal(v,  s) );
+   auto rev = std::views::reverse(v);
+   VERIFY( std::ranges::distance(rev) == size );
+   VERIFY( std::ranges::equal(rev,  s | std::views::reverse) );
+ }
+ 
  constexpr void
  test_utf8_to_utf8()
  {
    const auto s8 = u8"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"sv;
    uc::_Utf8_view v(s8);
!   compare(v, s8);
  }
  
  constexpr void
*************** test_utf8_to_utf16()
*** 22,29 ****
    const auto s8  = u8"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"sv;
    const std::u16string_view s16 = u"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡";
    uc::_Utf16_view v(s8);
!   VERIFY( std::ranges::distance(v) == s16.size() );
!   VERIFY( std::ranges::equal(v,  s16) );
  }
  
  constexpr void
--- 33,39 ----
    const auto s8  = u8"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"sv;
    const std::u16string_view s16 = u"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡";
    uc::_Utf16_view v(s8);
!   compare(v, s16);
  }
  
  constexpr void
*************** test_utf8_to_utf32()
*** 32,67 ****
    const auto s8 = u8"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"sv;
    const auto s32 = U"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"sv;
    uc::_Utf32_view v(s8);
!   VERIFY( std::ranges::distance(v) == s32.size() );
!   VERIFY( std::ranges::equal(v,  s32) );
  }
  
  constexpr void
  test_illformed_utf8()
  {
    uc::_Utf32_view v("\xa3 10.99 \xee \xdd"sv);
!   VERIFY( std::ranges::equal(v, U"\uFFFD 10.99 \uFFFD \uFFFD"sv) );
  
    uc::_Utf16_view v2(" \xf8\x80\x80\x80 "sv);
!   VERIFY( std::ranges::distance(v2) == 6 );
!   VERIFY( std::ranges::equal(v2, U" \uFFFD\uFFFD\uFFFD\uFFFD "sv) );
  
    // Examples of U+FFFD substitution from Unicode standard.
    uc::_Utf8_view v3("\xc0\xaf\xe0\x80\xbf\xf0\x81\x82\x41"sv); // Table 3-8
!   VERIFY( std::ranges::equal(v3, u8"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\x41"sv) );
    uc::_Utf8_view v4("\xed\xa0\x80\xed\xbf\xbf\xed\xaf\x41"sv); // Table 3-9
!   VERIFY( std::ranges::equal(v4, u8"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\x41"sv) );
    uc::_Utf8_view v5("\xf4\x91\x92\x93\xff\x41\x80\xbf\x42"sv); // Table 3-10
!   VERIFY( std::ranges::equal(v5, u8"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\x41\uFFFD\uFFFD\x42"sv) );
    uc::_Utf8_view v6("\xe1\x80\xe2\xf0\x91\x92\xf1\xbf\x41"sv); // Table 3-11
!   VERIFY( std::ranges::equal(v6, u8"\uFFFD\uFFFD\uFFFD\uFFFD\x41"sv) );
  
    uc::_Utf32_view v7("\xe1\x80"sv);
!   VERIFY( std::ranges::equal(v7, U"\uFFFD"sv) );
    uc::_Utf32_view v8("\xf1\x80"sv);
!   VERIFY( std::ranges::equal(v8, U"\uFFFD"sv) );
    uc::_Utf32_view v9("\xf1\x80\x80"sv);
!   VERIFY( std::ranges::equal(v9, U"\uFFFD"sv) );
  }
  
  constexpr void
--- 42,82 ----
    const auto s8 = u8"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"sv;
    const auto s32 = U"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"sv;
    uc::_Utf32_view v(s8);
!   compare(v, s32);
  }
  
  constexpr void
  test_illformed_utf8()
  {
    uc::_Utf32_view v("\xa3 10.99 \xee \xdd"sv);
!   compare(v, U"\uFFFD 10.99 \uFFFD \uFFFD"sv);
  
    uc::_Utf16_view v2(" \xf8\x80\x80\x80 "sv);
!   compare(v2, u" \uFFFD\uFFFD\uFFFD\uFFFD "sv);
  
    // Examples of U+FFFD substitution from Unicode standard.
    uc::_Utf8_view v3("\xc0\xaf\xe0\x80\xbf\xf0\x81\x82\x41"sv); // Table 3-8
!   compare(v3, u8"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\x41"sv);
    uc::_Utf8_view v4("\xed\xa0\x80\xed\xbf\xbf\xed\xaf\x41"sv); // Table 3-9
!   compare(v4, u8"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\x41"sv);
    uc::_Utf8_view v5("\xf4\x91\x92\x93\xff\x41\x80\xbf\x42"sv); // Table 3-10
!   compare(v5, u8"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\x41\uFFFD\uFFFD\x42"sv);
    uc::_Utf8_view v6("\xe1\x80\xe2\xf0\x91\x92\xf1\xbf\x41"sv); // Table 3-11
!   compare(v6, u8"\uFFFD\uFFFD\uFFFD\uFFFD\x41"sv);
  
    uc::_Utf32_view v7("\xe1\x80"sv);
!   compare(v7,  U"\uFFFD"sv);
    uc::_Utf32_view v8("\xf1\x80"sv);
!   compare(v8,  U"\uFFFD"sv);
    uc::_Utf32_view v9("\xf1\x80\x80"sv);
!   compare(v9,  U"\uFFFD"sv);
! 
!   uc::_Utf32_view v10("\xcf\x80\x80\x81\x82\x83 \x84\x85\x86\x87\x88 "sv);
!   compare(v10,  U"\u03C0\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD "sv);
!   uc::_Utf16_view v11("\xcf\x80\x80\x81\x82\x83 \x84\x85\x86\x87\x88 "sv);
!   compare(v11,  u"\u03C0\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD "sv);
!   uc::_Utf8_view v12("\xcf\x80\x80\x81\x82\x83 \x84\x85\x86\x87\x88 "sv);
!   compare(v12,  u8"\u03C0\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD "sv);
  }
  
  constexpr void
*************** test_illformed_utf16()
*** 69,95 ****
  {
    std::u16string_view s = u"\N{CLOWN FACE}";
    std::u16string_view r = u"\uFFFD";
!   VERIFY( std::ranges::equal(uc::_Utf16_view(s.substr(0, 1)), r) );
!   VERIFY( std::ranges::equal(uc::_Utf16_view(s.substr(1, 1)), r) );
    std::array s2{ s[0], s[0] };
!   VERIFY( std::ranges::equal(uc::_Utf16_view(s2), u"\uFFFD\uFFFD"sv) );
    std::array s3{ s[0], s[0], s[1] };
!   VERIFY( std::ranges::equal(uc::_Utf16_view(s3), u"\uFFFD\N{CLOWN FACE}"sv) );
    std::array s4{ s[1], s[0] };
!   VERIFY( std::ranges::equal(uc::_Utf16_view(s4), u"\uFFFD\uFFFD"sv) );
    std::array s5{ s[1], s[0], s[1] };
!   VERIFY( std::ranges::equal(uc::_Utf16_view(s5), u"\uFFFD\N{CLOWN FACE}"sv) );
  }
  
  constexpr void
  test_illformed_utf32()
  {
    std::u32string_view s = U"\x110000";
!   VERIFY( std::ranges::equal(uc::_Utf32_view(s), U"\uFFFD"sv) );
    s = U"\xFFFFFF";
!   VERIFY( std::ranges::equal(uc::_Utf32_view(s), U"\uFFFD"sv) );
    s = U"\xFFFFFFF0";
!   VERIFY( std::ranges::equal(uc::_Utf32_view(s), U"\uFFFD"sv) );
  }
  
  constexpr void
--- 84,110 ----
  {
    std::u16string_view s = u"\N{CLOWN FACE}";
    std::u16string_view r = u"\uFFFD";
!   compare(uc::_Utf16_view(s.substr(0, 1)), r);
!   compare(uc::_Utf16_view(s.substr(1, 1)), r);
    std::array s2{ s[0], s[0] };
!   compare(uc::_Utf16_view(s2), u"\uFFFD\uFFFD"sv);
    std::array s3{ s[0], s[0], s[1] };
!   compare(uc::_Utf16_view(s3), u"\uFFFD\N{CLOWN FACE}"sv);
    std::array s4{ s[1], s[0] };
!   compare(uc::_Utf16_view(s4), u"\uFFFD\uFFFD"sv);
    std::array s5{ s[1], s[0], s[1] };
!   compare(uc::_Utf16_view(s5), u"\uFFFD\N{CLOWN FACE}"sv);
  }
  
  constexpr void
  test_illformed_utf32()
  {
    std::u32string_view s = U"\x110000";
!   compare(uc::_Utf32_view(s), U"\uFFFD"sv);
    s = U"\xFFFFFF";
!   compare(uc::_Utf32_view(s), U"\uFFFD"sv);
    s = U"\xFFFFFFF0";
!   compare(uc::_Utf32_view(s), U"\uFFFD"sv);
  }
  
  constexpr void
*************** test_past_the_end()
*** 110,115 ****
--- 125,137 ----
    iter++;
    VERIFY( iter == v.end() );
    VERIFY( *iter == U'4' );
+   std::ranges::advance(iter, -4);
+   VERIFY( *iter == U'1' );
+   // Incrementing before begin has well-defined behaviour.
+   iter--;
+   VERIFY( *iter == U'1' );
+   iter--;
+   VERIFY( *iter == U'1' );
  
    std::string_view empty;
    uc::_Utf32_view v2(empty);
*************** test_past_the_end()
*** 119,124 ****
--- 141,149 ----
    iter++;
    VERIFY( iter2 == v2.end() );
    VERIFY( *iter2 == U'\0' );
+   iter--;
+   VERIFY( iter2 == v2.end() );
+   VERIFY( *iter2 == U'\0' );
  }
  
  int main()
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc gcc-16-20250720/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc	Sun Jul 13 22:33:09 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc	Sun Jul 20 22:32:43 2025
*************** test14()
*** 233,238 ****
--- 233,245 ----
    VERIFY( ranges::equal(v | views::join, (int[]){1, 2, 3}) );
  }
  
+ void
+ test15()
+ {
+   // PR libstdc++/119962 - __maybe_present_t misses initialization
+   constexpr decltype(views::join(views::single(views::single(0))).begin()) it;
+ }
+ 
  int
  main()
  {
*************** main()
*** 250,253 ****
--- 257,261 ----
    test12();
    test13();
    test14();
+   test15();
  }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc gcc-16-20250720/libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc	Sun Jul 13 22:33:09 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc	Sun Jul 20 22:32:43 2025
*************** test04()
*** 94,99 ****
--- 94,106 ----
    return true;
  }
  
+ void
+ test05()
+ {
+   // PR libstdc++/119962 - __maybe_present_t misses initialization
+   constexpr decltype(views::join_with(views::single(views::single(0)), 0).begin()) it;
+ }
+ 
  int
  main()
  {
*************** main()
*** 105,108 ****
--- 112,116 ----
  #else
    VERIFY(test04());
  #endif
+   test05();
  }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc gcc-16-20250720/libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc	Sun Jul 13 22:33:09 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc	Sun Jul 20 22:32:43 2025
*************** test12()
*** 232,237 ****
--- 232,244 ----
    return true;
  }
  
+ void
+ test13()
+ {
+   // PR libstdc++/119962 - __maybe_present_t misses initialization
+   constexpr decltype(views::lazy_split(views::single(0), 0).begin()) it;
+ }
+ 
  int
  main()
  {
*************** main()
*** 247,250 ****
--- 254,258 ----
    test10();
    test11();
    static_assert(test12());
+   test13();
  }
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/std/time/month/io.cc gcc-16-20250720/libstdc++-v3/testsuite/std/time/month/io.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/std/time/month/io.cc	Sun Jul 13 22:33:09 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/std/time/month/io.cc	Sun Jul 20 22:32:43 2025
*************** test_ostream()
*** 24,29 ****
--- 24,32 ----
    ss.imbue(std::locale(ISO_8859(15,fr_FR)));
    ss << month(1);
    VERIFY( ss.str() == "janv." );
+   ss.str("");
+   ss << month(0) << '|' << month(13);
+   VERIFY( ss.str() == "0 is not a valid month|13 is not a valid month" );
  }
  
  void
*************** test_format()
*** 66,71 ****
--- 69,78 ----
    VERIFY( s == "Jan" );
    s = std::format(loc_fr, "{:L%b}", month(1));
    VERIFY( s == "janv." );
+   s = std::format(loc_fr, "{:L}", month(0));
+   VERIFY( s == "0 is not a valid month" );
+   s = std::format(loc_fr, "{:L}", month(13));
+   VERIFY( s == "13 is not a valid month" );
  
    std::string_view specs = "aAbBcCdDeFgGhHIjmMpqQrRSTuUVwWxXyYzZ";
    std::string_view my_specs = "bBhm";
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/std/time/weekday/io.cc gcc-16-20250720/libstdc++-v3/testsuite/std/time/weekday/io.cc
*** gcc-16-20250713/libstdc++-v3/testsuite/std/time/weekday/io.cc	Sun Jul 13 22:33:09 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/std/time/weekday/io.cc	Sun Jul 20 22:32:43 2025
*************** test_format()
*** 69,74 ****
--- 69,76 ----
    VERIFY( s == "Mon" );
    s = std::format(loc_fr, "{:L%a}", weekday(1));
    VERIFY( s == "lun." );
+   s = std::format(loc_fr, "{:L}", weekday(25));
+   VERIFY( s == "25 is not a valid weekday" );
  
    std::string_view specs = "aAbBcCdDeFgGhHIjmMpqQrRSTuUVwWxXyYzZ";
    std::string_view my_specs = "aAuw";
diff -Nrcpad gcc-16-20250713/libstdc++-v3/testsuite/util/testsuite_iterators.h gcc-16-20250720/libstdc++-v3/testsuite/util/testsuite_iterators.h
*** gcc-16-20250713/libstdc++-v3/testsuite/util/testsuite_iterators.h	Sun Jul 13 22:33:10 2025
--- gcc-16-20250720/libstdc++-v3/testsuite/util/testsuite_iterators.h	Sun Jul 20 22:32:43 2025
*************** namespace __gnu_test
*** 270,275 ****
--- 270,281 ----
        return !(*this == in);
      }
  
+     T*
+     base() const
+     {
+       return ptr;
+     }
+ 
      T&
      operator*() const
      {
