rjmccall added a comment.

In https://reviews.llvm.org/D27680#630192, @ahatanak wrote:

> Ah, good idea. That sounds like a much simpler and less invasive approach. I 
> agree that the performance impact would probably be small, and if it turns 
> out to have a significant impact, we can reduce the number of times we move 
> the lifetime.start (without moving it retroactively) by checking whether a 
> label was seen.

Oh, good idea, that's a great way to heuristically get the performance back if 
we decide it's important.

Comment at: lib/CodeGen/CGDecl.cpp:917
+      if (!InsertPt)
+        Builder.SetInsertPoint(BB, BB->begin());
+      // If InsertPt is a terminator, insert it before InsertPt.
BB->begin() is not necessarily a legal place to insert a call.  This could 
happen if e.g. a scope was unconditionally entered after a statement including 
a ternary expression.

Also, I think lexical scopes don't necessarily have an active basic block upon 
entry, because their entry can be unreachable.  This happens most importantly 
with e.g. switch statements, but can also happen with goto or simply with 
unreachable code (which it's still important to not crash on).


cfe-commits mailing list

Reply via email to