From: H.J. Lu Date: Fri, 19 Jun 2026 12:05:56 +0000 (+0800) Subject: x86_cse: Skip JUMP from asm goto X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d018a10f24c82f02f2c093b31e91c03917feb8a4;p=thirdparty%2Fgcc.git x86_cse: Skip JUMP from asm goto Skip a single set of JUMP came from asm goto: (jump_insn 9 2 111 2 (parallel [ (set (reg:SI 134) (asm_operands/v:SI ("") ("=r") 0 [] [] [ (label_ref:DI 10) ] x.c:6)) (clobber (reg:CC 17 flags)) ]) "x.c":6:3 -1 (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)) -> 10) when checking the broadcast source. gcc/ PR target/125883 * config/i386/i386-features.cc (ix86_broadcast_inner): Skip JUMP from asm goto. gcc/testsuite/ PR target/125883 * gcc.target/i386/pr125883.c: New test. Signed-off-by: H.J. Lu --- diff --git a/gcc/config/i386/i386-features.cc b/gcc/config/i386/i386-features.cc index 23f8038bae8..aa16c7dc56c 100644 --- a/gcc/config/i386/i386-features.cc +++ b/gcc/config/i386/i386-features.cc @@ -4043,6 +4043,11 @@ ix86_broadcast_inner (rtx op, machine_mode mode, return nullptr; rtx_insn *insn = DF_REF_INSN (ref); + + /* Skip JUMP which happens with asm goto. */ + if (JUMP_P (insn)) + return nullptr; + rtx set = single_set (insn); if (!set) return nullptr; diff --git a/gcc/testsuite/gcc.target/i386/pr125883.c b/gcc/testsuite/gcc.target/i386/pr125883.c new file mode 100644 index 00000000000..fe44c62e763 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr125883.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -march=x86-64" } */ + +int a, b; +int c[0], d[0]; +void +foo (void) +{ + __asm__ goto("" : "=r"(a) : : : f); +f: + for (; b; b++) + c[b] = d[b] = c[b] + a; +}