diff -Nrcpad gcc-15-20260418/LAST_UPDATED gcc-15-20260424/LAST_UPDATED
*** gcc-15-20260418/LAST_UPDATED	Sat Apr 18 22:32:19 2026
--- gcc-15-20260424/LAST_UPDATED	Fri Apr 24 22:32:22 2026
***************
*** 1 ****
! Obtained from git: releases/gcc-15 revision 0e01be9d5b300f4bf74e02667ff3e335a6e4e248
--- 1 ----
! Obtained from git: releases/gcc-15 revision b4c36136d8878f80c1803e445d375b186af3fed1
diff -Nrcpad gcc-15-20260418/MD5SUMS gcc-15-20260424/MD5SUMS
*** gcc-15-20260418/MD5SUMS	Sat Apr 18 22:32:24 2026
--- gcc-15-20260424/MD5SUMS	Fri Apr 24 22:32:27 2026
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-15-20260418.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-15-20260424.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
*************** d32239bcb673463ab874e80d47fae504  COPYIN
*** 25,31 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! c4430a18b83e52fe58d96dca613b50ea  LAST_UPDATED
  9d2cf5b58292c2e8b0804d3eafc2d6f3  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
--- 25,31 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! e5a63b782324c88da55ddddab96b77de  LAST_UPDATED
  9d2cf5b58292c2e8b0804d3eafc2d6f3  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 514,520 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 0cb58943d6a6faa2a95f2e786a2b9714  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 514,520 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! f07e20a935c7fb81756f6e3e6500515b  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 551,557 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 9e7c971e2e2a8b766866e4dd7a95aeb3  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
--- 551,557 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 80ffcab6aaf4b0e9928b004fa5e62c1c  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** aaf683e3b02704cfbfab0627d82edf85  gcc/c-
*** 3248,3258 ****
  ce9d2259a1edb5d4b1f728988bd9ef6a  gcc/c-family/known-headers.h
  d1e9802a9c9cc0486941b538aaa07ff3  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! 8c56d1c52cff7675a7f7bdea1b36c0e5  gcc/c/ChangeLog
  b1fc09d2244c8e8a72b4df9bc9af30d7  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
! 038054ee38a5f4530f04fe21c283953c  gcc/c/c-decl.cc
  3601ac6299bb2579fedc2dcf2aba7773  gcc/c/c-errors.cc
  d9b5dea1631cefab5fe5ca3602db30f0  gcc/c/c-fold.cc
  d9c0725d061adffdf400457d91be3aed  gcc/c/c-lang.cc
--- 3248,3258 ----
  ce9d2259a1edb5d4b1f728988bd9ef6a  gcc/c-family/known-headers.h
  d1e9802a9c9cc0486941b538aaa07ff3  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! d3ae2a0b26152bb21608a7cdd19d676d  gcc/c/ChangeLog
  b1fc09d2244c8e8a72b4df9bc9af30d7  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
! cd6682cd1f70798eb36c3c08797aa364  gcc/c/c-decl.cc
  3601ac6299bb2579fedc2dcf2aba7773  gcc/c/c-errors.cc
  d9b5dea1631cefab5fe5ca3602db30f0  gcc/c/c-fold.cc
  d9c0725d061adffdf400457d91be3aed  gcc/c/c-lang.cc
*************** f9dc3d10fbfaa2d38905bc4e2579ba2b  gcc/c/
*** 3262,3269 ****
  8deedc954a73dc5f92b48f4cf8de9955  gcc/c/c-parser.cc
  9c122bd6feb8ae4a94420c890e654801  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
! f7331ce09e3bb7374f8cebf0a2195d47  gcc/c/c-tree.h
! 09d9a1d681d1f653bc7b34558be2d855  gcc/c/c-typeck.cc
  cd371895d730dd64e947066b2e4378f8  gcc/c/config-lang.in
  1bd76a24d1322659f048abe2272a6f34  gcc/c/gccspec.cc
  b908dbb3dee5ec448aacc3c5e1e430e7  gcc/c/gimple-parser.cc
--- 3262,3269 ----
  8deedc954a73dc5f92b48f4cf8de9955  gcc/c/c-parser.cc
  9c122bd6feb8ae4a94420c890e654801  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
! 14bdaa79be5634bd1cc7ff907c7a444b  gcc/c/c-tree.h
! f88657183068e0a4a73e5dafa6d8f46c  gcc/c/c-typeck.cc
  cd371895d730dd64e947066b2e4378f8  gcc/c/config-lang.in
  1bd76a24d1322659f048abe2272a6f34  gcc/c/gccspec.cc
  b908dbb3dee5ec448aacc3c5e1e430e7  gcc/c/gimple-parser.cc
*************** ba79dc9cffbca47e10d361aeb3d716f3  gcc/co
*** 4202,4208 ****
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! 2620f6914aba15f0dd6c954f46919408  gcc/config/i386/i386.cc
  0150b759a527c67bf0c83ed700545456  gcc/config/i386/i386.h
  b11338b14cbd4aba1791f2007169faf0  gcc/config/i386/i386.md
  5a3c6fa6266505bbc0789e269da6e250  gcc/config/i386/i386.opt
--- 4202,4208 ----
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! 984423facca351215a6d7f335c0d40bb  gcc/config/i386/i386.cc
  0150b759a527c67bf0c83ed700545456  gcc/config/i386/i386.h
  b11338b14cbd4aba1791f2007169faf0  gcc/config/i386/i386.md
  5a3c6fa6266505bbc0789e269da6e250  gcc/config/i386/i386.opt
*************** ec1e9c9456a8530e241079823e2fc126  gcc/cr
*** 5614,5620 ****
  15aef1bfc1d9935a8df200d3827b59c6  gcc/ctfc.cc
  3df123e84e7c118eb423425f2100e3b5  gcc/ctfc.h
  aec0cd5251de880945c96eb21e97eac9  gcc/ctfout.cc
! 9943be8b1d8a25ce71c3f9ceadade1f0  gcc/d/ChangeLog
  94dbce564aba342900829d11192f8905  gcc/d/ChangeLog-2006
  1a0536d6571bca334bb5c00dbdf257ab  gcc/d/ChangeLog-2007
  362a026d745031260b2e4dd8eba9becc  gcc/d/ChangeLog-2008
--- 5614,5620 ----
  15aef1bfc1d9935a8df200d3827b59c6  gcc/ctfc.cc
  3df123e84e7c118eb423425f2100e3b5  gcc/ctfc.h
  aec0cd5251de880945c96eb21e97eac9  gcc/ctfout.cc
! 06339875c9b9f38b803d3bde870bb2d4  gcc/d/ChangeLog
  94dbce564aba342900829d11192f8905  gcc/d/ChangeLog-2006
  1a0536d6571bca334bb5c00dbdf257ab  gcc/d/ChangeLog-2007
  362a026d745031260b2e4dd8eba9becc  gcc/d/ChangeLog-2008
*************** a7bde590e8469b2ffb53fcd2a06033af  gcc/d/
*** 5861,5867 ****
  14ab71dfd3fc06afb477ec01aa077f09  gcc/d/runtime.def
  295e39e98e26072e562ef18e757894b6  gcc/d/toir.cc
  4af3aaebbbb939e7e67ed0f4349a4524  gcc/d/typeinfo.cc
! 1aaecd18fa73a170c6e58dae10ae025c  gcc/d/types.cc
  257fb956c4a8d2279293b031e195fdaa  gcc/data-streamer-in.cc
  80498597d8e433b8a182777985c81a1a  gcc/data-streamer-out.cc
  ef3c86ca257ef8868e25ee7cc2b20076  gcc/data-streamer.cc
--- 5861,5867 ----
  14ab71dfd3fc06afb477ec01aa077f09  gcc/d/runtime.def
  295e39e98e26072e562ef18e757894b6  gcc/d/toir.cc
  4af3aaebbbb939e7e67ed0f4349a4524  gcc/d/typeinfo.cc
! 5e724ced44f15abc9ec7e9ee57e456a7  gcc/d/types.cc
  257fb956c4a8d2279293b031e195fdaa  gcc/data-streamer-in.cc
  80498597d8e433b8a182777985c81a1a  gcc/data-streamer-out.cc
  ef3c86ca257ef8868e25ee7cc2b20076  gcc/data-streamer.cc
*************** b3a965e425e6cf7888319667faf58da9  gcc/sy
*** 8448,8454 ****
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 087467dbc2db3e550a6cc196819e2a15  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8448,8454 ----
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 227e86cc11ed017048c2f447a033867d  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** d602fec0c129037ce49acd7cccfd6266  gcc/te
*** 49989,50004 ****
--- 49989,50008 ----
  a0985c9ac5a161a568f68afc0223c2c1  gcc/testsuite/gcc.dg/pr121506.c
  3675df2622072bf0e5cccbf94e93a50f  gcc/testsuite/gcc.dg/pr122126_vextr.c
  b975ebfa27ac446e553bacbb75421590  gcc/testsuite/gcc.dg/pr122126_vset.c
