jdoerfert added inline comments.

================
Comment at: clang/lib/CodeGen/CGExpr.cpp:151
+  // allocas.
+  Builder.CreateStore(Init, Var);
 }
----------------
hsmhsm wrote:
> 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.
> 
> [...] initialization of something will never happen within construct like 
> loop, otherwise initialization has no meaning at all.

Why would we not create a new temporary allocas inside of a loop? There is 
nothing in any of the APIs or descriptions that would indicate you could not 
create a temporary alloca and initialize it while you are generating code in a 
loop. I cannot see why initialization would me meaningless given that it was 
inserted in the entry block prior to this change.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D110257/new/

https://reviews.llvm.org/D110257

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to