[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];
> 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.
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?
More information about the llvm-dev