dblaikie added a comment.

In D119409#3398483 <https://reviews.llvm.org/D119409#3398483>, @ChuanqiXu wrote:

> In D119409#3396690 <https://reviews.llvm.org/D119409#3396690>, @dblaikie 
> wrote:
>
>> Not even necessarily then - if you have code like protobufs (large amounts 
>> of autogenerated code, much of which you might never call) - or even just 
>> libraries where you only use a subset of their features - then you might 
>> have more code generated with an inline-function-homing
>
> From the perspective of code size, it would be larger in 
> inline-function-homing strategies in cases you described. But I guess it 
> wouldn't hurt in compilation speed, is it?

Depending on optimizations, some amount of compilation time is proportional to 
code size.

> For the consideration of code size, I think we could mitigate the problem by 
> thinLTO. (Although we couldn't solve the problem completely since thinLTO 
> couldn't help for *.o, *.a and *.so files.)

Yep. But with ThinLTO we wouldn't need to produce `available_externally` 
definitions anyway, since ThinLTO can cross-object import anyway.

>> Possibly - there's still the possibility that even without any importing (& 
>> just homing into the module object file) that it'll cost more than it 
>> benefits due to inline functions that are never called.
>
> Yeah, I met the situation before. In a simple case, that the time spent on 
> the deserialization looks more than the time we saved. By from my experience 
> (my experience is not complete though), this kind of cases is relatively 
> small.
>
> ---
>
> @dblaikie given that the talk involves further optimization, which is beyond 
> the scope of current patch. Would you like to accept this one?

I don't have enough context for the current state of this patch - might be 
useful to post a summary of the current state?



================
Comment at: clang/test/CodeGenCXX/static-variable-in-module.cpp:2-8
+// RUN: mkdir %t
+// RUN: echo "struct S { S(); };" >> %t/foo.h
+// RUN: echo "static S s = S();" >> %t/foo.h
+// RUN: %clang -std=c++20 -I%t %s -S -emit-llvm -o - | FileCheck %s
+module;
+#include "foo.h"
+export module m;
----------------
urnathan wrote:
> ChuanqiXu wrote:
> > ChuanqiXu wrote:
> > > urnathan wrote:
> > > > rather than generate a foo.h file, why not (ab)use the preprocessor 
> > > > with internal line directives?
> > > > 
> > > > ```
> > > > module;
> > > > # 3 __FILE__ 1 // use the next physical line number here (and below)
> > > > struct S { S(); };
> > > > static S s = S();
> > > > # 6 "" 2
> > > > export module m;
> > > > ...
> > > > ```
> > > Yeah, the form is useful when we need to add expected-* diagnostic 
> > > message to GMF. But I feel it is a little bit hacker. I guess the form 
> > > mimics looks like user more wouldn't be worse personally.
> > Ok, I admit this is really helpful and time saving : ) (Now all my new test 
> > cases would be wrote in this form)
> The other thing you can do, which I've seen elsewhere, is an Input 
> subdirectory and put the #include file there.  I prefer the direct encoding, 
> 'cos that's less indirection when trying to understand the testcase :)
Yeah, I'd be in favor of inline file directives rather than catting source code 
into other files - that source code may get unwieldy if it needs to be more 
complicated than a small struct declaration (already catting 3 lines is a bit 
awkward) and doesn't get syntax highlighting, etc.


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

https://reviews.llvm.org/D119409

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

Reply via email to