Issue 169588
Summary Win ARM64 prolog prevents use of packed unwind info
Labels new issue
Assignees
Reporter LouisLaf
    The prolog for Win ARM64 functions allocates stacks for the parameter home area and locals with a single SUB. While this sometimes results in 1 less instruction in the prolog, it does prevent taking advantage of the packed unwind data format.

For example, for this test case:
extern void bar(int*);
```
int foo(int x)
{
    int z;
 bar(&z);
    return x+z;
}
```
LLVM emits this prolog:
```
sub sp,sp,#0x20
str         x19,[sp,#0x10]
str lr,[sp,#0x18]

```
This results in an unpacked unwind info record.

Emitting this prolog instead:
```
sub         sp,sp,#0x10
stp x19,lr,[sp]
sub         sp,sp,#0x10
```
Would allow to take advantage of the packed unwind data format according to [https://learn.microsoft.com/en-us/cpp/build/arm64-exception-handling](url)

Using packed records reduce the size of the unwind information in rdata significantly and improves the speed of stack walking.

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to