[PATCH] D110257: [CFE][Codegen] Do not break the contiguity of static allocas.
Mahesha S via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 28 10:13:23 PDT 2021
hsmhsm added inline comments.
================
Comment at: clang/lib/CodeGen/CGExpr.cpp:151
+ // allocas.
+ Builder.CreateStore(Init, Var);
}
----------------
jdoerfert wrote:
> hsmhsm wrote:
> > jdoerfert wrote:
> > > I'm not even sure this is necessarily correct.
> > >
> > > How do we know the new store is not inside a loop and might write the value more than once, potentially overwriting a value set later?
> > >
> > > Aside from that (important) question, you need to update the documentation of the function. It doesn't correspond to the new semantics anymore.
> > >
> > I am not convinced with above comments -Because, this code neither changes the address nor the initializer (https://github.com/llvm/llvm-project/blob/main/clang/lib/CodeGen/CodeGenFunction.h#L2548), but only a place where the initialization happens.
> >
> > Further, as the documentation says, the initializer must be a constant or function argument (and surprisingly, I do not see any assertion about it). Hence, even if the initialization happens within the loop, loop invariant code motion pass should detect it.
> >
> > That said, if we think, it is better to keep the initialization within entry block, we can do it at the end of the block.
> What the initial value is is irrelevant. Arguing LICM should take care of it is also not helpful. Changing the location of the initialization is in itself a problem:
>
> Before:
> ```
> a = alloca
> a = 0; // init is in the entry block
> for (...) {
> use(a);
> a = a + 1;
> }
> ```
>
> After, potentially:
> ```
> a = alloca
> for (...) {
> a = 0; // init is now at the builder insertion point
> use(a);
> a = a + 1;
> }
> ```
Clarification - I am not trying to argue anything here with anybody, I am trying to defend myself, where I feel I am right as per my knowledge. If I realize that I am at false later, then I correct myself, but I am not arguing, and will never ever do.
Ok, I will try to fix it from the practical point of view.
But, I still think as follows - From theoretical/good programming/good front-end code generation perspective, initialization of something will never happen within construct like loop, otherwise initialization has no meaning at all.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D110257/new/
https://reviews.llvm.org/D110257
More information about the cfe-commits
mailing list