sgraenitz marked an inline comment as done.
sgraenitz added a comment.

I did a little investigation of the performance impact of not reusing the IPD. 
For this I used the unit test `PartialDemangleTest.TestNameChopping`, where I 
added an outer loop:

  TEST(PartialDemangleTest, TestNameChopping) {
    ...
    llvm::ItaniumPartialDemangler IPD;
    for (int i = 0; i < (1 << 20); ++i) { // 1M repetitions
      for (ChoppedName &N : NamesToTest) {
        EXPECT_FALSE(IPD.partialDemangle(N.Mangled));
        EXPECT_TRUE(IPD.isFunction());
        EXPECT_FALSE(IPD.isData());
        ...

Then I compared runtimes when having IPD outside vs. inside the two for loops. 
Over a series of test runs, the average inside-the-loops overhead is around 10% 
here. Just for interest I then raised the initial buffer size from 4k to 1M. 
This obviously has a much bigger impact on the runtimes:

          IPD outside     IPD inside      IPD inside (1MB)
  real  0m10.626s       0m11.769s       0m32.064s
  user  0m10.474s       0m11.601s       0m27.526s
  sys   0m0.082s        0m0.091s        0m4.394s

I think today's heap implementations are pretty good in allocating 4k chunks of 
memory. Nevertheless, in the next step we should try and avoid this overhead. 
This may require conceptual changes though. I send a comprehensive proposal to 
the dev list for discussion.


https://reviews.llvm.org/D49612



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

Reply via email to