> Am 01.05.2025 um 09:53 schrieb Uros Bizjak <ubiz...@gmail.com>:
> 
> On Thu, May 1, 2025 at 9:10 AM H.J. Lu <hjl.to...@gmail.com> wrote:
>> 
>>> On Thu, May 1, 2025 at 2:56 PM Uros Bizjak <ubiz...@gmail.com> wrote:
>>> 
>>> On Wed, Apr 30, 2025 at 11:31 PM H.J. Lu <hjl.to...@gmail.com> wrote:
>>>> 
>>>> On Wed, Apr 30, 2025 at 7:37 PM Uros Bizjak <ubiz...@gmail.com> wrote:
>>>>> 
>>>>> On Tue, Apr 29, 2025 at 11:40 PM H.J. Lu <hjl.to...@gmail.com> wrote:
>>>>>> 
>>>>>> AREG, DREG, CREG and AD_REGS are kept in ix86_class_likely_spilled_p to
>>>>>> avoid the following regressions with
>>>>>> 
>>>>>> $ make check RUNTESTFLAGS="--target_board='unix{-m32,}'"
>>>>>> 
>>>>>> FAIL: gcc.dg/pr105911.c (internal compiler error: in 
>>>>>> lra_split_hard_reg_for, at lra-assigns.cc:1863)
>>>>>> FAIL: gcc.dg/pr105911.c (test for excess errors)
>>>>>> FAIL: gcc.target/i386/avx512vl-stv-rotatedi-1.c scan-assembler-times 
>>>>>> vpro[lr]q 29
>>>>>> FAIL: gcc.target/i386/bt-7.c scan-assembler-not and[lq][ \t]
>>>>>> FAIL: gcc.target/i386/naked-4.c scan-assembler-not %[re]bp
>>>>>> FAIL: gcc.target/i386/pr107548-1.c scan-assembler-not addl
>>>>>> FAIL: gcc.target/i386/pr107548-1.c scan-assembler-times \tv?movd\t 3
>>>>>> FAIL: gcc.target/i386/pr107548-1.c scan-assembler-times v?paddd 6
>>>>>> FAIL: gcc.target/i386/pr107548-2.c scan-assembler-not \taddq\t
>>>>>> FAIL: gcc.target/i386/pr107548-2.c scan-assembler-times v?paddq 2
>>>>>> FAIL: gcc.target/i386/pr119171-1.c (test for excess errors)
>>>>>> FAIL: gcc.target/i386/pr57189.c scan-assembler-not movaps
>>>>>> FAIL: gcc.target/i386/pr57189.c scan-assembler-not movaps
>>>>>> FAIL: gcc.target/i386/pr78904-1b.c scan-assembler [ \t]andb
>>>>>> FAIL: gcc.target/i386/pr78904-1b.c scan-assembler [ \t]orb
>>>>>> FAIL: gcc.target/i386/pr78904-7b.c scan-assembler-not movzbl
>>>>>> FAIL: gcc.target/i386/pr78904-7b.c scan-assembler [ \t]orb
>>>>>> FAIL: gcc.target/i386/pr91188-2c.c scan-assembler [ \t]andw
>>>>>> 
>>>>>> Tested with glibc master branch at
>>>>>> 
>>>>>> commit ccdb68e829a31e4cda8339ea0d2dc3e51fb81ba5
>>>>>> Author: Samuel Thibault <samuel.thiba...@ens-lyon.org>
>>>>>> Date:   Sun Mar 2 15:16:45 2025 +0100
>>>>>> 
>>>>>>    htl: move pthread_once into libc
>>>>>> 
>>>>>> and built Linux kernel 6.13.5 on x86-64.
>>>>>> 
>>>>>>        PR target/119083
>>>>>>        * config/i386/i386.cc (ix86_class_likely_spilled_p): Remove CREG
>>>>>>        and BREG.
>>>>> 
>>>>> The commit message doesn't reflect what the patch does.
>>>>> 
>>>>> OTOH, this is a very delicate part of the compiler. You are risking RA
>>>>> failures, the risk/benefit ratio is very high, so I wouldn't touch it
>>>>> without clear benefits. Do you have a concrete example where declaring
>>>>> BREG as spilled hurts?
>>>>> 
>>>> 
>>>> I can find a testcase to show the improvement.  But I am not sure if
>>>> it is what you were asking for.  ix86_class_likely_spilled_p was
>>>> CLASS_LIKELY_SPILLED_P which was added by
>>>> 
>>>> commit f5316dfe88b8d1b8d3012c1f75349edf2ba1bdde
>>>> Author: Michael Meissner <meiss...@gcc.gnu.org>
>>>> Date:   Thu Sep 8 17:59:18 1994 +0000
>>>> 
>>>>    Add support for -mreg-alloc=<xxx>
>>>> 
>>>> This option is long gone and there is no test in GCC testsuite to show
>>>> that BX should be in ix86_class_likely_spilled_p.  On x86-64, BX is just
>>>> another callee-saved register, not different from R12.  On i386, BX is
>>>> used as the PIC register.  But today RA may pick a different register if
>>>> PLT isn't involved.  This patch gives RA a little bit more freedom.
>>> 
>>> In the past *decades* CLASS_LIKELY_SPILLED_P was repurposed to signal
>>> the compiler that some extra care is needed with listed classes. On
>>> i386 and x86_64 these include single register classes that represent
>>> "architectural" registers (registers with assigned role). The compiler
>>> does take care to not extend life times of CLASS_LIKELY_SPILLED_P
>>> classes too much to avoid reload failures in cases where instruction
>>> with C_L_S_P class (e.g. shifts with %cl register) is emitted between
>>> unrelated register def and use.
>> 
>> But there is no assigned role for RBX.
> 
> If no instruction uses "b" constraint and BREG class is not otherwise
> used for x86_64, then CLASS_LIKELY_SPILLED_P change is irrelevant for
> x86_64.

There might be a minor difference in instruction size when rbx is chosen over 
r9-15.  assuming reg alloc order prefers lower regs otherwise, of course.

Richard 

> 
> Uros.

Reply via email to