Register allocation consists therefore of choosing where to store the variables at runtime, i.e. inside or outside registers. If the variable is to be stored in registers, then the allocator needs to determine in which register(s) this variable will be stored. Eventually, another challenge is to determine the duration for which a variable should stay at the same location.
A register allocator, disregarding the chosen allocation strategy, can rely on a set of core actions to address these challenges. These actions can be gathered in several different categories:
Move insertion
This action consists of increasing the number of move instructions between registers, i.e. make a variable live in different registers during its lifetime, instead of one. This occurs in the split live range approach.
Spilling
This action consists of storing a variable into memory instead of registers.
Assignment
This action consists of assigning a register to a variable.
Coalescing
This action consists of limiting the number of moves between registers, thus limiting the total number of instructions. For instance, by identifying a variable live across different methods, and storing it into one register during its whole lifetime.
Many register allocation approaches optimize for one or more specific categories of actions.
Register allocation raises several problems that can be tackled (or avoided) by different register allocation approaches. Three of the most common problems are identified as follows:
Aliasing
In some architectures, assigning a value to one register can affect the value of another: this is called aliasing. For example, the Graph-coloring allocation is the predominant approach to solve register allocation. It was first proposed by Chaitin et al.
In this approach, nodes in the graph represent live ranges (variables, temporaries, virtual/symbolic registers) that are candidates for register allocation. Edges connect live ranges that interfere, i.e., live ranges that are simultaneously live at at least one program point. Register allocation then reduces to the graph coloring problem in which colors (registers) are assigned to the nodes such that two nodes connected by an edge do not receive the same color.
The graph-coloring allocation has three major drawbacks. First, it relies on graph-coloring, which is an NP-complete problem, to decide which variables are spilled. Finding a minimal coloring graph is indeed an NP-complete problem. Second, unless live-range splitting is used, evicted variables are spilled everywhere: store instructions are inserted as early as possible, i.e., just after variable definitions; load instructions are respectively inserted late, just before variable use. Third, a variable that is not spilled is kept in the same register throughout its whole lifetime.
On the other hand, a single register name may appear in multiple register classes, where a class is a set of register names that are interchangeable in a particular role. Then, multiple register names may be aliases for a single hardware register.
Finally, graph coloring is an aggressive technique for allocating registers, but is computationally expensive due to its use of the interference graph, which can have a worst-case size that is quadratic in the number of live ranges.
The traditional formulation of graph-coloring register allocation implicitly assumes a single bank of non-overlapping general-purpose registers and does not handle irregular architectural features like overlapping registers pairs, special purpose registers and multiple register banks.
One later improvement of Chaitin-style graph-coloring approach was found by Briggs et al.: it is called conservative coalescing. This improvement adds a criterion to decide when two live ranges can be merged. Mainly, in addition to the non-interfering requirements, two variables can only be coalesced if their merging will not cause further spilling. Briggs et al. introduces a second improvement to Chaitin's works which is biased coloring. Biased coloring tries to assign the same color in the graph-coloring to live range that are copy related.
Linear scan is another global register allocation approach. It was first proposed by Poletto et al. in 1999. In this approach, the code is not turned into a graph. Instead, all the variables are linearly scanned to determine their live range, represented as an interval. Once the live ranges of all variables have been figured out, the intervals are traversed chronologically. Although this traversal could help identifying variables whose live ranges interfere, no interference graph is being built and the variables are allocated in a greedy way.
The motivation for this approach is speed; not in terms of execution time of the generated code, but in terms of time spent in code generation. Typically, the standard graph coloring approaches produce quality code, but have a significant overhead, the used graph coloring algorithm having a quadratic cost. Owing to this feature, linear scan is the approach currently used in several JIT compilers, like the Hotspot client compiler, V8, Jikes RVM, and the Android Runtime (ART). The Hotspot server compiler uses graph coloring for its superior code.
However, the linear scan presents two major drawbacks. First, due to its greedy aspect, it does not take lifetime holes into account, i.e. "ranges where the value of the variable is not needed". Besides, a spilled variable will stay spilled for its entire lifetime.
Many other research works followed up on the Poletto's linear scan algorithm. Traub et al., for instance, proposed an algorithm called second-chance binpacking aiming at generating code of better quality. In this approach, spilled variables get the opportunity to be stored later in a register by using a different heuristic from the one used in the standard linear scan algorithm. Instead of using live intervals, the algorithm relies on live ranges, meaning that if a range needs to be spilled, it is not necessary to spill all the other ranges corresponding to this variable.
In the context of register allocation, coalescing is the act of merging variable-to-variable move operations by allocating those two variables to the same location. The coalescing operation takes place after the interference graph is built. Once two nodes have been coalesced, they must get the same color and be allocated to the same register, once the copy operation becomes unnecessary.
Doing coalescing might have both positive and negative impacts on the colorability of the interference graph. For example, one negative impact that coalescing could have on graph inference colorability is when two nodes are coalesced, as the result node will have a union of the edges of those being coalesced.
A positive impact of coalescing on inference graph colorability is, for example, when a node interferes with both nodes being coalesced, the degree of the node is reduced by one which leads to improving the overall colorability of the interference graph.
Some other register allocation approaches do not limit to one technique to optimize register's use. Cavazos et al., for instance, proposed a solution where it is possible to use both the linear scan and the graph coloring algorithms. In this approach, the choice between one or the other solution is determined dynamically: first, a machine learning algorithm is used "offline", that is to say not at runtime, to build a heuristic function that determines which allocation algorithm needs to be used. The heuristic function is then used at runtime; in light of the code behavior, the allocator can then choose between one of the two available algorithms.
Trace register allocation is a recent approach developed by Eisl et al. This technique handles the allocation locally: it relies on dynamic profiling data to determine which branches will be the most frequently used in a given control flow graph. It then infers a set of "traces" (i.e. code segments) in which the merge point is ignored in favor of the most used branch. Each trace is then independently processed by the allocator. This approach can be considered as hybrid because it is possible to use different register allocation algorithms between the different traces.
Split allocation is another register allocation technique that combines different approaches, usually considered as opposite. For instance, the hybrid allocation technique can be considered as split because the first heuristic building stage is performed offline, and the heuristic use is performed online. In the same fashion, B. Diouf et al. proposed an allocation technique relying both on offline and online behaviors, namely static and dynamic compilation. During the offline stage, an optimal spill set is first gathered using Integer Linear Programming. Then, live ranges are annotated using the compressAnnotation algorithm which relies on the previously identified optimal spill set. Register allocation is performed afterwards during the online stage, based on the data collected in the offline phase.
In 2007, Bouchez et al. suggested as well to split the register allocation in different stages, having one stage dedicated to spilling, and one dedicated to coloring and coalescing.
Several metrics have been used to assess the performance of one register allocation technique against the other. Register allocation has typically to deal with a trade-off between code quality, i.e. code that executes quickly, and analysis overhead, i.e. the time spent determining analyzing the source code to generate code with optimized register allocation. From this perspective, execution time of the generated code and time spent in liveness analysis are relevant metrics to compare the different techniques.
Once relevant metrics have been chosen, the code on which the metrics will be applied should be available and relevant to the problem, either by reflecting the behavior of real-world application, or by being relevant to the particular problem the algorithm wants to address. The more recent articles about register allocation uses especially the Dacapo benchmark suite.
Ditzel & McLellan 1982, p. 48. - Ditzel, David R.; McLellan, H. R. (1982). "Register allocation for free". Proceedings of the first international symposium on Architectural support for programming languages and operating systems - ASPLOS-I. pp. 48–56. doi:10.1145/800050.801825. ISBN 978-0897910668. S2CID 2812379. https://doi.org/10.1145%2F800050.801825
Runeson & Nyström 2003, p. 242. - Runeson, Johan; Nyström, Sven-Olof (2003). "Retargetable Graph-Coloring Register Allocation for Irregular Architectures". Software and Compilers for Embedded Systems. Lecture Notes in Computer Science. Vol. 2826. pp. 240–254. CiteSeerX 10.1.1.6.6186. doi:10.1007/978-3-540-39920-9_17. ISBN 978-3-540-20145-8. ISSN 0302-9743. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.6.6186
Eisl et al. 2016, p. 14:1. - Eisl, Josef; Grimmer, Matthias; Simon, Doug; Würthinger, Thomas; Mössenböck, Hanspeter (2016). "Trace-based Register Allocation in a JIT Compiler". Proceedings of the 13th International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools - PPPJ '16. pp. 1–11. doi:10.1145/2972206.2972211. ISBN 9781450341356. S2CID 31845919. http://epub.jku.at/doi/10.1145/2972206.2972211
Chaitin et al. 1981, p. 47. - Chaitin, Gregory J.; Auslander, Marc A.; Chandra, Ashok K.; Cocke, John; Hopkins, Martin E.; Markstein, Peter W. (1981). "Register allocation via coloring". Computer Languages. 6 (1): 47–57. doi:10.1016/0096-0551(81)90048-5. ISSN 0096-0551. https://doi.org/10.1016%2F0096-0551%2881%2990048-5
Eisl et al. 2016, p. 1. - Eisl, Josef; Grimmer, Matthias; Simon, Doug; Würthinger, Thomas; Mössenböck, Hanspeter (2016). "Trace-based Register Allocation in a JIT Compiler". Proceedings of the 13th International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools - PPPJ '16. pp. 1–11. doi:10.1145/2972206.2972211. ISBN 9781450341356. S2CID 31845919. http://epub.jku.at/doi/10.1145/2972206.2972211
"Latency Comparison Numbers in computer/network". blog.morizyun.com. 6 January 2018. Retrieved 2019-01-08. https://blog.morizyun.com/computer-science/basic-latency-comparison-numbers.html
Braun & Hack 2009, p. 174. - Braun, Matthias; Hack, Sebastian (2009). "Register Spilling and Live-Range Splitting for SSA-Form Programs". Compiler Construction. Lecture Notes in Computer Science. Vol. 5501. pp. 174–189. CiteSeerX 10.1.1.219.5318. doi:10.1007/978-3-642-00722-4_13. ISBN 978-3-642-00721-7. ISSN 0302-9743. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.219.5318
Koes & Goldstein 2009, p. 21. - Koes, David Ryan; Goldstein, Seth Copen (2009). "Register Allocation Deconstructed". Written at Nice, France. Proceedings of the 12th International Workshop on Software and Compilers for Embedded Systems. SCOPES '09. New York, NY, USA: ACM. pp. 21–30. ISBN 978-1-60558-696-0. http://dl.acm.org/citation.cfm?id=1543820.1543824
Bouchez, Darte & Rastello 2007b, p. 103. - Bouchez, Florent; Darte, Alain; Rastello, Fabrice (2007b). "On the complexity of spill everywhere under SSA form". ACM SIGPLAN Notices. 42 (7): 103–114. arXiv:0710.3642. doi:10.1145/1273444.1254782. ISSN 0362-1340. https://arxiv.org/abs/0710.3642
Colombet, Brandner & Darte 2011, p. 26. - Colombet, Quentin; Brandner, Florian; Darte, Alain (2011). "Studying optimal spilling in the light of SSA". Proceedings of the 14th international conference on Compilers, architectures and synthesis for embedded systems - CASES '11. p. 25. doi:10.1145/2038698.2038706. ISBN 9781450307130. S2CID 8296742. https://doi.org/10.1145%2F2038698.2038706
Bouchez, Darte & Rastello 2007b, p. 103. - Bouchez, Florent; Darte, Alain; Rastello, Fabrice (2007b). "On the complexity of spill everywhere under SSA form". ACM SIGPLAN Notices. 42 (7): 103–114. arXiv:0710.3642. doi:10.1145/1273444.1254782. ISSN 0362-1340. https://arxiv.org/abs/0710.3642
"Intel® 64 and IA-32 Architectures Software Developer's Manual, Section 3.4.1" (PDF). Intel. May 2019. Archived from the original (PDF) on 2019-05-25. https://web.archive.org/web/20190525125151/https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf
"32-bit PowerPC function calling conventions". https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/LowLevelABI/100-32-bit_PowerPC_Function_Calling_Conventions/32bitPowerPC.html
Bouchez, Darte & Rastello 2006, p. 4. - Bouchez, Florent; Darte, Alain; Rastello, Fabrice (2006). "Register Allocation: What Does the NP-Completeness Proof of Chaitin et al. Really Prove? Or Revisiting Register Allocation: Why and How". Register allocation: what does the NP-Completeness proof of Chaitin et al. really prove?. Lecture Notes in Computer Science. Vol. 4382. pp. 2–14. doi:10.1007/978-3-540-72521-3_21. ISBN 978-3-540-72520-6. https://doi.org/10.1007%2F978-3-540-72521-3_21
Horwitz et al. 1966, p. 43. - Horwitz, L. P.; Karp, R. M.; Miller, R. E.; Winograd, S. (1966). "Index Register Allocation". Journal of the ACM. 13 (1): 43–61. doi:10.1145/321312.321317. ISSN 0004-5411. S2CID 14560597. https://doi.org/10.1145%2F321312.321317
Farach & Liberatore 1998, p. 566. - Farach, Martin; Liberatore, Vincenzo (1998). "On Local Register Allocation". Written at San Francisco, California, USA. Proceedings of the Ninth Annual ACM-SIAM Symposium on Discrete Algorithms. SODA '98. Philadelphia, PA, USA: Society for Industrial and Applied Mathematics. pp. 564–573. ISBN 0-89871-410-9. https://archive.org/details/proceedingsofnin0000acms/page/564
Eisl et al. 2017, p. 92. - Eisl, Josef; Marr, Stefan; Würthinger, Thomas; Mössenböck, Hanspeter (2017). "Trace Register Allocation Policies" (PDF). Proceedings of the 14th International Conference on Managed Languages and Runtimes - Man Lang 2017. pp. 92–104. doi:10.1145/3132190.3132209. ISBN 9781450353403. S2CID 1195601. http://kar.kent.ac.uk/63807/1/manlang17-eisl-et-al-trace-register-allocation-policies.pdf
Eisl, Leopoldseder & Mössenböck 2018, p. 1. - Eisl, Josef; Leopoldseder, David; Mössenböck, Hanspeter (2018). "Parallel trace register allocation". Proceedings of the 15th International Conference on Managed Languages & Runtimes - Man Lang '18. pp. 1–7. doi:10.1145/3237009.3237010. ISBN 9781450364249. S2CID 52137887. https://resolver.obvsg.at/urn:nbn:at:at-ubl:3-271
Briggs, Cooper & Torczon 1992, p. 316. - Briggs, Preston; Cooper, Keith D.; Torczon, Linda (1992). "Rematerialization". ACM SIGPLAN Notices. 27 (7): 311–321. doi:10.1145/143103.143143. ISSN 0362-1340. https://doi.org/10.1145%2F143103.143143
Chaitin et al. 1981, p. 47. - Chaitin, Gregory J.; Auslander, Marc A.; Chandra, Ashok K.; Cocke, John; Hopkins, Martin E.; Markstein, Peter W. (1981). "Register allocation via coloring". Computer Languages. 6 (1): 47–57. doi:10.1016/0096-0551(81)90048-5. ISSN 0096-0551. https://doi.org/10.1016%2F0096-0551%2881%2990048-5
Poletto & Sarkar 1999, p. 896. - Poletto, Massimiliano; Sarkar, Vivek (1999). "Linear scan register allocation". ACM Transactions on Programming Languages and Systems. 21 (5): 895–913. CiteSeerX 10.1.1.27.2462. doi:10.1145/330249.330250. ISSN 0164-0925. S2CID 18180752. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.2462
Runeson & Nyström 2003, p. 241. - Runeson, Johan; Nyström, Sven-Olof (2003). "Retargetable Graph-Coloring Register Allocation for Irregular Architectures". Software and Compilers for Embedded Systems. Lecture Notes in Computer Science. Vol. 2826. pp. 240–254. CiteSeerX 10.1.1.6.6186. doi:10.1007/978-3-540-39920-9_17. ISBN 978-3-540-20145-8. ISSN 0302-9743. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.6.6186
Briggs, Cooper & Torczon 1992, p. 316. - Briggs, Preston; Cooper, Keith D.; Torczon, Linda (1992). "Rematerialization". ACM SIGPLAN Notices. 27 (7): 311–321. doi:10.1145/143103.143143. ISSN 0362-1340. https://doi.org/10.1145%2F143103.143143
Book 1975, p. 618–619. - Book, Ronald V. (December 1975). "Karp Richard M.. Reducibility among combinatorial problems. Complexity of computer computations, Proceedings of a Symposium on the Complexity of Computer Computations, held March 20-22, 1972, at the IBM Thomas J. Watson Center, Yorktown Heights, New York, edited by Miller Raymond E. and Thatcher James W., Plenum Press, New York and London 1972, pp. 85–103". The Journal of Symbolic Logic. 40 (4): 618–619. doi:10.2307/2271828. ISSN 0022-4812. JSTOR 2271828. https://doi.org/10.2307%2F2271828
Colombet, Brandner & Darte 2011, p. 1. - Colombet, Quentin; Brandner, Florian; Darte, Alain (2011). "Studying optimal spilling in the light of SSA". Proceedings of the 14th international conference on Compilers, architectures and synthesis for embedded systems - CASES '11. p. 25. doi:10.1145/2038698.2038706. ISBN 9781450307130. S2CID 8296742. https://doi.org/10.1145%2F2038698.2038706
Smith, Ramsey & Holloway 2004, p. 277. - Smith, Michael D.; Ramsey, Norman; Holloway, Glenn (2004). "A generalized algorithm for graph-coloring register allocation". ACM SIGPLAN Notices. 39 (6): 277. CiteSeerX 10.1.1.71.9532. doi:10.1145/996893.996875. ISSN 0362-1340. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.71.9532
Cavazos, Moss & O’Boyle 2006, p. 124. - Cavazos, John; Moss, J. Eliot B.; O’Boyle, Michael F. P. (2006). "Hybrid Optimizations: Which Optimization Algorithm to Use?". Compiler Construction. Lecture Notes in Computer Science. Vol. 3923. pp. 124–138. doi:10.1007/11688839_12. ISBN 978-3-540-33050-9. ISSN 0302-9743. https://doi.org/10.1007%2F11688839_12
Runeson & Nyström 2003, p. 240. - Runeson, Johan; Nyström, Sven-Olof (2003). "Retargetable Graph-Coloring Register Allocation for Irregular Architectures". Software and Compilers for Embedded Systems. Lecture Notes in Computer Science. Vol. 2826. pp. 240–254. CiteSeerX 10.1.1.6.6186. doi:10.1007/978-3-540-39920-9_17. ISBN 978-3-540-20145-8. ISSN 0302-9743. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.6.6186
Briggs, Cooper & Torczon 1992, p. 316. - Briggs, Preston; Cooper, Keith D.; Torczon, Linda (1992). "Rematerialization". ACM SIGPLAN Notices. 27 (7): 311–321. doi:10.1145/143103.143143. ISSN 0362-1340. https://doi.org/10.1145%2F143103.143143
Poletto & Sarkar 1999, p. 895. - Poletto, Massimiliano; Sarkar, Vivek (1999). "Linear scan register allocation". ACM Transactions on Programming Languages and Systems. 21 (5): 895–913. CiteSeerX 10.1.1.27.2462. doi:10.1145/330249.330250. ISSN 0164-0925. S2CID 18180752. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.2462
Cavazos, Moss & O’Boyle 2006, p. 124. - Cavazos, John; Moss, J. Eliot B.; O’Boyle, Michael F. P. (2006). "Hybrid Optimizations: Which Optimization Algorithm to Use?". Compiler Construction. Lecture Notes in Computer Science. Vol. 3923. pp. 124–138. doi:10.1007/11688839_12. ISBN 978-3-540-33050-9. ISSN 0302-9743. https://doi.org/10.1007%2F11688839_12
Poletto & Sarkar 1999, p. 902. - Poletto, Massimiliano; Sarkar, Vivek (1999). "Linear scan register allocation". ACM Transactions on Programming Languages and Systems. 21 (5): 895–913. CiteSeerX 10.1.1.27.2462. doi:10.1145/330249.330250. ISSN 0164-0925. S2CID 18180752. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.2462
Wimmer & Mössenböck 2005, p. 132. - Wimmer, Christian; Mössenböck, Hanspeter (2005). "Optimized interval splitting in a linear scan register allocator". Proceedings of the 1st ACM/USENIX international conference on Virtual execution environments - VEE '05. p. 132. CiteSeerX 10.1.1.394.4054. doi:10.1145/1064979.1064998. ISBN 978-1595930477. S2CID 494490. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.394.4054
Johansson & Sagonas 2002, p. 102. - Johansson, Erik; Sagonas, Konstantinos (2002). "Linear Scan Register Allocation in a High-Performance Erlang Compiler". Practical Aspects of Declarative Languages. Lecture Notes in Computer Science. Vol. 2257. pp. 101–119. doi:10.1007/3-540-45587-6_8. ISBN 978-3-540-43092-6. ISSN 0302-9743. https://doi.org/10.1007%2F3-540-45587-6_8
Eisl et al. 2016, p. 1. - Eisl, Josef; Grimmer, Matthias; Simon, Doug; Würthinger, Thomas; Mössenböck, Hanspeter (2016). "Trace-based Register Allocation in a JIT Compiler". Proceedings of the 13th International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools - PPPJ '16. pp. 1–11. doi:10.1145/2972206.2972211. ISBN 9781450341356. S2CID 31845919. http://epub.jku.at/doi/10.1145/2972206.2972211
The Evolution of ART - Google I/O 2016. Google. 25 May 2016. Event occurs at 3m47s. https://www.youtube.com/watch?v=fwMM6g7wpQ8
Paleczny, Vick & Click 2001, p. 1. - Paleczny, Michael; Vick, Christopher; Click, Cliff (2001). "The Java HotSpot Server Compiler". Proceedings of the Java Virtual Machine Research and Technology Symposium (JVM01). Monterey, California, USA. pp. 1–12. CiteSeerX 10.1.1.106.1919. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.106.1919
Poletto & Sarkar 1999, p. 899. - Poletto, Massimiliano; Sarkar, Vivek (1999). "Linear scan register allocation". ACM Transactions on Programming Languages and Systems. 21 (5): 895–913. CiteSeerX 10.1.1.27.2462. doi:10.1145/330249.330250. ISSN 0164-0925. S2CID 18180752. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.2462
Eisl et al. 2016, p. 2. - Eisl, Josef; Grimmer, Matthias; Simon, Doug; Würthinger, Thomas; Mössenböck, Hanspeter (2016). "Trace-based Register Allocation in a JIT Compiler". Proceedings of the 13th International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools - PPPJ '16. pp. 1–11. doi:10.1145/2972206.2972211. ISBN 9781450341356. S2CID 31845919. http://epub.jku.at/doi/10.1145/2972206.2972211
Traub, Holloway & Smith 1998, p. 143. - Traub, Omri; Holloway, Glenn; Smith, Michael D. (1998). "Quality and speed in linear-scan register allocation". ACM SIGPLAN Notices. 33 (5): 142–151. CiteSeerX 10.1.1.52.8730. doi:10.1145/277652.277714. ISSN 0362-1340. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.52.8730
Traub, Holloway & Smith 1998, p. 141. - Traub, Omri; Holloway, Glenn; Smith, Michael D. (1998). "Quality and speed in linear-scan register allocation". ACM SIGPLAN Notices. 33 (5): 142–151. CiteSeerX 10.1.1.52.8730. doi:10.1145/277652.277714. ISSN 0362-1340. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.52.8730
Poletto & Sarkar 1999, p. 897. - Poletto, Massimiliano; Sarkar, Vivek (1999). "Linear scan register allocation". ACM Transactions on Programming Languages and Systems. 21 (5): 895–913. CiteSeerX 10.1.1.27.2462. doi:10.1145/330249.330250. ISSN 0164-0925. S2CID 18180752. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.2462
Wimmer & Franz 2010, p. 170. - Wimmer, Christian; Franz, Michael (2010). "Linear scan register allocation on SSA form". Proceedings of the 8th annual IEEE/ ACM international symposium on Code generation and optimization - CGO '10. p. 170. CiteSeerX 10.1.1.162.2590. doi:10.1145/1772954.1772979. ISBN 9781605586359. S2CID 1820765. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.162.2590
Mössenböck & Pfeiffer 2002, p. 234. - Mössenböck, Hanspeter; Pfeiffer, Michael (2002). "Linear Scan Register Allocation in the Context of SSA Form and Register Constraints". Compiler Construction. Lecture Notes in Computer Science. Vol. 2304. pp. 229–246. doi:10.1007/3-540-45937-5_17. ISBN 978-3-540-43369-9. ISSN 0302-9743. https://doi.org/10.1007%2F3-540-45937-5_17
Mössenböck & Pfeiffer 2002, p. 233. - Mössenböck, Hanspeter; Pfeiffer, Michael (2002). "Linear Scan Register Allocation in the Context of SSA Form and Register Constraints". Compiler Construction. Lecture Notes in Computer Science. Vol. 2304. pp. 229–246. doi:10.1007/3-540-45937-5_17. ISBN 978-3-540-43369-9. ISSN 0302-9743. https://doi.org/10.1007%2F3-540-45937-5_17
Mössenböck & Pfeiffer 2002, p. 229. - Mössenböck, Hanspeter; Pfeiffer, Michael (2002). "Linear Scan Register Allocation in the Context of SSA Form and Register Constraints". Compiler Construction. Lecture Notes in Computer Science. Vol. 2304. pp. 229–246. doi:10.1007/3-540-45937-5_17. ISBN 978-3-540-43369-9. ISSN 0302-9743. https://doi.org/10.1007%2F3-540-45937-5_17
Rogers 2020. - Rogers, Ian (2020). "Efficient global register allocation". arXiv:2011.05608 [cs.PL]. https://arxiv.org/abs/2011.05608
Chaitin 1982, p. 90. - Chaitin, G. J. (1982). "Register allocation & spilling via graph coloring". Proceedings of the 1982 SIGPLAN symposium on Compiler construction - SIGPLAN '82. pp. 98–101. doi:10.1145/800230.806984. ISBN 978-0897910743. S2CID 16872867. https://doi.org/10.1145%2F800230.806984
Bouchez, Darte & Rastello 2007b, p. 103. - Bouchez, Florent; Darte, Alain; Rastello, Fabrice (2007b). "On the complexity of spill everywhere under SSA form". ACM SIGPLAN Notices. 42 (7): 103–114. arXiv:0710.3642. doi:10.1145/1273444.1254782. ISSN 0362-1340. https://arxiv.org/abs/0710.3642
Bouchez, Darte & Rastello 2007b, p. 103. - Bouchez, Florent; Darte, Alain; Rastello, Fabrice (2007b). "On the complexity of spill everywhere under SSA form". ACM SIGPLAN Notices. 42 (7): 103–114. arXiv:0710.3642. doi:10.1145/1273444.1254782. ISSN 0362-1340. https://arxiv.org/abs/0710.3642
Ahn & Paek 2009, p. 7. - Ahn, Minwook; Paek, Yunheung (2009). "Register coalescing techniques for heterogeneous register architecture with copy sifting". ACM Transactions on Embedded Computing Systems. 8 (2): 1–37. CiteSeerX 10.1.1.615.5767. doi:10.1145/1457255.1457263. ISSN 1539-9087. S2CID 14143277. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.615.5767
Park & Moon 2004, p. 736. - Park, Jinpyo; Moon, Soo-Mook (2004). "Optimistic register coalescing". ACM Transactions on Programming Languages and Systems. 26 (4): 735–765. CiteSeerX 10.1.1.33.9438. doi:10.1145/1011508.1011512. ISSN 0164-0925. S2CID 15969885. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.33.9438
Chaitin 1982, p. 99. - Chaitin, G. J. (1982). "Register allocation & spilling via graph coloring". Proceedings of the 1982 SIGPLAN symposium on Compiler construction - SIGPLAN '82. pp. 98–101. doi:10.1145/800230.806984. ISBN 978-0897910743. S2CID 16872867. https://doi.org/10.1145%2F800230.806984
Park & Moon 2004, p. 738. - Park, Jinpyo; Moon, Soo-Mook (2004). "Optimistic register coalescing". ACM Transactions on Programming Languages and Systems. 26 (4): 735–765. CiteSeerX 10.1.1.33.9438. doi:10.1145/1011508.1011512. ISSN 0164-0925. S2CID 15969885. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.33.9438
Ahn & Paek 2009, p. 7. - Ahn, Minwook; Paek, Yunheung (2009). "Register coalescing techniques for heterogeneous register architecture with copy sifting". ACM Transactions on Embedded Computing Systems. 8 (2): 1–37. CiteSeerX 10.1.1.615.5767. doi:10.1145/1457255.1457263. ISSN 1539-9087. S2CID 14143277. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.615.5767
Briggs, Cooper & Torczon 1994, p. 433. - Briggs, Preston; Cooper, Keith D.; Torczon, Linda (1994). "Improvements to graph coloring register allocation". ACM Transactions on Programming Languages and Systems. 16 (3): 428–455. CiteSeerX 10.1.1.23.253. doi:10.1145/177492.177575. ISSN 0164-0925. S2CID 6571479. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.23.253
George & Appel 1996, p. 212. - George, Lal; Appel, Andrew W. (1996). "Iterated register coalescing". ACM Transactions on Programming Languages and Systems. 18 (3): 300–324. doi:10.1145/229542.229546. ISSN 0164-0925. S2CID 12281734. https://doi.org/10.1145%2F229542.229546
Park & Moon 2004, p. 741. - Park, Jinpyo; Moon, Soo-Mook (2004). "Optimistic register coalescing". ACM Transactions on Programming Languages and Systems. 26 (4): 735–765. CiteSeerX 10.1.1.33.9438. doi:10.1145/1011508.1011512. ISSN 0164-0925. S2CID 15969885. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.33.9438
Eisl et al. 2017, p. 11. - Eisl, Josef; Marr, Stefan; Würthinger, Thomas; Mössenböck, Hanspeter (2017). "Trace Register Allocation Policies" (PDF). Proceedings of the 14th International Conference on Managed Languages and Runtimes - Man Lang 2017. pp. 92–104. doi:10.1145/3132190.3132209. ISBN 9781450353403. S2CID 1195601. http://kar.kent.ac.uk/63807/1/manlang17-eisl-et-al-trace-register-allocation-policies.pdf
Cavazos, Moss & O’Boyle 2006, p. 124-127. - Cavazos, John; Moss, J. Eliot B.; O’Boyle, Michael F. P. (2006). "Hybrid Optimizations: Which Optimization Algorithm to Use?". Compiler Construction. Lecture Notes in Computer Science. Vol. 3923. pp. 124–138. doi:10.1007/11688839_12. ISBN 978-3-540-33050-9. ISSN 0302-9743. https://doi.org/10.1007%2F11688839_12
Eisl et al. 2016, p. 14:1. - Eisl, Josef; Grimmer, Matthias; Simon, Doug; Würthinger, Thomas; Mössenböck, Hanspeter (2016). "Trace-based Register Allocation in a JIT Compiler". Proceedings of the 13th International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools - PPPJ '16. pp. 1–11. doi:10.1145/2972206.2972211. ISBN 9781450341356. S2CID 31845919. http://epub.jku.at/doi/10.1145/2972206.2972211
Eisl et al. 2016, p. 1. - Eisl, Josef; Grimmer, Matthias; Simon, Doug; Würthinger, Thomas; Mössenböck, Hanspeter (2016). "Trace-based Register Allocation in a JIT Compiler". Proceedings of the 13th International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools - PPPJ '16. pp. 1–11. doi:10.1145/2972206.2972211. ISBN 9781450341356. S2CID 31845919. http://epub.jku.at/doi/10.1145/2972206.2972211
Eisl et al. 2016, p. 4. - Eisl, Josef; Grimmer, Matthias; Simon, Doug; Würthinger, Thomas; Mössenböck, Hanspeter (2016). "Trace-based Register Allocation in a JIT Compiler". Proceedings of the 13th International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools - PPPJ '16. pp. 1–11. doi:10.1145/2972206.2972211. ISBN 9781450341356. S2CID 31845919. http://epub.jku.at/doi/10.1145/2972206.2972211
Cavazos, Moss & O’Boyle 2006, p. 124. - Cavazos, John; Moss, J. Eliot B.; O’Boyle, Michael F. P. (2006). "Hybrid Optimizations: Which Optimization Algorithm to Use?". Compiler Construction. Lecture Notes in Computer Science. Vol. 3923. pp. 124–138. doi:10.1007/11688839_12. ISBN 978-3-540-33050-9. ISSN 0302-9743. https://doi.org/10.1007%2F11688839_12
Diouf et al. 2010, p. 66. - Diouf, Boubacar; Cohen, Albert; Rastello, Fabrice; Cavazos, John (2010). "Split Register Allocation: Linear Complexity Without the Performance Penalty". High Performance Embedded Architectures and Compilers. Lecture Notes in Computer Science. Vol. 5952. pp. 66–80. CiteSeerX 10.1.1.229.3988. doi:10.1007/978-3-642-11515-8_7. ISBN 978-3-642-11514-1. ISSN 0302-9743. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.229.3988
Cohen & Rohou 2010, p. 1. - Cohen, Albert; Rohou, Erven (2010). "Processor virtualization and split compilation for heterogeneous multicore embedded systems". Proceedings of the 47th Design Automation Conference on - DAC '10. p. 102. CiteSeerX 10.1.1.470.9701. doi:10.1145/1837274.1837303. ISBN 9781450300025. S2CID 14314078. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.470.9701
Diouf et al. 2010, p. 72. - Diouf, Boubacar; Cohen, Albert; Rastello, Fabrice; Cavazos, John (2010). "Split Register Allocation: Linear Complexity Without the Performance Penalty". High Performance Embedded Architectures and Compilers. Lecture Notes in Computer Science. Vol. 5952. pp. 66–80. CiteSeerX 10.1.1.229.3988. doi:10.1007/978-3-642-11515-8_7. ISBN 978-3-642-11514-1. ISSN 0302-9743. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.229.3988
Bouchez, Darte & Rastello 2007a, p. 1. - Bouchez, Florent; Darte, Alain; Rastello, Fabrice (2007a). "On the Complexity of Register Coalescing". International Symposium on Code Generation and Optimization (CGO'07). pp. 102–114. CiteSeerX 10.1.1.101.6801. doi:10.1109/CGO.2007.26. ISBN 978-0-7695-2764-2. S2CID 7683867. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.101.6801
Poletto & Sarkar 1999, p. 901-910. - Poletto, Massimiliano; Sarkar, Vivek (1999). "Linear scan register allocation". ACM Transactions on Programming Languages and Systems. 21 (5): 895–913. CiteSeerX 10.1.1.27.2462. doi:10.1145/330249.330250. ISSN 0164-0925. S2CID 18180752. https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.2462
Blackburn et al. 2006, p. 169. - Blackburn, Stephen M.; Guyer, Samuel Z.; Hirzel, Martin; Hosking, Antony; Jump, Maria; Lee, Han; Eliot, J.; Moss, B.; Phansalkar, Aashish; Stefanović, Darko; VanDrunen, Thomas; Garner, Robin; von Dincklage, Daniel; Wiedermann, Ben; Hoffmann, Chris; Khang, Asjad M.; McKinley, Kathryn S.; Bentzur, Rotem; Diwan, Amer; Feinberg, Daniel; Frampton, Daniel (2006). "The DaCapo benchmarks". Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications - OOPSLA '06. p. 169. doi:10.1145/1167473.1167488. hdl:1885/33723. ISBN 978-1595933485. S2CID 9255051. https://doi.org/10.1145%2F1167473.1167488
Flajolet, Raoult & Vuillemin 1979. - Flajolet, P.; Raoult, J. C.; Vuillemin, J. (1979), "The number of registers required for evaluating arithmetic expressions", Theoretical Computer Science, 9 (1): 99–125, doi:10.1016/0304-3975(79)90009-4 https://doi.org/10.1016%2F0304-3975%2879%2990009-4