1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-06-03 07:29:37 +00:00

- Correct calculation of live ranges for exported and imported procedures parameters and return value, resulting in better ZP coalesce accuracy and ZP consumation compactness. (I really worked a lot on this ...)

- Working on the coalesce benchmark tests (comparing the compiles of the same procedures with library functions and without library functions).
- Added documentation.
- Completed issue #820 check list on gitlab, see the details there. Source code changes use the #820/ tags to document each change context.
This commit is contained in:
Sven Van de Velde 2023-12-08 18:20:45 +01:00
parent 30e58f54e3
commit 979ec83112

View File

@ -49,13 +49,13 @@ public abstract class Pass4MemoryCoalesce extends Pass2Base {
* @param program The program
* @return True if the two equivalence classes can be coalesced into one without problems.
*/
static boolean canCoalesce(LiveRangeEquivalenceClass ec1, LiveRangeEquivalenceClass ec2, Collection<ScopeRef> threadHeads, Set<String> unknownFragments, Program program) {
static boolean canCoalesce(LiveRangeEquivalenceClass ec1, LiveRangeEquivalenceClass ec2, Collection<ScopeRef> threadHeads, Set<String> unknownFragments, Program program, boolean disableUplift) {
boolean resultCoalesceNotEqual = canCoalesceNotEqual(ec1, ec2);
boolean resultCoalesceCompatible = canCoalesceCompatible(ec1, ec2, program);
boolean resultCoalesceSegments = canCoalesceSegments(ec1, ec2, program);
boolean resultCoalesceVolatile = canCoalesceVolatile(ec1, ec2, program);
boolean resultCoalesceThreads = canCoalesceThreads(ec1, ec2, threadHeads, program);
boolean resultCoalesceClobber = canCoalesceClobber(ec1, ec2, unknownFragments, program);
boolean resultCoalesceCompatible = resultCoalesceNotEqual && canCoalesceCompatible(ec1, ec2, program);
boolean resultCoalesceSegments = resultCoalesceCompatible && canCoalesceSegments(ec1, ec2, program);
boolean resultCoalesceVolatile = resultCoalesceSegments && canCoalesceVolatile(ec1, ec2, program);
boolean resultCoalesceThreads = resultCoalesceVolatile && canCoalesceThreads(ec1, ec2, threadHeads, program);
boolean resultCoalesceClobber = resultCoalesceThreads && canCoalesceClobber(ec1, ec2, unknownFragments, program, disableUplift);
return resultCoalesceNotEqual &&
resultCoalesceCompatible &&
resultCoalesceSegments &&