aaron.ballman added inline comments.

================
Comment at: lib/AST/DeclBase.cpp:854-859
+  auto I = Attrs.begin(), E = Attrs.end();
+  for (; I != E; ++I) {
+    if (!(*I)->isInherited())
+      break;
+  }
+  Attrs.insert(I, A);
----------------
Meinersbur wrote:
> aaron.ballman wrote:
> > The unfortunate part about this is that inherited attributes are fairly 
> > common, so this extra searching may happen more often than we'd like. I 
> > wonder how bad it would be to keep track of the location within the list 
> > where the inherited attributes start. Then again, the list of attributes 
> > should be relatively short in most cases, so this search isn't likely to be 
> > too expensive.
> > 
> > Having some performance measurements might help decide this, too.
> Timed clang-compilation using perf (`perf stat bin/clang 
> llvm/unittests/IR/InstructionsTest.cpp ...`), before this patch (r339574):
> ```
>        7647.415800      task-clock (msec)         #    0.983 CPUs utilized
>                289      context-switches          #    0.038 K/sec
>                 26      cpu-migrations            #    0.003 K/sec
>             86,494      page-faults               #    0.011 M/sec
>     19,068,741,863      cycles                    #    2.493 GHz
>     26,581,355,844      instructions              #    1.39  insn per cycle
>      6,242,394,037      branches                  #  816.275 M/sec
>        128,405,656      branch-misses             #    2.06% of all branches
> 
>        7.779848330 seconds time elapsed
> ```
> 
> With this patch:
> ```
>        7679.173467      task-clock (msec)         #    0.987 CPUs utilized
>                321      context-switches          #    0.042 K/sec
>                 23      cpu-migrations            #    0.003 K/sec
>             86,071      page-faults               #    0.011 M/sec
>     19,150,248,538      cycles                    #    2.494 GHz
>     26,667,465,697      instructions              #    1.39  insn per cycle
>      6,262,381,898      branches                  #  815.502 M/sec
>        128,527,669      branch-misses             #    2.05% of all branches
> 
>        7.779477815 seconds time elapsed
> ```
> (Intel(R) Xeon(R) Platinum 8180M CPU @ 2.50GHz)
> 
> The vector insert operation is also be `O(n)`. If the number of non-inherited 
> is expected to be smaller, we can instead search for the first inherited 
> attribute starting at the end of the vector. If we want to avoid the `O(n)` 
> entirely, we need one list for inherited and another for non-inherited 
> attributes.
Thank you for gathering this data -- those perf numbers look reasonable to me. 
We can refactor for performance later if it ever turns up on the hot path.


Repository:
  rC Clang

https://reviews.llvm.org/D50214



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

Reply via email to