nikic added a subscriber: aeubanks.
nikic added a comment.

In D110745#3128719 <https://reviews.llvm.org/D110745#3128719>, @reames wrote:

> @nikic ping on previous question.  It's been a month, and this has been 
> LGTMed.  Without response, I plan to land this.

Sorry, I did do some measurements but forgot to report back. The only run-time 
workload I can easily measure are rustc check builds, where I observed 
regressions ranging between -0.6% and +4.8% across different projects (the 
-0.6% "regressions" indicate an improvement, i.e. that some deref-based 
optimization happens to be non-profitable). I'm not sure that helps you much 
apart from saying that yes indeed, this does have some impact on rust code. 
It's not catastrophic (though caveat emptor: impact on "benchmarky" code may 
well be higher), but it's also avoidable.

> In D110745#3038848 <https://reviews.llvm.org/D110745#3038848>, @xbolva00 
> wrote:
>
>> This really needs to be properly benchmarked.
>
> This has been benchmarked on every workload I care about, and shows no 
> interesting regressions.   Unfortunately, those are all non-public Java 
> workloads,

I think something important to mention here is that the Java (i.e. GC'd 
language) case is also the only where we don't really expect a regression, 
because it has good modeling under the proposed patch: GC'd pointers can't be 
freed during the optimization pipeline (until statepoint lowering), so they're 
simply not affected by this change. For that reason I don't think the fact that 
Java workloads don't see regressions really tells us anything about how this 
would behave for other frontends, which are mostly not GC'd.

> On the C/C++ side, I don't have a ready environment in which to run anything 
> representative.  From the semantic change, I wouldn't expect C++ to show much 
> difference, and besides, this is fixing a long standing fairly major 
> correctness issue.  If you have particular suites you care about, please run 
> them and share results.

Maybe @asbirlea or @aeubanks can run some benchmarks? I would expect 
regressions for C++, because `nofree` inference is very limited (e.g. won't be 
inferred for pretty much any code using growing STL containers). Though at 
least in the C++ case regressions may be somewhat justified, in that this fixes 
a correctness issue in some cases.

> At this point, I strongly lean towards committing and letting regressions be 
> reported.  We might revert, or we might simply fix forward depending on what 
> comes up

I'm not sure what you're expecting from that. At least as far as Rust is 
concerned, the problem here seems pretty well-understood to me: You are 
dropping (without replacement) the ability to specify that an argument is 
dereferenceable within a function. I'm perfectly happy with the change in 
default behavior, all I want is a way to get the old one back. I don't think 
that having an example of that in "real" code is going to add any useful 
information.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D110745

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

Reply via email to