[PATCH] D107882: BPF: Enable frontend constant folding for VLA size
Yonghong Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 1 18:06:31 PDT 2021
yonghong-song added a comment.
I checked EmitAutoVarAlloca(). It emits the llvm.stacksave() due to
// If the type is variably-modified, emit all the VLA sizes for it.
if (Ty->isVariablyModifiedType())
EmitVariablyModifiedType(Ty);
Here, in order not to generate llvm.stacksave(), we need to evaluate the array size expression for `Ty`.
But it is probably not a good idea to re-evaluate `Ty` during code generation phase. If we really want to evaluate, we should evaluate earlier during semantic analysis phase like this patch.
Another solution is to implement pruning llvm.stacksave/stackrestore in backend. Currently InstCombine phase tries to remove some adjacent stacksave() and stackrestore() instrinsics. We could try to enhance InstCombine to handle more complicated cases, or considering this may be just a BPF use case (which doesn't support dynamic memory allocation), we can implement a bpf backend IR phase to remove it.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D107882/new/
https://reviews.llvm.org/D107882
More information about the llvm-commits
mailing list