+ 97e3ae8b831374d54e4e70a229baa234  gcc/testsuite/gcc.dg/pr122572.c
  9f4094b7196b5eab8c79608995a96efc  gcc/testsuite/gcc.dg/pr122991.c
  9fcb8913b9a18055b2a811284d59780e  gcc/testsuite/gcc.dg/pr123018.c
  3190514d319cec9f570a97df97be613b  gcc/testsuite/gcc.dg/pr123294-1.c
  5fbcf85870a8e9883872a384e3cf5e12  gcc/testsuite/gcc.dg/pr123300.c
+ abcd5a197963ed0347e0d79e6d9ce62f  gcc/testsuite/gcc.dg/pr123356-1.c
+ ce83c5e57a56f41479e8822e32d633ea  gcc/testsuite/gcc.dg/pr123356-2.c
  3e218010f127737b8ec6efbf8cb00273  gcc/testsuite/gcc.dg/pr123431.c
  b2e314205231dfc3005d83207407379b  gcc/testsuite/gcc.dg/pr123447.c
  2e58c4d553f61913c629f0f4e16cef6c  gcc/testsuite/gcc.dg/pr123537.c
  1d51dc92bcea9d1f45d53070aed9c180  gcc/testsuite/gcc.dg/pr123672.c
  5cd501fa005281d9c622810307478c79  gcc/testsuite/gcc.dg/pr123882.c
  f402be89e4891c76c691c8144fe168f7  gcc/testsuite/gcc.dg/pr124138.c
+ 0b8c4e1486bc61b4cdb4efb2e7f08d74  gcc/testsuite/gcc.dg/pr124635.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** c66363249ca43baee9f09bde5baeb896  gcc/te
*** 52688,52693 ****
--- 52692,52698 ----
  6c551fbb45a2e62474fcd9aa76cc7676  gcc/testsuite/gcc.dg/strub-internal-volatile.c
  f863f39bb99153211219b4664754af40  gcc/testsuite/gcc.dg/strub-pr118007.c
  e1737f9100fe39030ff4b356bc6ff29e  gcc/testsuite/gcc.dg/struct-alias-1.c
+ edef350b4a9e0e8719343e4da222a540  gcc/testsuite/gcc.dg/struct-alias-2.c
  756d07d22a151e89582543f5a88bda9f  gcc/testsuite/gcc.dg/struct-by-value-1.c
  fff906a27910e082e50f16054f4642c4  gcc/testsuite/gcc.dg/struct-by-value-2.c
  690c0c9a2bb5e991b2ad555aa009a37c  gcc/testsuite/gcc.dg/struct-empty-1.c
*************** a0e208729117f798ee5200a51a9c258b  gcc/te
*** 59773,59778 ****
--- 59778,59784 ----
  8006cd394692bd071c0417ad10367515  gcc/testsuite/gcc.dg/vect/vect-pr120927-2.c
  dca085f893f46ecb56c7cecb15a42090  gcc/testsuite/gcc.dg/vect/vect-pr120927.c
  f4b106f1a647b041f524318378f476f5  gcc/testsuite/gcc.dg/vect/vect-pr122793.c
+ 5346702060f2a1fdcbef60b8759f436c  gcc/testsuite/gcc.dg/vect/vect-pr123002.c
  da160a8349fe2e0daa932c3bd967f635  gcc/testsuite/gcc.dg/vect/vect-pr124677.c
  09beadb34e2b0bfa6179ef89f2e6d9f7  gcc/testsuite/gcc.dg/vect/vect-pr124802.c
  4d57df9e3b3522c9f1a6707c05f1da45  gcc/testsuite/gcc.dg/vect/vect-pr69848.c
*************** d313cc77f313c4dd63cd510957fdd87c  gcc/te
*** 83498,83504 ****
  04745ab7394d1702daa975607c216973  gcc/testsuite/gcc.target/i386/zero-scratch-regs-20.c
  c8dd24e1b18af774be1f6fa045252612  gcc/testsuite/gcc.target/i386/zero-scratch-regs-21.c
  2e396378f3ddbd9c2d4a3a214f00eeda  gcc/testsuite/gcc.target/i386/zero-scratch-regs-22.c
! 844ff919190ce8569bfc0a5820c77ff5  gcc/testsuite/gcc.target/i386/zero-scratch-regs-23.c
  edede09b1afb458f310c448a3a2ffa14  gcc/testsuite/gcc.target/i386/zero-scratch-regs-24.c
  a7c92b064cd3dfa35552d030d9c88443  gcc/testsuite/gcc.target/i386/zero-scratch-regs-25.c
  ec39e4f7e99d99e583f0ad35694883c0  gcc/testsuite/gcc.target/i386/zero-scratch-regs-26.c
--- 83504,83510 ----
  04745ab7394d1702daa975607c216973  gcc/testsuite/gcc.target/i386/zero-scratch-regs-20.c
  c8dd24e1b18af774be1f6fa045252612  gcc/testsuite/gcc.target/i386/zero-scratch-regs-21.c
  2e396378f3ddbd9c2d4a3a214f00eeda  gcc/testsuite/gcc.target/i386/zero-scratch-regs-22.c
! 96e58fb14a56bdee8017b21ceb0c5f18  gcc/testsuite/gcc.target/i386/zero-scratch-regs-23.c
  edede09b1afb458f310c448a3a2ffa14  gcc/testsuite/gcc.target/i386/zero-scratch-regs-24.c
  a7c92b064cd3dfa35552d030d9c88443  gcc/testsuite/gcc.target/i386/zero-scratch-regs-25.c
  ec39e4f7e99d99e583f0ad35694883c0  gcc/testsuite/gcc.target/i386/zero-scratch-regs-26.c
*************** a0db901c2d58c6ec7373c71e5e9f5f96  gcc/te
*** 83509,83514 ****
--- 83515,83521 ----
  bc37db967928436168b8c1061133369a  gcc/testsuite/gcc.target/i386/zero-scratch-regs-30.c
  436c4c4db448d2a78bd0a4ff74e64d3a  gcc/testsuite/gcc.target/i386/zero-scratch-regs-31.c
  66378b9cfd36021151804e3b9acaa10c  gcc/testsuite/gcc.target/i386/zero-scratch-regs-32.c
+ a802b4b3fcbb11b953e3a919e483099b  gcc/testsuite/gcc.target/i386/zero-scratch-regs-33.c
  eadfc0a02336a6e52dffc2fcf8dfcf59  gcc/testsuite/gcc.target/i386/zero-scratch-regs-4.c
  66756a81f305b4e4d2c8a4d048f9a6ab  gcc/testsuite/gcc.target/i386/zero-scratch-regs-5.c
  1c155a5b2fa12b705e2c04f01342749d  gcc/testsuite/gcc.target/i386/zero-scratch-regs-6.c
*************** e4d8064a02951cfe69cf639a94128dd0  gcc/te
*** 95842,95847 ****
--- 95849,95855 ----
  9ce0fee5b0fbb84c1de9a43ef50b9462  gcc/testsuite/gdc.dg/pr123264.d
  e89ebd75d9b162289c929675222e8501  gcc/testsuite/gdc.dg/pr123407a.d
  a45efe7a1d6f8b7f15f7befa3e7b1768  gcc/testsuite/gdc.dg/pr123407b.d
+ 69d3ed5a5a7a71ad897f5f4d6f52654e  gcc/testsuite/gdc.dg/pr123411.d
  4e7020df6ad139d4b43104ca5b97d142  gcc/testsuite/gdc.dg/pr123419.d
  56c2a0939424aafd465f15ffdd08847b  gcc/testsuite/gdc.dg/pr123798.d
  8121b336beaee98841d3fb15f1ac0198  gcc/testsuite/gdc.dg/pr124026.d
*************** c2c9b1a1db79eedb25331d3565231b66  gcc/te
*** 103990,103995 ****
--- 103998,104004 ----
  a921eeb5697bd066712d41d66d374930  gcc/testsuite/gfortran.dg/gomp/pr94672.f90
  a3f6ee03ab79b516d4db9359c21a4896  gcc/testsuite/gfortran.dg/gomp/pr95163.f90
  8a04653b9aa2543e13a3136934e00444  gcc/testsuite/gfortran.dg/gomp/pr95869.f90
+ 8512ba21f2d6bfcb3e878c6c91c4dc17  gcc/testsuite/gfortran.dg/gomp/pr98203.f90
  f832e5b53ac5754d0490d912e4da9ec6  gcc/testsuite/gfortran.dg/gomp/pr99226.f90
  bcd0369b2e799c3808032efd4c583295  gcc/testsuite/gfortran.dg/gomp/pr99928-1.f90
  5a122e0df6f86c9b8f25e3ef0a8de595  gcc/testsuite/gfortran.dg/gomp/pr99928-11.f90
