On Tue Aug 25, 2026 at 1:48 AM CEST, Andrea Pinski wrote: > On Mon, Aug 24, 2026 at 6:05 AM Josef Melcr <[email protected]> wrote: >> >> Hi, >> references are recreated when redirecting edges in the target clone >> pass. However, the references are not created with their corresponding >> call statements, potentially leading to ICEs as shown in PR127023. This >> patch fixes that. >> >> Bootstrapped, LTO-bootstrapped and regtested on x86_64-linux without any >> new regressions. OK for master? > > Ok.
I forgot to ask, is this okay for the 16 branch as well? Thanks :) Josef > >> >> Best regards, >> Josef >> >> PR ipa/127023 >> >> gcc/ChangeLog: >> >> * multiple_target.cc (create_dispatcher_calls): Use the call >> statement variant of create_reference. >> >> gcc/testsuite/ChangeLog: >> >> * gcc.target/i386/pr127023.c: New test. >> >> Signed-off-by: Josef Melcr <[email protected]> >> --- >> gcc/multiple_target.cc | 2 +- >> gcc/testsuite/gcc.target/i386/pr127023.c | 16 ++++++++++++++++ >> 2 files changed, 17 insertions(+), 1 deletion(-) >> create mode 100644 gcc/testsuite/gcc.target/i386/pr127023.c >> >> diff --git a/gcc/multiple_target.cc b/gcc/multiple_target.cc >> index 3f8676f5943..01d3ff84bf3 100644 >> --- a/gcc/multiple_target.cc >> +++ b/gcc/multiple_target.cc >> @@ -190,7 +190,7 @@ create_dispatcher_calls (struct cgraph_node *node) >> } >> >> symtab_node *source = ref->referring; >> - source->create_reference (inode, IPA_REF_ADDR); >> + source->create_reference (inode, IPA_REF_ADDR, ref->stmt); >> } >> else if (ref->use == IPA_REF_ALIAS) >> { >> diff --git a/gcc/testsuite/gcc.target/i386/pr127023.c >> b/gcc/testsuite/gcc.target/i386/pr127023.c >> new file mode 100644 >> index 00000000000..ecd6af57cf6 >> --- /dev/null >> +++ b/gcc/testsuite/gcc.target/i386/pr127023.c >> @@ -0,0 +1,16 @@ >> +/* PR ipa/127023 */ >> +/* { dg-do compile } */ >> +/* { dg-options "-O2 -fopenmp" } */ >> +/* { dg-require-ifunc "" } */ >> + >> +__attribute__((target_clones("default", "fma4"), noinline)) >> +static void e(int f) { >> + if (!f) >> +#pragma omp parallel >> + for (;;) >> + ; >> +} >> +__attribute__((target_clones("default", "fma4"))) >> +void g(void) { >> + e(1); >> +} >> -- >> 2.55.0 >>
