[PATCH] D63396: [WinEH] Allocate space in funclets stack to save XMM CSRs
Reid Kleckner via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 20 15:06:26 PDT 2019
rnk added a comment.
This broke this C++ code:
int getcsr();
void usecsrs(double, int, int, int, int, int, int, int, int);
double getxmm();
struct HasDtor {
int x = 42;
~HasDtor();
};
int foo() {
int v1 = getcsr();
int v2 = getcsr();
int v3 = getcsr();
int v4 = getcsr();
int v5 = getcsr();
int v6 = getcsr();
int v7 = getcsr();
int v8 = getcsr();
double f1 = getxmm();
HasDtor o;
usecsrs(f1, v1, v2, v3, v4, v5, v6, v7, v8);
usecsrs(f1, v1, v2, v3, v4, v5, v6, v7, v8);
usecsrs(f1, v1, v2, v3, v4, v5, v6, v7, v8);
usecsrs(f1, v1, v2, v3, v4, v5, v6, v7, v8);
return v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8;
}
The movaps instruction in the funclet epilogue does not match the prologue:
$ ninja -j900 clang && clang -S t.cpp -o - -O1 | grep 'movaps.*rsp\|dtor'
ninja: no work to do.
.def "?dtor$5@?0??foo@@YAHXZ at 4HA";
"?dtor$5@?0??foo@@YAHXZ at 4HA":
.seh_proc "?dtor$5@?0??foo@@YAHXZ at 4HA"
movaps %xmm6, 64(%rsp)
movaps 72(%rsp), %xmm6
.long "?dtor$5@?0??foo@@YAHXZ at 4HA"@IMGREL # Action
The code crashes in the epilogue.
I fixed a different issue in rL368631 <https://reviews.llvm.org/rL368631>, but I think this time I will revert this.
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D63396/new/
https://reviews.llvm.org/D63396
More information about the llvm-commits
mailing list