https://gcc.gnu.org/g:ed5d77a4e802288acfaff71f1a0fb6a54a7c6a35
commit r17-1581-ged5d77a4e802288acfaff71f1a0fb6a54a7c6a35 Author: H.J. Lu <[email protected]> Date: Tue Jun 16 06:51:29 2026 +0800 x86: Replace gen_rtx_SUBREG with gen_lowpart Replace gen_rtx_SUBREG with gen_lowpart when generating E_HImode RTX on destination of (subreg:V2QI (reg:HI 111 [ vect__6.14_46 ]) 0) with CONST_INT source. gcc/ PR target/125614 * config/i386/i386-features.cc (replace_vector_const): Replace gen_rtx_SUBREG with gen_lowpart. gcc/testsuite/ PR target/125614 * gcc.target/i386/pr125614.c: New file. Signed-off-by: H.J. Lu <[email protected]> Diff: --- gcc/config/i386/i386-features.cc | 2 +- gcc/testsuite/gcc.target/i386/pr125614.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/gcc/config/i386/i386-features.cc b/gcc/config/i386/i386-features.cc index 68d76d364ccb..c0282f689861 100644 --- a/gcc/config/i386/i386-features.cc +++ b/gcc/config/i386/i386-features.cc @@ -3806,7 +3806,7 @@ replace_vector_const (machine_mode vector_mode, rtx vector_const, SET_SRC (set) = replace; if (CONST_INT_P (replace)) { - dest = gen_rtx_SUBREG (scalar_mode, dest, 0); + dest = gen_lowpart (scalar_mode, dest); SET_DEST (set) = dest; } /* Drop possible dead definitions. */ diff --git a/gcc/testsuite/gcc.target/i386/pr125614.c b/gcc/testsuite/gcc.target/i386/pr125614.c new file mode 100644 index 000000000000..22127fb398de --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr125614.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-dce -fno-tree-fre -march=x86-64" } */ + +int b, c; +int +a (void) +{ + char d[8]; + int e = 0; + if (b) + goto f; + if (c) + { + for (int g = 0; g < 8; ++g) + d[g] = g; + a (); + d[0] = -d[0]; + d[1] = -d[1]; + f: + int h; + if (h) + __builtin_abort (); + e = d[0]; + e = d[1] + e; + } + return e; +}
