malaperle added a comment.

In https://reviews.llvm.org/D39050#1040501, @akyrtzi wrote:

> > That would be good. How would one go about asking Clang to generate this 
> > extra information? Would a Clang Plugin be suitable for this?
>
> That's an interesting idea that we could explore, but I don't have much 
> experience with that mechanism to comment on.
>
> > Only the lexer was needed to get the end of the token
>
> Ok, that's interesting, not sure why Xcode is so fast to highlight, did you 
> reuse same SourceManager/Lexer/buffers for occurrences from same file ? We'd 
> definitely add the end-loc if we cannot come up with a mechanism to highlight 
> fast enough without it.


I don't think Xcode is quite fast, it's about 10 times slower (although I'm not 
sure it really finished) than when I use my branch that has the end-loc. I 
would try end-locs in Xcode if I could, to compare :) So I don't really know 
where the bottleneck is in Xcode. Comparing oranges to oranges, it's 4 times 
slower without end-locs compared to with end-locs on my branch. I does use the 
same SourceManager for the 46K references and I verified that it uses the same 
buffers, etc.
I'll put the numbers here again for readability.

> For my little benchmark, I used the LLVM/Clang/Clangd code base which I 
> queried for all references of "std" (the namespace) which is around 46K 
> references in the index.
> 
> With end-loc in index: 3.45s on average (20 samples)
>  With end-loc computed on the fly: 11.33s on average (20 samples)
>  I also tried with Xcode but without too much success: it took about 30 secs 
> to reach 45K results and then carried on for a long time and hung (although I 
> didn't try to leave it for hours to see if it finished).



>> I think it's useful to highlight something even when the name is not there. 
>> For example in "MyClass o1, o2;" it feels natural that o1 and o2 would get 
>> highlighted.
> 
> To clarify, even with implicit references the start loc points to something. 
> In this case the implicit references can have start locs for the o1 and o2 
> identifiers and the end result for the UI will be the same (o1 and o2 get 
> highlighted) even without having end-locs for all references.

It's the same but slower. IMO, the trade off is not great. It's entirely 
subjective but I think 4-10 times slower in order to save an integer per 
occurrence is not worth it from my point of view.

> Even without end-loc, the start loc could point to MyStringRef and you could 
> highlight it.

(Same here, it's doable but faster if already in the index.)

>> It does? I can only seem to do a textual search.
> 
> The example I tried is the following. If you could file a bug report for the 
> test case that did not work as you expected it would be much appreciated!

Sure, I'll give that a try and isolate it as much as I can. BTW, does it work 
for you on the LLVM code base?


https://reviews.llvm.org/D39050



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

Reply via email to