[llvm-dev] why is llvm.stacksave() necessary?
alex via llvm-dev
llvm-dev at lists.llvm.org
Tue Jul 25 04:17:48 PDT 2017
> Clang does this because clang intentionally generates IR naïvely and relies on LLVM optimisation passes to clean it up.
>
> In the case of C VLAs, the size of the alloca changes whenever the declaration goes into scope. By emitting a stack save and restore for d, clang doesn’t need to have different IR generating code for your example and for this one:
>
> void myfunc(void
> {
> for (int i=0 ; i<4; i++)
> {
> double d[i];
> doSomethingWith(d);
> }
> }
>
> In this case, each time that the loop is entered you will get a new d with a different size. Clang emits code that handles this case, and an early optimisation pass will remove the stack save and stack restore intrinsics if they’re not actually needed.
>
> David
Hi David,
good example, thank you.
This means than, when generating VLA's, one would need to check for the
'minimal' part which needs to be enclosed by safe/remove (in this
example the related calls need to enclose the inner part of the loop).
what would happen if stack safe/remove would be neglected?
at the end of the function everything should get cleaned-up - right?;
the only problem could be that one consumes much more stack than
necessary - not?
Thx
Alex
More information about the llvm-dev
mailing list