<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/154379>154379</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] regalloc fails for leaf function requiring 15 registers with `"frame-pointer"="non-leaf"`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
omern1
</td>
</tr>
</table>
<pre>
Reproducer: https://clang.godbolt.org/z/3veoajz7P
The inline assembly in the IR in the repro requires 14 registers + `ecx` which should be available given that this is a leaf function.
This was introduced in https://github.com/llvm/llvm-project/pull/146638.
The patch uses `TargetPointer::FramePointerIsReserved` to check whether the `rbp` should be reserved. `TargetPointer::FramePointerIsReserved` returns true even if `"frame-pointer"="non-leaf"` but doesn't check whether the MachineFunction in question is actually non-leaf.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUk0FvozAQhX-NuYyKwMQEDhxSRUg9rFRVPezVmAG7dezUYyfb_vqV00TdSnvpCcvg5_fefEgiszrEgYl7JvaFTFH7MPgDBlcXk5_fhyc8Bj8nhYE1O9AxHok1O8ZHxkdlpVvL1c-Tt7H0YWV8_GB8bE7o5cvH9pFVO1btnjWCcdY4BEmEh8m-g3EQNcLD020V8j0Q8C2ZgAT1BgKuhiIGAsbvgbUVqj-sreCsjdJA2ic7w4QgT9JYOVmE1Zwwq8kIURsCQyDBolxgSU5F4115c2QIzpLAuPiZbs4-vqdbTdRpKpU_MD5ae7o97o7Bv6CKjI_HZC3jY71p26Yrv9IeZVQaEiFl388yrBgfvXHx0iJrdmOQB7zuPNATEoYTzjld9KA0qlc4a4waw6Uc1lZhOubXX7HD9VD54ysCxhQcQQwJAXNlZskijPMlH7o7XnU4Z82ece68u8s15o22gilFmD2SY3wb_-P2l1TaOByvnedm3xLS55pAqpikte9wky2LeWjmvullgUO9FaLltej6Qg-iqzrZikV03Yzbfuq2qHhVVVPdtBvR8cIMvOKi6uq-bpt-05eykdtJLNjObc873rFNhQdpbJknlxEtDFHCoRabZtsXVk5o6YI_55NUr-hm1ux-d23OKvZFGC4jn9JKbFNZQ5G-pKKJ9vLv5O_FPhMrrfUKFmksweLDd_queBu3Qi3-4ftsov7BAIoU7PBjVi-5KdP6Gf008L8BAAD__7PKUCw">