*************** cac3afe79bbadb8c304cebff78dbb3df  gcc/tr
*** 118370,118383 ****
  cc4b6ecb376a4980bfd08a185c104993  gcc/tree-vect-generic.cc
  cc0bdf3f684b251509b8552d2d8549a3  gcc/tree-vect-loop-manip.cc
  8a2aecab8d16631a19a3c9fb4995a997  gcc/tree-vect-loop.cc
! 77240c08cea454c2d4a449206f7930c3  gcc/tree-vect-patterns.cc
  dcbf10968cde6e905d28d520507d760b  gcc/tree-vect-slp-patterns.cc
  c417ef312ca64d3d6d752dc4dfbbc195  gcc/tree-vect-slp.cc
! 4572489a3aeb1a3163bd6409309fe0c5  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  6a5457c324d4279acbd82f147f1dd823  gcc/tree-vectorizer.cc
! f5c90b57853064f13fc6868527a2ea7e  gcc/tree-vectorizer.h
  983065c230493e568be0a1933889b583  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
  e46786780046842137f0df52270989f8  gcc/tree.cc
--- 118379,118392 ----
  cc4b6ecb376a4980bfd08a185c104993  gcc/tree-vect-generic.cc
  cc0bdf3f684b251509b8552d2d8549a3  gcc/tree-vect-loop-manip.cc
  8a2aecab8d16631a19a3c9fb4995a997  gcc/tree-vect-loop.cc
! 294fdaba99fd4fb48e7317235676a90b  gcc/tree-vect-patterns.cc
  dcbf10968cde6e905d28d520507d760b  gcc/tree-vect-slp-patterns.cc
  c417ef312ca64d3d6d752dc4dfbbc195  gcc/tree-vect-slp.cc
! c391a866336d7eb20bb88915dfda5f2b  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  6a5457c324d4279acbd82f147f1dd823  gcc/tree-vectorizer.cc
! 0c9a7ff7e853c808c7e3b0f86864c519  gcc/tree-vectorizer.h
  983065c230493e568be0a1933889b583  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
  e46786780046842137f0df52270989f8  gcc/tree.cc
diff -Nrcpad gcc-15-20260418/gcc/ChangeLog gcc-15-20260424/gcc/ChangeLog
*** gcc-15-20260418/gcc/ChangeLog	Sat Apr 18 22:32:05 2026
--- gcc-15-20260424/gcc/ChangeLog	Fri Apr 24 22:32:06 2026
***************
*** 1,3 ****
--- 1,31 ----
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-12-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123002
+ 	* tree-vectorizer.h (supportable_widening_operation): Remove
+ 	vinfo and stmt_info parameters, add flag to indicate whether
+ 	the context would allow OP_{EVEN,ODD}.
+ 	* tree-vect-patterns.cc (vect_recog_abd_pattern): Adjust
+ 	and pass false.
+ 	(vect_recog_widen_op_pattern): Likewise.
+ 	(vect_recog_widen_abd_pattern): Likewise.
+ 	* tree-vect-stmts.cc (vectorizable_conversion): Move
+ 	even/odd validity check here, from supportable_widening_operation.
+ 	Adjust it to be conservative.
+ 	(supportable_widening_operation): Get flag whether even/odd
+ 	is OK to use and remove then unused parameters and code.
+ 
+ 2026-04-19  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2026-04-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/124876
+ 	* config/i386/i386.cc (ix86_zero_call_used_regs): Zero ZMM16-31
+ 	if needed.
+ 
  2026-04-14  Richard Biener  <rguenther@suse.de>
  
  	Backported from master:
diff -Nrcpad gcc-15-20260418/gcc/DATESTAMP gcc-15-20260424/gcc/DATESTAMP
*** gcc-15-20260418/gcc/DATESTAMP	Sat Apr 18 22:32:05 2026
--- gcc-15-20260424/gcc/DATESTAMP	Fri Apr 24 22:32:06 2026
***************
*** 1 ****
! 20260418
--- 1 ----
! 20260424
diff -Nrcpad gcc-15-20260418/gcc/c/ChangeLog gcc-15-20260424/gcc/c/ChangeLog
*** gcc-15-20260418/gcc/c/ChangeLog	Sat Apr 18 22:32:06 2026
--- gcc-15-20260424/gcc/c/ChangeLog	Fri Apr 24 22:32:06 2026
***************
*** 1,3 ****
--- 1,31 ----
+ 2026-04-20  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-01  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	PR c/124635
+ 	* c-typeck.cc (c_reconstruct_complex_type): Copy
+ 	TYPE_REVERSE_STORAGE_ORDER.
+ 
+ 2026-04-20  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-03  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	PR c/122572
+ 	* c-decl.cc (finish_struct): Add distinct canonical type.
+ 	* c-tree.h (c_type_canonical): Prototype for new function.
+ 	* c-typeck.cc (c_type_canonical): New function.
+ 	(ptr_to_tagged_member): New function.
+ 
+ 2026-04-20  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-03  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	PR c/122572
+ 	* c-typeck.cc (tagged_types_tu_compatible_p): Fix check.
+ 
  2026-03-08  Jakub Jelinek  <jakub@redhat.com>
  
  	Backported from master:
