... | ... | @@ -533,11 +533,11 @@ Add `testsuite/test/perf/join-points/` |
|
|
|
|
|
- Idea: heap check for join point done at call site, not in join point itself. (Does not work for recursive join points.)
|
|
|
|
|
|
- `CoreUnfold.sizeExpr`: SPJ claims: we should charge nothing for a join point binding or for its lambdas, or for its call. (Reason: a join-point binding generates no allocation.) Luke thinks that this was catastrophic in at least one case. Investigate.
|
|
|
- ~~`CoreUnfold.sizeExpr`: SPJ claims: we should charge nothing for a join point binding or for its lambdas, or for its call. (Reason: a join-point binding generates no allocation.) Luke thinks that this was catastrophic in at least one case. Investigate.~~ (done; *fully* implementing the suggested change is a big win)
|
|
|
|
|
|
- If we charge nothing for a join point binding and its lambdas, and 10\*n for a jump with n args (where a function call is 10\*(n+1)), nothing changes except that `boyer2` gets +7.5% allocations (due to a cascade from an unfortunate inlining) and `parser` gets -1.2%.
|
|
|
- If instead we charge nothing *at all* for a jump, `boyer2` still gets +7.5% but `puzzle` gets -21.1% (!). (Also `cryptarithm` gets -1.6%.)
|
|
|
- The latter behavior is presently enabled by the `-fcheap-join-points` flag for further investigation.
|
|
|
- Charging nothing for a jump, nothing for a join binding, *and* nothing for the lambdas makes `boyer2` break even again. Now it's an improvement nearly across the board; implemented.
|
|
|
|
|
|
- Do Late Lambda Lifting (followed by simplify) *after*`CoreTidy`.
|
|
|
|
... | ... | |