[llvm-bugs] [Bug 49686] New: PEI incorrectly moves emergency stack slot on targets where the stack grows upwards
via llvm-bugs
llvm-bugs at lists.llvm.org
Mon Mar 22 11:01:12 PDT 2021
https://bugs.llvm.org/show_bug.cgi?id=49686
Bug ID: 49686
Summary: PEI incorrectly moves emergency stack slot on targets
where the stack grows upwards
Product: libraries
Version: trunk
Hardware: Other
OS: All
Status: NEW
Severity: normal
Priority: P
Component: Common Code Generator Code
Assignee: unassignedbugs at nondot.org
Reporter: sebastian.neubauer at amd.com
CC: llvm-bugs at lists.llvm.org
Created attachment 24680
--> https://bugs.llvm.org/attachment.cgi?id=24680&action=edit
Testcase that moves the spill slot offset to -8164
On systems, where the stack grows towards higher addresses (x86 and most others
grow towards lower addresses), the PrologEpilogInserter sometimes moves the
emergency spill slot to an offset, that is already occupied.
This behavior has been introduced in D89239, upwards growing stack were
probably an oversight.
Compiling the attached example leads to the following output:
$ llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -verify-machineinstrs
-run-pass=prologepilog pei-scavenge-vgpr-spill.mir -debug
...
FP requires fallback spill to $vgpr2:0
alloc FI(0) at SP[0]
alloc FI(1) at SP[4]
alloc FI(3) at SP[8]
alloc FI(4) at SP[12]
Adjusting emergency spill slots!
Adjusting offset of emergency spill slot #4 from 12 to -8164
Where -8164 is the new offset (I guess that is a bit off the stack frame :)).
Another example, replacing the stack definitions in pei-scavenge-vgpr-spill.mir
with the following:
stack:
- { id: 0, type: default, offset: 0, size: 8192, alignment: 64 }
- { id: 1, type: default, offset: 0, size: 4, alignment: 4 }
- { id: 2, type: default, offset: 0, size: 4, alignment: 4 }
- { id: 3, type: default, offset: 0, size: 4, alignment: 4 }
- { id: 4, type: default, offset: 0, size: 4, alignment: 4 }
- { id: 5, type: default, offset: 0, size: 4, alignment: 4 }
- { id: 6, type: default, offset: 0, size: 4, alignment: 4 }
- { id: 7, type: default, offset: 0, size: 4, alignment: 4 }
leads to
$ llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -verify-machineinstrs
-run-pass=prologepilog pei-scavenge-vgpr-spill.mir -debug
...
FP requires fallback spill to $vgpr2:0
alloc FI(0) at SP[0]
alloc FI(1) at SP[8192]
alloc FI(2) at SP[8196]
alloc FI(3) at SP[8200]
alloc FI(4) at SP[8204]
alloc FI(5) at SP[8208]
alloc FI(6) at SP[8212]
alloc FI(7) at SP[8216]
alloc FI(9) at SP[8220]
alloc FI(10) at SP[8224]
Adjusting emergency spill slots!
Adjusting offset of emergency spill slot #10 from 8224 to 8196
where the new offset of the emergency spill slot 8196 overlaps with FI(2).
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20210322/af7e5d6e/attachment.html>
More information about the llvm-bugs
mailing list