diff -Nrcpad gcc-15-20260418/gcc/c/c-decl.cc gcc-15-20260424/gcc/c/c-decl.cc
*** gcc-15-20260418/gcc/c/c-decl.cc	Sat Apr 18 22:32:06 2026
--- gcc-15-20260424/gcc/c/c-decl.cc	Fri Apr 24 22:32:06 2026
*************** finish_struct (location_t loc, tree t, t
*** 9898,9907 ****
  
        tree *e = c_struct_htab->find_slot_with_hash (t, hash, INSERT);
        if (*e)
! 	TYPE_CANONICAL (t) = *e;
        else
  	{
! 	  TYPE_CANONICAL (t) = t;
  	  *e = t;
  	}
        c_update_type_canonical (t);
--- 9898,9907 ----
  
        tree *e = c_struct_htab->find_slot_with_hash (t, hash, INSERT);
        if (*e)
! 	TYPE_CANONICAL (t) = TYPE_CANONICAL (*e);
        else
  	{
! 	  TYPE_CANONICAL (t) = c_type_canonical (t);
  	  *e = t;
  	}
        c_update_type_canonical (t);
diff -Nrcpad gcc-15-20260418/gcc/c/c-tree.h gcc-15-20260424/gcc/c/c-tree.h
*** gcc-15-20260418/gcc/c/c-tree.h	Sat Apr 18 22:32:06 2026
--- gcc-15-20260424/gcc/c/c-tree.h	Fri Apr 24 22:32:06 2026
*************** extern tree c_build_function_call_vec (l
*** 892,897 ****
--- 892,898 ----
  				       vec<tree, va_gc> *);
  extern tree c_omp_clause_copy_ctor (tree, tree, tree);
  extern tree c_reconstruct_complex_type (tree, tree);
+ extern tree c_type_canonical (tree);
  extern tree c_build_type_attribute_variant (tree ntype, tree attrs);
  extern tree c_build_pointer_type (tree type);
  extern tree c_build_array_type (tree type, tree domain);
diff -Nrcpad gcc-15-20260418/gcc/c/c-typeck.cc gcc-15-20260424/gcc/c/c-typeck.cc
*** gcc-15-20260418/gcc/c/c-typeck.cc	Sat Apr 18 22:32:06 2026
--- gcc-15-20260424/gcc/c/c-typeck.cc	Fri Apr 24 22:32:06 2026
*************** c_reconstruct_complex_type (tree type, t
*** 530,542 ****
      }
    else if (TREE_CODE (type) == ARRAY_TYPE)
      {
        inner = c_reconstruct_complex_type (TREE_TYPE (type), bottom);
        outer = c_build_array_type (inner, TYPE_DOMAIN (type));
  
        gcc_checking_assert (C_TYPE_VARIABLE_SIZE (type)
  			   == C_TYPE_VARIABLE_SIZE (outer));
-       gcc_checking_assert (C_TYPE_VARIABLY_MODIFIED (outer)
- 			   == C_TYPE_VARIABLY_MODIFIED (type));
      }
    else if (TREE_CODE (type) == FUNCTION_TYPE)
      {
--- 530,546 ----
      }
    else if (TREE_CODE (type) == ARRAY_TYPE)
      {
+       bool rso = TYPE_REVERSE_STORAGE_ORDER (type);
        inner = c_reconstruct_complex_type (TREE_TYPE (type), bottom);
        outer = c_build_array_type (inner, TYPE_DOMAIN (type));
+       if (rso)
+ 	{
+ 	  outer = build_distinct_type_copy (outer);
+ 	  TYPE_REVERSE_STORAGE_ORDER (outer) = 1;
+ 	}
  
        gcc_checking_assert (C_TYPE_VARIABLE_SIZE (type)
  			   == C_TYPE_VARIABLE_SIZE (outer));
      }
    else if (TREE_CODE (type) == FUNCTION_TYPE)
      {
*************** c_reconstruct_complex_type (tree type, t
*** 554,559 ****
--- 558,633 ----
  					      TYPE_QUALS (type));
  }
  
+ 
+ /* Helper function for c_canonical_type.  Check whether FIELD
+    contains a pointer to a structure or union with tag,
+    possibly nested in other type derivations.  */
+ static bool
+ ptr_to_tagged_member (tree field)
+ {
+   gcc_assert (FIELD_DECL == TREE_CODE (field));
+   tree type = TREE_TYPE (field);
+   bool ptr_seen = false;
+   while (TREE_CODE (type) == ARRAY_TYPE
+ 	 || TREE_CODE (type) == FUNCTION_TYPE
+ 	 || TREE_CODE (type) == POINTER_TYPE)
+     {
+       if (TREE_CODE (type) == POINTER_TYPE)
+ 	ptr_seen = true;
+       type = TREE_TYPE (type);
+     }
+ 
+   if (ptr_seen
+       && RECORD_OR_UNION_TYPE_P (type)
+       && NULL_TREE != c_type_tag (type))
+     return true;
+ 
+   return false;
+ }
+ 
+ /* For a record or union type, make necessary adaptations so that the
+    type can be used as TYPE_CANONICAL.
+ 
+    If the TYPE contains a pointer (possibly nested in other type
+    derivations) to a structure or union as a member, create a copy
+    and change such pointers to void pointers.  Otherwise, the middle-end
+    gets confused when recording component aliases in the case where we
+    have formed equivalency classes that include types for which these
+    member pointers end up pointing to other structure or unions types
+    which have the same tag but are not compatible.  */
+ tree
+ c_type_canonical (tree type)
+ {
+   gcc_assert (RECORD_OR_UNION_TYPE_P (type));
+ 
+   bool needs_mod = false;
+   for (tree x = TYPE_FIELDS (type); x; x = DECL_CHAIN (x))
+     {
+       if (!ptr_to_tagged_member (x))
+ 	continue;
+       needs_mod = true;
+       break;
+     }
+   if (!needs_mod)
+     return type;
+ 
+   /* Construct new version with such members replaced.  */
+   tree n = build_distinct_type_copy (type);
+   tree *fields = &TYPE_FIELDS (n);
+   for (tree x = TYPE_FIELDS (type); x; x = DECL_CHAIN (x))
+     {
+       tree f = copy_node (x);
+       if (ptr_to_tagged_member (x))
+ 	TREE_TYPE (f) = c_reconstruct_complex_type (TREE_TYPE (x),
+ 						    ptr_type_node);
+       *fields = f;
+       fields = &DECL_CHAIN (f);
+     }
+   TYPE_CANONICAL (n) = n;
+   return n;
+ }
+ 
+ 
  /* If NTYPE is a type of a non-variadic function with a prototype
     and OTYPE is a type of a function without a prototype and ATTRS
     contains attribute format, diagnosess and removes it from ATTRS.
*************** tagged_types_tu_compatible_p (const_tree
*** 1833,1839 ****
    /* When forming equivalence classes for TYPE_CANONICAL in C23, we treat
       structs with the same tag as equivalent, but only when they are targets
       of pointers inside other structs.  */
!   if (data->equiv && data->pointedto)
      return true;
  
    /* Different types without tag are incompatible except as an anonymous
--- 1907,1913 ----
    /* When forming equivalence classes for TYPE_CANONICAL in C23, we treat
       structs with the same tag as equivalent, but only when they are targets
       of pointers inside other structs.  */
!   if (data->equiv && data->pointedto && NULL_TREE != c_type_tag (t1))
      return true;
  
    /* Different types without tag are incompatible except as an anonymous
diff -Nrcpad gcc-15-20260418/gcc/config/i386/i386.cc gcc-15-20260424/gcc/config/i386/i386.cc
*** gcc-15-20260418/gcc/config/i386/i386.cc	Sat Apr 18 22:32:06 2026
--- gcc-15-20260424/gcc/config/i386/i386.cc	Fri Apr 24 22:32:07 2026
*************** ix86_zero_call_used_regs (HARD_REG_SET n
*** 3994,3999 ****
--- 3994,4010 ----
      {
        emit_insn (zero_all_vec_insn);
        all_sse_zeroed = true;
+       if (TARGET_64BIT && TARGET_AVX512F)
+ 	{
+ 	  rtx zero = CONST0_RTX (V4SFmode);
+ 	  for (unsigned int regno = XMM16_REG;
+ 	       regno <= XMM31_REG;
+ 	       regno++)
+ 	    {
+ 	      rtx reg = gen_rtx_REG (V4SFmode, regno);
+ 	      emit_move_insn (reg, zero);
+ 	    }
+ 	}
      }
  
    /* mm/st registers are shared registers set, we should follow the following
diff -Nrcpad gcc-15-20260418/gcc/d/ChangeLog gcc-15-20260424/gcc/d/ChangeLog
*** gcc-15-20260418/gcc/d/ChangeLog	Sat Apr 18 22:32:06 2026
--- gcc-15-20260424/gcc/d/ChangeLog	Fri Apr 24 22:32:07 2026
***************
*** 1,3 ****
--- 1,12 ----
+ 2026-04-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-04-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123411
+ 	* types.cc (TypeVisitor::visit (TypeEnum *)): Only call layout_type on
+ 	the TYPE_MAIN_VARIANT of the enum.
+ 
  2026-02-08  Iain Buclaw  <ibuclaw@gdcproject.org>
  
  	Backported from master:
diff -Nrcpad gcc-15-20260418/gcc/d/types.cc gcc-15-20260424/gcc/d/types.cc
*** gcc-15-20260418/gcc/d/types.cc	Sat Apr 18 22:32:06 2026
--- gcc-15-20260424/gcc/d/types.cc	Fri Apr 24 22:32:07 2026
*************** public:
*** 1179,1211 ****
      /* Finish the enumeration type.  */
      if (TREE_CODE (t->ctype) == ENUMERAL_TYPE)
        {
! 	TYPE_MIN_VALUE (t->ctype) = TYPE_MIN_VALUE (basetype);
! 	TYPE_MAX_VALUE (t->ctype) = TYPE_MAX_VALUE (basetype);
! 	TYPE_UNSIGNED (t->ctype) = TYPE_UNSIGNED (basetype);
! 	SET_TYPE_ALIGN (t->ctype, TYPE_ALIGN (basetype));
! 	TYPE_SIZE (t->ctype) = NULL_TREE;
! 	TYPE_PRECISION (t->ctype) = dmd::size (t, t->sym->loc) * 8;
  
! 	layout_type (t->ctype);
  
  	/* Fix up all forward-referenced variants of this enum type.  */
! 	for (tree v = TYPE_MAIN_VARIANT (t->ctype); v;
! 	     v = TYPE_NEXT_VARIANT (v))
  	  {
! 	    if (v == t->ctype)
! 	      continue;
! 
! 	    TYPE_VALUES (v) = TYPE_VALUES (t->ctype);
! 	    TYPE_LANG_SPECIFIC (v) = TYPE_LANG_SPECIFIC (t->ctype);
! 	    TYPE_MIN_VALUE (v) = TYPE_MIN_VALUE (t->ctype);
! 	    TYPE_MAX_VALUE (v) = TYPE_MAX_VALUE (t->ctype);
! 	    TYPE_UNSIGNED (v) = TYPE_UNSIGNED (t->ctype);
! 	    TYPE_SIZE (v) = TYPE_SIZE (t->ctype);
! 	    TYPE_SIZE_UNIT (v) = TYPE_SIZE_UNIT (t->ctype);
! 	    SET_TYPE_MODE (v, TYPE_MODE (t->ctype));
! 	    TYPE_PRECISION (v) = TYPE_PRECISION (t->ctype);
! 	    SET_TYPE_ALIGN (v, TYPE_ALIGN (t->ctype));
! 	    TYPE_USER_ALIGN (v) = TYPE_USER_ALIGN (t->ctype);
  	  }
  
  	/* Complete forward-referenced fields of this enum type.  */
--- 1179,1213 ----
      /* Finish the enumeration type.  */
      if (TREE_CODE (t->ctype) == ENUMERAL_TYPE)
        {
! 	tree type = TYPE_MAIN_VARIANT (t->ctype);
  
! 	if (type == t->ctype)
! 	  {
! 	    TYPE_MIN_VALUE (type) = TYPE_MIN_VALUE (basetype);
! 	    TYPE_MAX_VALUE (type) = TYPE_MAX_VALUE (basetype);
! 	    TYPE_UNSIGNED (type) = TYPE_UNSIGNED (basetype);
! 	    SET_TYPE_ALIGN (type, TYPE_ALIGN (basetype));
! 	    TYPE_SIZE (type) = NULL_TREE;
! 	    TYPE_PRECISION (type) = dmd::size (t, t->sym->loc) * 8;
! 
! 	    layout_type (type);
! 	  }
  
  	/* Fix up all forward-referenced variants of this enum type.  */
! 	for (tree variant = TYPE_NEXT_VARIANT (type); variant;
! 	     variant = TYPE_NEXT_VARIANT (variant))
  	  {
! 	    TYPE_VALUES (variant) = TYPE_VALUES (type);
! 	    TYPE_LANG_SPECIFIC (variant) = TYPE_LANG_SPECIFIC (type);
! 	    TYPE_MIN_VALUE (variant) = TYPE_MIN_VALUE (type);
! 	    TYPE_MAX_VALUE (variant) = TYPE_MAX_VALUE (type);
! 	    TYPE_UNSIGNED (variant) = TYPE_UNSIGNED (type);
! 	    TYPE_SIZE (variant) = TYPE_SIZE (type);
! 	    TYPE_SIZE_UNIT (variant) = TYPE_SIZE_UNIT (type);
! 	    SET_TYPE_MODE (variant, TYPE_MODE (type));
! 	    TYPE_PRECISION (variant) = TYPE_PRECISION (type);
! 	    SET_TYPE_ALIGN (variant, TYPE_ALIGN (type));
! 	    TYPE_USER_ALIGN (variant) = TYPE_USER_ALIGN (type);
  	  }
  
  	/* Complete forward-referenced fields of this enum type.  */
diff -Nrcpad gcc-15-20260418/gcc/testsuite/ChangeLog gcc-15-20260424/gcc/testsuite/ChangeLog
*** gcc-15-20260418/gcc/testsuite/ChangeLog	Sat Apr 18 22:32:07 2026
--- gcc-15-20260424/gcc/testsuite/ChangeLog	Fri Apr 24 22:32:08 2026
***************
*** 1,3 ****
--- 1,72 ----
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-12-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123002
+ 	* gcc.dg/vect/vect-pr123002.c: Make global data non-const
+ 	and non-static.
+ 
+ 2026-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-12-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123002
+ 	* gcc.dg/vect/vect-pr123002.c: New testcase.
+ 
+ 2026-04-21  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-03  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/98203
+ 	PR fortran/98203
+ 	* gfortran.dg/gomp/pr98203.f90: New test.
+ 
+ 2026-04-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2026-04-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/123411
+ 	* gdc.dg/pr123411.d: New test.
+ 
+ 2026-04-20  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-01  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	PR c/124635
+ 	* gcc.dg/pr124635.c: New test.
+ 
+ 2026-04-20  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-03  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	PR c/122572
+ 	* gcc.dg/pr123356-2.c: New test.
+ 	* gcc.dg/struct-alias-2.c: New test.
+ 
+ 2026-04-20  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-03  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	PR c/122572
+ 	* gcc.dg/pr122572.c: New test.
+ 	* gcc.dg/pr123356-1.c: New test.
+ 
+ 2026-04-19  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2026-04-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/124876
+ 	* gcc.target/i386/zero-scratch-regs-23.c: Scan vpxord on ZMM16-31.
+ 	* gcc.target/i386/zero-scratch-regs-33.c: New test.
+ 
  2026-04-17  Paul Thomas  <pault@gcc.gnu.org>
  
  	Backported from master:
diff -Nrcpad gcc-15-20260418/gcc/testsuite/gcc.dg/pr122572.c gcc-15-20260424/gcc/testsuite/gcc.dg/pr122572.c
*** gcc-15-20260418/gcc/testsuite/gcc.dg/pr122572.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20260424/gcc/testsuite/gcc.dg/pr122572.c	Fri Apr 24 22:32:10 2026
***************
*** 0 ****
--- 1,46 ----
+ /* { dg-do run } */
+ /* { dg-options "-std=c23 -O2" } */
+ 
+ typedef struct {
+ 	int *arg;
+ 	int flags;
+ } optStruct;
+ 
+ typedef struct {
+ 	int *specified;
+ 	int flags;
+ } optEntry;
+ 
+ typedef struct {
+ 	int short_allowed;
+ 	optStruct *opt_table;
+ } optStruct2;
+ 
+ typedef struct {
+ 	int short_allowed;
+ 	optEntry *opt_table;
+ } optStruct3;
+ 
+ [[gnu::noipa]]
+ void f(int, int, optStruct3 a)
+ {
+ 	 a.opt_table[0].flags = 1;
+ }
+ 
+ [[gnu::noipa]]
+ int alias_bug (void)
+ {
+ 	static optEntry option_def[50];
+ 	static optStruct3 opt;
+ 	option_def[0].flags = 0;
+ 	opt.opt_table = option_def;
+ 	f (0, 0, opt);
+ 	return opt.opt_table[0].flags;
+ }
+ 
+ int main()
+ {
+ 	if (1 != alias_bug())
+ 		__builtin_abort();
+ }
+ 
diff -Nrcpad gcc-15-20260418/gcc/testsuite/gcc.dg/pr123356-1.c gcc-15-20260424/gcc/testsuite/gcc.dg/pr123356-1.c
*** gcc-15-20260418/gcc/testsuite/gcc.dg/pr123356-1.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20260424/gcc/testsuite/gcc.dg/pr123356-1.c	Fri Apr 24 22:32:10 2026
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ typedef struct
+ {
+     long  coeffs;
+ }
+ fmpz_poly_struct;
+ typedef struct
+ {
+ } n_poly_struct;
+ typedef struct
+ {
+     n_poly_struct * coeffs;
+     long alloc;
+     long length;
+ } n_bpoly_struct;
+ typedef struct
+ {
+     fmpz_poly_struct * coeffs;
+     long alloc;
+     long length;
+ } fmpz_bpoly_struct;
+ typedef fmpz_bpoly_struct fmpz_bpoly_t[];
+ 
+ __attribute__((noinline))
+ fmpz_poly_struct * fmpz_bpoly_swap_(fmpz_bpoly_t B, fmpz_bpoly_t Q)
+ {
+     fmpz_bpoly_struct t = *B;
+     *B = *Q;
+     *Q = t;
+     return B->coeffs;
+ }
+ 
+ __attribute__((noinline,optimize("no-strict-aliasing")))
+ fmpz_poly_struct * fmpz_bpoly_swap_2(fmpz_bpoly_t B, fmpz_bpoly_t Q)
+ {
+     fmpz_bpoly_struct t = *B;
+     *B = *Q;
+     *Q = t;
+     return B->coeffs;
+ }
+ 
+ int main(){
+     fmpz_poly_struct B_coeffs = {0}, Q_coeffs = {0};
+     fmpz_bpoly_t B = {0};
+     fmpz_bpoly_t Q = {0};
+     B->coeffs = &B_coeffs;
+     Q->coeffs = &Q_coeffs;
+     if (fmpz_bpoly_swap_(B, Q) != &Q_coeffs)
+ 	    __builtin_abort();
+     B->coeffs = &B_coeffs;
+     Q->coeffs = &Q_coeffs;
+     if (fmpz_bpoly_swap_2(B, Q) != &Q_coeffs)
+ 	    __builtin_abort();
+     return 0;
+ }
+ 
diff -Nrcpad gcc-15-20260418/gcc/testsuite/gcc.dg/pr123356-2.c gcc-15-20260424/gcc/testsuite/gcc.dg/pr123356-2.c
*** gcc-15-20260418/gcc/testsuite/gcc.dg/pr123356-2.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20260424/gcc/testsuite/gcc.dg/pr123356-2.c	Fri Apr 24 22:32:10 2026
***************
*** 0 ****
--- 1,69 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ 
+ /* Based on the submitted test case but using types with
+  * tags and moving the second version into another scope.  */
+ 
+ typedef struct foo
+ {
+     long  coeffs;
+ }
+ fmpz_poly_struct;
+ 
+ 
+ void f()
+ {
+ 	typedef struct foo
+ 	{
+ 	} n_poly_struct;
+ 	typedef struct
+ 	{
+ 	    n_poly_struct * coeffs;
+ 	    long alloc;
+ 	    long length;
+ 	} n_bpoly_struct;
+ }
+ 
+ 
+ typedef struct
+ {
+     fmpz_poly_struct * coeffs;
+     long alloc;
+     long length;
+ } fmpz_bpoly_struct;
+ typedef fmpz_bpoly_struct fmpz_bpoly_t[];
+ 
+ __attribute__((noinline))
+ fmpz_poly_struct * fmpz_bpoly_swap_(fmpz_bpoly_t B, fmpz_bpoly_t Q)
+ {
+     fmpz_bpoly_struct t = *B;
+     *B = *Q;
+     *Q = t;
+     return B->coeffs;
+ }
+ 
+ __attribute__((noinline,optimize("no-strict-aliasing")))
+ fmpz_poly_struct * fmpz_bpoly_swap_2(fmpz_bpoly_t B, fmpz_bpoly_t Q)
+ {
+     fmpz_bpoly_struct t = *B;
+     *B = *Q;
+     *Q = t;
+     return B->coeffs;
+ }
+ 
+ int main(){
+     fmpz_poly_struct B_coeffs = {0}, Q_coeffs = {0};
+     fmpz_bpoly_t B = {0};
+     fmpz_bpoly_t Q = {0};
+     B->coeffs = &B_coeffs;
+     Q->coeffs = &Q_coeffs;
+     if (fmpz_bpoly_swap_(B, Q) != &Q_coeffs)
+ 	    __builtin_abort();
+     B->coeffs = &B_coeffs;
+     Q->coeffs = &Q_coeffs;
+     if (fmpz_bpoly_swap_2(B, Q) != &Q_coeffs)
+ 	    __builtin_abort();
+     return 0;
+ }
+ 
diff -Nrcpad gcc-15-20260418/gcc/testsuite/gcc.dg/pr124635.c gcc-15-20260424/gcc/testsuite/gcc.dg/pr124635.c
*** gcc-15-20260418/gcc/testsuite/gcc.dg/pr124635.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20260424/gcc/testsuite/gcc.dg/pr124635.c	Fri Apr 24 22:32:10 2026
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-std=c23 -g" } */
+ 
+ #pragma scalar_storage_order big-endian
+ 
+ struct S {
+   struct S *s[1];
+   char c;
+ };
+ 
diff -Nrcpad gcc-15-20260418/gcc/testsuite/gcc.dg/struct-alias-2.c gcc-15-20260424/gcc/testsuite/gcc.dg/struct-alias-2.c
*** gcc-15-20260418/gcc/testsuite/gcc.dg/struct-alias-2.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20260424/gcc/testsuite/gcc.dg/struct-alias-2.c	Fri Apr 24 22:32:10 2026
***************
*** 0 ****
--- 1,133 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -std=c23" } */
+ 
+ 
+ /* Based on the submitted test case for PR123356 but using types with
+  * tags and moving the second version into another scope.  */
+ 
+ struct foo { long x; };
+ 
+ void f()
+ {
+ 	struct foo { };
+ 	struct bar { struct foo *c; };
+ 	union baz { struct foo *c; };
+ 	struct arr { struct foo *c[1]; };
+ 	struct fun { struct foo (*c)(); };
+ }
+ 
+ 
+ void f1()
+ {
+ 	struct foo { };
+ 	struct bar { struct foo *c; };
+ 	union baz { struct foo *c; };
+ 	struct arr { struct foo *c[1]; };
+ 	struct fun { struct foo (*c)(); };
+ }
+ 
+ struct bar { struct foo *c; };
+ union baz { struct foo *c; };
+ struct arr { struct foo *c[1]; };
+ struct fun { struct foo (*c)(); };
+ 
+ void f2()
+ {
+ 	struct foo { int y; };
+ 	struct bar { struct foo *c; };
+ 	union baz { struct foo *c; };
+ 	struct arr { struct foo *c[1]; };
+ 	struct fun { struct foo (*c)(); };
+ }
+ 
+ __attribute__((noinline))
+ struct foo * g1(struct bar *B, struct bar *Q)
+ {
+     struct bar t = *B;
+     *B = *Q;
+     *Q = t;
+     return B->c;
+ }
+ 
+ __attribute__((noinline))
+ struct foo * g2(union baz *B, union baz *Q)
+ {
+     union baz t = *B;
+     *B = *Q;
+     *Q = t;
+     return B->c;
+ }
+ 
+ __attribute__((noinline))
+ struct foo { long x; } * 
+ 	g3(struct bar { struct foo { long x; } *c; } *B,
+ 	   struct bar { struct foo { long x; } *c; } *Q)
+ {
+     struct bar t = *B;
+     *B = *Q;
+     *Q = t;
+     return B->c;
+ }
+ 
+ __attribute__((noinline))
+ struct foo * g4(struct arr *B,
+ 	        struct arr *Q)
+ {
+     struct arr t = *B;
+     *B = *Q;
+     *Q = t;
+     return B->c[0];
+ }
+ 
+ __attribute__((noinline))
+ struct foo (*g5(struct fun *B,
+ 	        struct fun *Q))()
+ {
+     struct fun t = *B;
+     *B = *Q;
+     *Q = t;
+     return B->c;
+ }
+ 
+ struct foo Bd() { };
+ struct foo Qd() { };
+ 
+ int main()
+ {
+     struct foo Bc = { };
+     struct foo Qc = { };
+ 
+     struct bar B = { &Bc };
+     struct bar Q = { &Qc };
+ 
+     if (g1(&B, &Q) != &Qc)
+ 	    __builtin_abort();
+ 
+     union baz Bu = { &Bc };
+     union baz Qu = { &Qc };
+ 
+     if (g2(&Bu, &Qu) != &Qc)
+ 	    __builtin_abort();
+ 
+     struct bar B2 = { &Bc };
+     struct bar Q2 = { &Qc };
+ 
+     if (g3(&B2, &Q2) != &Qc)
+ 	    __builtin_abort();
+ 
+     struct arr Ba = { &Bc };
+     struct arr Qa = { &Qc };
+ 
+     if (g4(&Ba, &Qa) != &Qc)
+ 	    __builtin_abort();
+ #if 0
+     // PR114959
+     struct fun Bf = { &Bd };
+     struct fun Qf = { &Qd };
+ 
+     if (g5(&Bf, &Qf) != &Qd)
+ 	    __builtin_abort();
+ #endif
+     return 0;
+ }
+ 
diff -Nrcpad gcc-15-20260418/gcc/testsuite/gcc.dg/vect/vect-pr123002.c gcc-15-20260424/gcc/testsuite/gcc.dg/vect/vect-pr123002.c
*** gcc-15-20260418/gcc/testsuite/gcc.dg/vect/vect-pr123002.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20260424/gcc/testsuite/gcc.dg/vect/vect-pr123002.c	Fri Apr 24 22:32:12 2026
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-additional-options "-mavx2" { target avx2 } } */
+ 
+ #include "tree-vect.h"
+ 
+ unsigned int enc_table_32[8][3] = {
+     {513735U, 77223048U, 437087610U },
+     {0U,      78508U,    646269101U },
+     {0U,      0U,        11997U,    },
+     {0U,      0U,        0U,        },
+     {0U,      0U,        0U,        },
+     {0U,      0U,        0U,        },
+     {0U,      0U,        0U,        },
+     {0U,      0U,        0U,        }};
+ 
+ int __attribute__((noipa)) foo()
+ {
+   unsigned long intermediate[3] = {0};
+ 
+   for (unsigned long i = 0UL; i < 8; i++) {
+       intermediate[0] += 2 * (unsigned long)(enc_table_32)[i][0];
+       intermediate[1] += 2 * (unsigned long)(enc_table_32)[i][1];
+       intermediate[2] += 2 * (unsigned long)(enc_table_32)[i][2];
+   }
+ 
+   if (intermediate[0] == 0xfad8e &&
+       intermediate[1] == 0x9370e68 && intermediate[2] == 0x8125ca08) {
+       return 0;
+   } else {
+       return 1;
+   }
+ }
+ 
+ int main()
+ {
+   check_vect ();
+   if (foo ())
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-15-20260418/gcc/testsuite/gcc.target/i386/zero-scratch-regs-23.c gcc-15-20260424/gcc/testsuite/gcc.target/i386/zero-scratch-regs-23.c
*** gcc-15-20260418/gcc/testsuite/gcc.target/i386/zero-scratch-regs-23.c	Sat Apr 18 22:32:11 2026
--- gcc-15-20260424/gcc/testsuite/gcc.target/i386/zero-scratch-regs-23.c	Fri Apr 24 22:32:15 2026
*************** foo (void)
*** 7,12 ****
--- 7,28 ----
  }
  
  /* { dg-final { scan-assembler "vzeroall" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm16, %zmm16, %zmm16" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm17, %zmm17, %zmm17" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm18, %zmm18, %zmm18" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm19, %zmm19, %zmm19" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm20, %zmm20, %zmm20" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm21, %zmm21, %zmm21" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm22, %zmm22, %zmm22" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm23, %zmm23, %zmm23" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm24, %zmm24, %zmm24" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm25, %zmm25, %zmm25" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm26, %zmm26, %zmm26" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm27, %zmm27, %zmm27" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm28, %zmm28, %zmm28" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm29, %zmm29, %zmm29" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm30, %zmm30, %zmm30" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm31, %zmm31, %zmm31" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "fldz" 8 } } */
  /* { dg-final { scan-assembler-times "fstp\[ \t\]+%st\\(0\\)" 8 } } */
  /* { dg-final { scan-assembler-not "%xmm" } } */
diff -Nrcpad gcc-15-20260418/gcc/testsuite/gcc.target/i386/zero-scratch-regs-33.c gcc-15-20260424/gcc/testsuite/gcc.target/i386/zero-scratch-regs-33.c
*** gcc-15-20260418/gcc/testsuite/gcc.target/i386/zero-scratch-regs-33.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20260424/gcc/testsuite/gcc.target/i386/zero-scratch-regs-33.c	Fri Apr 24 22:32:15 2026
***************
*** 0 ****
--- 1,60 ----
+ /* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+ /* { dg-options "-O2 -fzero-call-used-regs=all -march=corei7 -mavx512f -mapxf" } */
+ 
+ void
+ foo (void)
+ {
+ }
+ 
+ /* { dg-final { scan-assembler "vzeroall" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm16, %zmm16, %zmm16" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm17, %zmm17, %zmm17" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm18, %zmm18, %zmm18" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm19, %zmm19, %zmm19" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm20, %zmm20, %zmm20" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm21, %zmm21, %zmm21" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm22, %zmm22, %zmm22" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm23, %zmm23, %zmm23" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm24, %zmm24, %zmm24" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm25, %zmm25, %zmm25" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm26, %zmm26, %zmm26" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm27, %zmm27, %zmm27" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm28, %zmm28, %zmm28" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm29, %zmm29, %zmm29" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm30, %zmm30, %zmm30" } } */
+ /* { dg-final { scan-assembler "vpxord\[ \t\]+%zmm31, %zmm31, %zmm31" } } */
+ /* { dg-final { scan-assembler-times "fldz" 8 } } */
+ /* { dg-final { scan-assembler-times "fstp\[ \t\]+%st\\(0\\)" 8 } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%eax, %eax" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%ecx, %ecx" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%esi, %esi" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%edi, %edi" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r8d, %r8d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r9d, %r9d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r10d, %r10d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r11d, %r11d" } } */
+ /* { dg-final { scan-assembler "kxorw\[ \t\]+%k0, %k0, %k0" } } */
+ /* { dg-final { scan-assembler "kxorw\[ \t\]+%k1, %k1, %k1" } } */
+ /* { dg-final { scan-assembler "kxorw\[ \t\]+%k2, %k2, %k2" } } */
+ /* { dg-final { scan-assembler "kxorw\[ \t\]+%k3, %k3, %k3" } } */
+ /* { dg-final { scan-assembler "kxorw\[ \t\]+%k4, %k4, %k4" } } */
+ /* { dg-final { scan-assembler "kxorw\[ \t\]+%k5, %k5, %k5" } } */
+ /* { dg-final { scan-assembler "kxorw\[ \t\]+%k6, %k6, %k6" } } */
+ /* { dg-final { scan-assembler "kxorw\[ \t\]+%k7, %k7, %k7" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r16d, %r16d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r17d, %r17d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r18d, %r18d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r19d, %r19d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r20d, %r20d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r21d, %r21d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r22d, %r22d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r23d, %r23d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r24d, %r24d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r25d, %r25d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r26d, %r26d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r27d, %r27d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r28d, %r28d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r29d, %r29d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r30d, %r30d" } } */
+ /* { dg-final { scan-assembler "xorl\[ \t\]+%r31d, %r31d" } } */
diff -Nrcpad gcc-15-20260418/gcc/testsuite/gdc.dg/pr123411.d gcc-15-20260424/gcc/testsuite/gdc.dg/pr123411.d
*** gcc-15-20260418/gcc/testsuite/gdc.dg/pr123411.d	Thu Jan  1 00:00:00 1970
--- gcc-15-20260424/gcc/testsuite/gdc.dg/pr123411.d	Fri Apr 24 22:32:15 2026
***************
*** 0 ****
--- 1,15 ----
+ // { dg-do compile }
+ module object;
+ enum E
+ {
+     unknown
+ }
+ enum : E
+ {
+     E_UNKNOWN
+ }
+ 
+ E test()
+ {
+     return E.unknown;
+ }
diff -Nrcpad gcc-15-20260418/gcc/testsuite/gfortran.dg/gomp/pr98203.f90 gcc-15-20260424/gcc/testsuite/gfortran.dg/gomp/pr98203.f90
*** gcc-15-20260418/gcc/testsuite/gfortran.dg/gomp/pr98203.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20260424/gcc/testsuite/gfortran.dg/gomp/pr98203.f90	Fri Apr 24 22:32:16 2026
***************
*** 0 ****
--- 1,14 ----
+ ! { dg-do compile }
+ ! PR fortran/98203
+ ! Contributed by G. Steinmetz <gscfq@t-online.de>
+ !
+ ! ICE in gfc_trans_omp_do with collapse(2) and non-unit stride.
+ 
+ subroutine s
+   integer :: i, j
+   !$omp parallel do collapse(2)
+   do i = 1, 10, 2
+     do j = 1, 10
+     end do
+   end do
+ end
diff -Nrcpad gcc-15-20260418/gcc/tree-vect-patterns.cc gcc-15-20260424/gcc/tree-vect-patterns.cc
*** gcc-15-20260418/gcc/tree-vect-patterns.cc	Sat Apr 18 22:32:13 2026
--- gcc-15-20260424/gcc/tree-vect-patterns.cc	Fri Apr 24 22:32:17 2026
*************** vect_recog_abd_pattern (vec_info *vinfo,
*** 1517,1525 ****
        int dummy_int;
        auto_vec<tree> dummy_vec;
        if (mid_vectype
! 	  && supportable_widening_operation (vinfo, IFN_VEC_WIDEN_ABD,
! 					     stmt_vinfo, mid_vectype,
! 					     vectype_in,
  					     &dummy_code, &dummy_code,
  					     &dummy_int, &dummy_vec))
  	{
--- 1517,1524 ----
        int dummy_int;
        auto_vec<tree> dummy_vec;
        if (mid_vectype
! 	  && supportable_widening_operation (IFN_VEC_WIDEN_ABD,
! 					     mid_vectype, vectype_in, false,
  					     &dummy_code, &dummy_code,
  					     &dummy_int, &dummy_vec))
  	{
*************** vect_recog_widen_op_pattern (vec_info *v
*** 1639,1646 ****
    if (!vectype
        || !vecitype
        || !vecctype
!       || !supportable_widening_operation (vinfo, wide_code, last_stmt_info,
! 					  vecitype, vectype,
  					  &dummy_code, &dummy_code,
  					  &dummy_int, &dummy_vec))
      return NULL;
--- 1638,1644 ----
    if (!vectype
        || !vecitype
        || !vecctype
!       || !supportable_widening_operation (wide_code, vecitype, vectype, true,
  					  &dummy_code, &dummy_code,
  					  &dummy_int, &dummy_vec))
      return NULL;
*************** vect_recog_widen_abd_pattern (vec_info *
*** 1740,1747 ****
    code_helper dummy_code;
    int dummy_int;
    auto_vec<tree> dummy_vec;
!   if (!supportable_widening_operation (vinfo, IFN_VEC_WIDEN_ABD, stmt_vinfo,
! 				       vectype_out, vectype_in,
  				       &dummy_code, &dummy_code,
  				       &dummy_int, &dummy_vec))
      return NULL;
--- 1738,1745 ----
    code_helper dummy_code;
    int dummy_int;
    auto_vec<tree> dummy_vec;
!   if (!supportable_widening_operation (IFN_VEC_WIDEN_ABD, vectype_out,
! 				       vectype_in, false,
  				       &dummy_code, &dummy_code,
  				       &dummy_int, &dummy_vec))
      return NULL;
diff -Nrcpad gcc-15-20260418/gcc/tree-vect-stmts.cc gcc-15-20260424/gcc/tree-vect-stmts.cc
*** gcc-15-20260418/gcc/tree-vect-stmts.cc	Sat Apr 18 22:32:13 2026
--- gcc-15-20260424/gcc/tree-vect-stmts.cc	Fri Apr 24 22:32:17 2026
*************** vectorizable_conversion (vec_info *vinfo
*** 5734,5739 ****
--- 5734,5740 ----
    scalar_mode rhs_mode = SCALAR_TYPE_MODE (rhs_type);
    opt_scalar_mode rhs_mode_iter;
    auto_vec<std::pair<tree, tree_code> > converts;
+   bool evenodd_ok = false;
  
    /* Supportable by target?  */
    switch (modifier)
*************** vectorizable_conversion (vec_info *vinfo
*** 5781,5790 ****
  	  gcc_assert (!(multi_step_cvt && op_type == binary_op));
  	  break;
  	}
!       if (supportable_widening_operation (vinfo, code, stmt_info,
! 					       vectype_out, vectype_in, &code1,
! 					       &code2, &multi_step_cvt,
! 					       &interm_types))
  	{
  	  /* Binary widening operation can only be supported directly by the
  	     architecture.  */
--- 5782,5809 ----
  	  gcc_assert (!(multi_step_cvt && op_type == binary_op));
  	  break;
  	}
!       /* Elements in a vector can only be reordered if used in a reduction
! 	 operation only.  */
!       if (code == WIDEN_MULT_EXPR
! 	  && loop_vinfo
! 	  && !nested_in_vect_loop_p (LOOP_VINFO_LOOP (loop_vinfo), stmt_info)
! 	  /* For a SLP reduction we cannot swizzle lanes, detecting a
! 	     reduction chain isn't possible here.  */
! 	  && SLP_TREE_LANES (slp_node) == 1)
! 	{
! 	  /* ???  There is no way to look for SLP uses, so work on
! 	     the stmt and what the stmt-based cycle detection gives us.  */
! 	  tree lhs = gimple_get_lhs (vect_orig_stmt (stmt_info)->stmt);
! 	  stmt_vec_info use_stmt_info
! 	    = lhs ? loop_vinfo->lookup_single_use (lhs) : NULL;
! 	  if (use_stmt_info
! 	      && STMT_VINFO_REDUC_DEF (use_stmt_info))
! 	    evenodd_ok = true;
! 	}
!       if (supportable_widening_operation (code, vectype_out, vectype_in,
! 					  evenodd_ok, &code1,
! 					  &code2, &multi_step_cvt,
! 					  &interm_types))
  	{
  	  /* Binary widening operation can only be supported directly by the
  	     architecture.  */
*************** vectorizable_conversion (vec_info *vinfo
*** 5818,5835 ****
  		goto unsupported;
  	      codecvt1 = tc1;
  	    }
! 	  else if (!supportable_widening_operation (vinfo, code,
! 						    stmt_info, vectype_out,
! 						    cvt_type, &codecvt1,
  						    &codecvt2, &multi_step_cvt,
  						    &interm_types))
  	    continue;
  	  else
  	    gcc_assert (multi_step_cvt == 0);
  
! 	  if (supportable_widening_operation (vinfo, NOP_EXPR, stmt_info,
! 					      cvt_type,
! 					      vectype_in, &code1,
  					      &code2, &multi_step_cvt,
  					      &interm_types))
  	    {
--- 5837,5853 ----
  		goto unsupported;
  	      codecvt1 = tc1;
  	    }
! 	  else if (!supportable_widening_operation (code, vectype_out,
! 						    cvt_type, evenodd_ok,
! 						    &codecvt1,
  						    &codecvt2, &multi_step_cvt,
  						    &interm_types))
  	    continue;
  	  else
  	    gcc_assert (multi_step_cvt == 0);
  
! 	  if (supportable_widening_operation (NOP_EXPR, cvt_type,
! 					      vectype_in, evenodd_ok, &code1,
  					      &code2, &multi_step_cvt,
  					      &interm_types))
  	    {
*************** vect_maybe_update_slp_op_vectype (slp_tr
*** 14912,14917 ****
--- 14930,14937 ----
     are supported by the target platform either directly (via vector
     tree-codes), or via target builtins.
  
+    When EVENODD_OK then also lane-swizzling operations are considered.
+ 
     Output:
     - CODE1 and CODE2 are codes of vector operations to be used when
     vectorizing the operation, if available.
*************** vect_maybe_update_slp_op_vectype (slp_tr
*** 14922,14938 ****
     widening operation (short in the above example).  */
  
  bool
! supportable_widening_operation (vec_info *vinfo,
! 				code_helper code,
! 				stmt_vec_info stmt_info,
  				tree vectype_out, tree vectype_in,
  				code_helper *code1,
  				code_helper *code2,
                                  int *multi_step_cvt,
                                  vec<tree> *interm_types)
  {
-   loop_vec_info loop_info = dyn_cast <loop_vec_info> (vinfo);
-   class loop *vect_loop = NULL;
    machine_mode vec_mode;
    enum insn_code icode1, icode2;
    optab optab1 = unknown_optab, optab2 = unknown_optab;
--- 14942,14955 ----
     widening operation (short in the above example).  */
  
  bool
! supportable_widening_operation (code_helper code,
  				tree vectype_out, tree vectype_in,
+ 				bool evenodd_ok,
  				code_helper *code1,
  				code_helper *code2,
                                  int *multi_step_cvt,
                                  vec<tree> *interm_types)
  {
    machine_mode vec_mode;
    enum insn_code icode1, icode2;
    optab optab1 = unknown_optab, optab2 = unknown_optab;
*************** supportable_widening_operation (vec_info
*** 14945,14952 ****
    optab optab3, optab4;
  
    *multi_step_cvt = 0;
-   if (loop_info)
-     vect_loop = LOOP_VINFO_LOOP (loop_info);
  
    switch (code.safe_as_tree_code ())
      {
--- 14962,14967 ----
*************** supportable_widening_operation (vec_info
*** 14988,15011 ****
  	 on VEC_WIDEN_MULT_EVEN_EXPR.  If it succeeds, all the return values
  	 are properly set up for the caller.  If we fail, we'll continue with
  	 a VEC_WIDEN_MULT_LO/HI_EXPR check.  */
!       if (vect_loop
! 	  && !nested_in_vect_loop_p (vect_loop, stmt_info)
! 	  && supportable_widening_operation (vinfo, VEC_WIDEN_MULT_EVEN_EXPR,
! 					     stmt_info, vectype_out,
! 					     vectype_in, code1,
  					     code2, multi_step_cvt,
  					     interm_types))
!         {
!           /* Elements in a vector with vect_used_by_reduction property cannot
!              be reordered if the use chain with this property does not have the
!              same operation.  One such an example is s += a * b, where elements
!              in a and b cannot be reordered.  Here we check if the vector defined
!              by STMT is only directly used in the reduction statement.  */
! 	  tree lhs = gimple_assign_lhs (vect_orig_stmt (stmt_info)->stmt);
! 	  stmt_vec_info use_stmt_info = loop_info->lookup_single_use (lhs);
! 	  if (use_stmt_info && STMT_VINFO_REDUC_DEF (use_stmt_info))
! 	    return true;
!         }
        c1 = VEC_WIDEN_MULT_LO_EXPR;
        c2 = VEC_WIDEN_MULT_HI_EXPR;
        break;
--- 15003,15015 ----
  	 on VEC_WIDEN_MULT_EVEN_EXPR.  If it succeeds, all the return values
  	 are properly set up for the caller.  If we fail, we'll continue with
  	 a VEC_WIDEN_MULT_LO/HI_EXPR check.  */
!       if (evenodd_ok
! 	  && supportable_widening_operation (VEC_WIDEN_MULT_EVEN_EXPR,
! 					     vectype_out, vectype_in,
! 					     evenodd_ok, code1,
  					     code2, multi_step_cvt,
  					     interm_types))
! 	return true;
        c1 = VEC_WIDEN_MULT_LO_EXPR;
        c2 = VEC_WIDEN_MULT_HI_EXPR;
        break;
diff -Nrcpad gcc-15-20260418/gcc/tree-vectorizer.h gcc-15-20260424/gcc/tree-vectorizer.h
*** gcc-15-20260418/gcc/tree-vectorizer.h	Sat Apr 18 22:32:13 2026
--- gcc-15-20260424/gcc/tree-vectorizer.h	Fri Apr 24 22:32:17 2026
*************** extern bool vect_is_simple_use (vec_info
*** 2399,2406 ****
  				tree *, stmt_vec_info * = NULL);
  extern bool vect_maybe_update_slp_op_vectype (slp_tree, tree);
  extern tree perm_mask_for_reverse (tree);
! extern bool supportable_widening_operation (vec_info*, code_helper,
! 					    stmt_vec_info, tree, tree,
  					    code_helper*, code_helper*,
  					    int*, vec<tree> *);
  extern bool supportable_narrowing_operation (code_helper, tree, tree,
--- 2399,2405 ----
  				tree *, stmt_vec_info * = NULL);
  extern bool vect_maybe_update_slp_op_vectype (slp_tree, tree);
  extern tree perm_mask_for_reverse (tree);
! extern bool supportable_widening_operation (code_helper, tree, tree, bool,
  					    code_helper*, code_helper*,
  					    int*, vec<tree> *);
  extern bool supportable_narrowing_operation (code_helper, tree, tree,
