adamcz added inline comments.

================
Comment at: clang/lib/AST/ExprConstant.cpp:10617
+    // copying the data, which is wasteful.
+    for (const unsigned N : {1u, FinalSize}) {
+      unsigned OldElts = Value->getArrayInitializedElts();
----------------
kadircet wrote:
> maybe unroll the loop with a helper like `checkConstantInitialization` and 
> just call it for a single element first and perform copy & call again for the 
> whole thing ?
> 
> that way we can migrate performance issues later on (e.g. put a threshold on 
> `FinalSize`, don't perform the small step check if it's less than 100, since 
> copying might introduce a significant extra latency in such cases).
> 
> WDYT?
I thought of that and decided against it. I think the for loop gives us the 
same ability to change the steps - we can just replace {1u, FinalSize} with a 
vector that could have only one element if FinalSize is below some threshold.

Something like:
std::vector<unsigned> steps;
if (FinalSize < 100) steps = {FinalSize};
else steps = {1u, FinalSize};
for (const unsigned N : steps) {
[...]

The problem with helper is that it need sooo many arguments:
N, E, ArrayElt, CAT, Filler, HadZeroInit, Value and "this" (assuming it's free 
function). Seems like it would hurt readability quite a bit.

If you still think it should be a helper, let me know and I won't argue further 
- when it comes to readability the reviewer always knows better :-)


================
Comment at: clang/lib/AST/ExprConstant.cpp:10641
+          return false;
+        if (Info.EvalStatus.Diag && !Info.EvalStatus.Diag->empty() &&
+            !Info.keepEvaluatingAfterFailure())
----------------
kadircet wrote:
> i am a little worried about having "non fatal/error" diagnostics here. But 
> looking at the documentation of the field, intention seems to be making this 
> empty iff evaluation succeeded so far. so it's probably fine, but might be 
> worth introducing in a separate patch to make the revert easy, in case it 
> breaks things (+ this seems to be an orthogonal change to the rest)
Added a short comment.

I don't think splitting this into separate change makes sense. I'd rather just 
revert this one. Without this check the whole two-step process is mostly 
useless, so it's not a state we should be in - either revert the whole thing, 
or keep it.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D113120

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

Reply via email to