https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117838

            Bug ID: 117838
           Summary: IRA issues: The higher cost variable a is spilled for
                    the lower cost variable conflict_a in
                    improve_allocatuion()
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lili.cui at intel dot com
  Target Milestone: ---

Created attachment 59740
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59740&action=edit
testcase-dump-patch

testcase :         sqlite3-ok.i (in attachment, It is extracted from SQLite)
gcc version:       Fri Oct 18 2024 (aaa855fac0c7003d823b48fe4cc4b9ded9331a2b)
compile options : -std=c18 -m64 -S -o sqlite3.s -Ofast -march=x86-64-v3
sqlite3-ok.i -da

Function: sqlite3VdbeExec
variable a : pOp -> a5(r806, l0) cost=30495
variable conflict_a : nDepth -> a2737(r1214,l0) cost 1102


Pushing a5(r806,l0)(potential spill: pri=26, cost=30495)
Pushing a2737(r1214,l0: a2656(r1214,l2: a1251(r1214,l17)))(cost 1102)
Popping a5(r806,l0)  --         assign reg 40
Popping a2737(r1214,l0: a2656(r1214,l2: a1251(r1214,l17))) -- assign reg 38

Spilling a5r806 for a2737r1214
Assigning 40 to a2737r1214
a5(r806,l0)  -- assign memory

It was introduced by the following commit:

commit 037cc0b4a6646cc86549247a3590215ebd5c4c43
Author: Richard Sandiford <richard.sandif...@arm.com>
Date:   Mon Jan 10 14:47:09 2022 +0000

    ira: Handle "soft" conflicts between cap and non-cap allocnos


I created a patch (in attachment) to drop the issue code, there is no
regression on graviton 3 and SPR with speccpu2017.

Reply via email to