- 22 Jul, 2015 1 commit
-
-
mtrofin authored
Unit tests for the live range conflict detection mechanism (CoalescedLiveRanges) in the Greedy Allocator. Consolidated conflict detection and traversal logic in CoalescedLiveRanges to avoid duplication in both code and testing. In addition, this change achieves better separation between CoalescedLiveRanges and other register allocator components, improving testability and maintainability. BUG= Review URL: https://codereview.chromium.org/1219063017 Cr-Commit-Position: refs/heads/master@{#29783}
-
- 29 Jun, 2015 1 commit
-
-
mtrofin authored
Separated core greedy allocator concepts, exposing the APIs we would want to continue working with. In particular, this change completely reworks CoalescedLiveRanges to reflect the fact that we expect more than one possible conflict, scrapping the initial design of the structure. Since this is a critical part of the design, this change may be thought of as a full rewrite of the algorithm. Reduced all heuristics to just 2 essential ones: split "somewhere", which we'll still need when all other heuristics fail; and spill. Introduced a simple primitive for splitting - at GapPosition::START. The goal is to use such primitives to quickly and reliably author heuristics. I expected this primitive to "just work" for any arbitrary instruction index within a live range - e.g. its middle. That's not the case, it seems to upset execution in certain scenarios. Restricting to either before/after use positions seems to work. I'm still investigating what the source of failures is in the case of "arbitrary instruction in the range" case. I intended to document the rationale and prove the soundness of always using START for splits, but I will postpone to after this last remaining issue is resolved. Review URL: https://codereview.chromium.org/1205173002 Cr-Commit-Position: refs/heads/master@{#29352}
-