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
>>


Reply via email to