Since stack can only be accessed by GPR, check GENERAL_REG_P, instead of REG_P, in ix86_find_all_reg_use_1.
gcc/ PR target/118936 * config/i386/i386.cc (ix86_find_all_reg_use_1): Replace REG_P with GENERAL_REG_P. gcc/testsuite/ PR target/118936 * gcc.target/i386/pr118936.c: New test. OK for master? Thanks. -- H.J.
From 30d6c36b86030712c1f243a3440502baa5c56f87 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.to...@gmail.com> Date: Wed, 19 Feb 2025 19:48:07 +0800 Subject: [PATCH] x86: Check GENERAL_REG_P for stack access Since stack can only be accessed by GPR, check GENERAL_REG_P, instead of REG_P, in ix86_find_all_reg_use_1. gcc/ PR target/118936 * config/i386/i386.cc (ix86_find_all_reg_use_1): Replace REG_P with GENERAL_REG_P. gcc/testsuite/ PR target/118936 * gcc.target/i386/pr118936.c: New test. Signed-off-by: H.J. Lu <hjl.to...@gmail.com> --- gcc/config/i386/i386.cc | 2 +- gcc/testsuite/gcc.target/i386/pr118936.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr118936.c diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index 560e6525b56..f5d46296570 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -8494,7 +8494,7 @@ ix86_find_all_reg_use_1 (rtx set, HARD_REG_SET &stack_slot_access, auto_bitmap &worklist) { rtx dest = SET_DEST (set); - if (!REG_P (dest)) + if (!GENERAL_REG_P (dest)) return; rtx src = SET_SRC (set); diff --git a/gcc/testsuite/gcc.target/i386/pr118936.c b/gcc/testsuite/gcc.target/i386/pr118936.c new file mode 100644 index 00000000000..22eed881f0f --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr118936.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-omit-frame-pointer -fno-toplevel-reorder" } */ + +struct S1 +{ + signed int f1 : 17; + signed int f2 : 23; + signed int f3 : 11; + signed int f4: 31; + unsigned int f6; +}; +short g_1611; +volatile struct S1 **g_1680; +volatile struct S1 ***g_1679[8][8]; +void +func_40 (struct S1 p_41, short *l_2436) +{ + char __trans_tmp_3; + __trans_tmp_3 = p_41.f6; + *l_2436 ^= __trans_tmp_3; + g_1611 = 0; + for (; g_1611 < 8; g_1611 += 1) + g_1679[1][g_1611] = &g_1680; +} -- 2.48.1