skip to main content
research-article
Open Access

Combinatorial Register Allocation and Instruction Scheduling

Published:02 July 2019Publication History
Skip Abstract Section

Abstract

This article introduces a combinatorial optimization approach to register allocation and instruction scheduling, two central compiler problems. Combinatorial optimization has the potential to solve these problems optimally and to exploit processor-specific features readily. Our approach is the first to leverage this potential in practice: it captures the complete set of program transformations used in state-of-the-art compilers, scales to medium-sized functions of up to 1,000 instructions, and generates executable code. This level of practicality is reached by using constraint programming, a particularly suitable combinatorial optimization technique. Unison, the implementation of our approach, is open source, used in industry, and integrated with the LLVM toolchain.

An extensive evaluation confirms that Unison generates better code than LLVM while scaling to medium-sized functions. The evaluation uses systematically selected benchmarks from MediaBench and SPEC CPU2006 and different processor architectures (Hexagon, ARM, MIPS). Mean estimated speedup ranges from 1.1% to 10% and mean code size reduction ranges from 1.3% to 3.8% for the different architectures. A significant part of this improvement is due to the integrated nature of the approach. Executing the generated code on Hexagon confirms that the estimated speedup results in actual speedup. Given a fixed time limit, Unison solves optimally functions of up to 946 instructions, nearly an order of magnitude larger than previous approaches.

The results show that our combinatorial approach can be applied in practice to trade compilation time for code quality beyond the usual compiler optimization levels, identify improvement opportunities in heuristic algorithms, and fully exploit processor-specific features.

References

  1. Abderrahmane Aggoun and Nicolas Beldiceanu. 1993. Extending chip in order to solve complex scheduling and placement problems. Math. Comput. Model. 17, 7 (Apr. 1993), 57--73. Google ScholarGoogle ScholarDigital LibraryDigital Library
  2. Andrew W. Appel. 1998. SSA is functional programming. ACM SIGPLAN Not. 33, 4 (Apr. 1998), 17--20. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Andrew W. Appel and Lal George. 2001. Optimal spilling for CISC machines with few registers. In Proceedings of the Symposium on Programming Language Design and Implementation. ACM, 243--253. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. ARM. 2007. ARM1156T2F-S Technical Reference Manual. ARM. Rev. r0p4. Retrieved from http://infocenter.arm.com/help/topic/com.arm.doc.ddi0290g/DDI0290G_arm1156t2fs_r0p4_trm.pdf.Google ScholarGoogle Scholar
  5. John Aycock and R. Nigel Horspool. 2000. Simple generation of static single-assignment form. In Proceedings of the International Conference on Compiler Construction, Vol. 1781. Springer-Verlag, 110--124. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. Philippe Baptiste, Claude Le Pape, and Wim Nuijten. 2006. Constraint-based scheduling and planning. In Handbook of Constraint Programming, Francesca Rossi, Peter van Beek, and Toby Walsh (Eds.). Elsevier, 759--797.Google ScholarGoogle Scholar
  7. Gergö Barany and Andreas Krall. 2013. Optimal and heuristic global code motion for minimal spilling. In Proceedings of the International Conference on Compiler Construction (LNCS), Vol. 7791. Springer-Verlag, 21--40. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Rajkishore Barik, Christian Grothoff, Rahul Gupta, Vinayaka Pandit, and Raghavendra Udupa. 2007. Optimal bitwise register allocation using integer linear programming. In Proceedings of the International Workshop on Languages and Compilers for Parallel Computing. Springer-Verlag, 267--282. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. Steven Bashford and Rainer Leupers. 1999. Phase-coupled mapping of data flow graphs to irregular data paths. Design Auto. Embed. Syst. 4 (Mar. 1999), 119--165. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Nicolas Beldiceanu and Evelyne Contejean. 1994. Introducing global constraints in CHIP. Math. Comput. Model. 20, 12 (Dec. 1994), 97--123. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Christian Bessiere. 2006. Constraint propagation. In Handbook of Constraint Programming, Francesca Rossi, Peter van Beek, and Toby Walsh (Eds.). Elsevier, 27--81.Google ScholarGoogle Scholar
  12. Armin Biere, Marijn Heule, Hans van Maaren, and Toby Walsh (Eds.). 2009. Handbook of Satisfiability. IOS Press.Google ScholarGoogle Scholar
  13. Edward H. Bowman. 1959. The schedule-sequencing problem. Op. Res. 7, 5 (Sept. 1959), 621--624. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. Preston Briggs, Keith D. Cooper, and Linda Torczon. 1992. Rematerialization. In Proceedings of the Symposium on Programming Language Design and Implementation. ACM, 311--321. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. Sebastian Buchwald, Denis Lohner, and Sebastian Ullrich. 2016. Verified construction of static single assignment form. In Proceedings of the International Conference on Compiler Construction. ACM, 67--76. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Mats Carlsson and Roberto Castañeda Lozano. 2018. Unison’s source code: x86 fork. Retrieved from: https://github.com/matsc-at-sics-se/unison.Google ScholarGoogle Scholar
  17. Roberto Castañeda Lozano. 2016. Tool demonstration: Register allocation and instruction scheduling in Unison. Retrieved from: https://youtu.be/t4g2AjSfMX8.Google ScholarGoogle Scholar
  18. Roberto Castañeda Lozano. 2017. Register allocation and instruction scheduling in Unison. Retrieved from: https://youtu.be/kx64V74Mba0.Google ScholarGoogle Scholar
  19. Roberto Castañeda Lozano. 2017. The Unison manual. Retrieved from: https://unison-code.github.io/doc/manual.pdf.Google ScholarGoogle Scholar
  20. Roberto Castañeda Lozano, Mats Carlsson, Frej Drejhammar, and Christian Schulte. 2012. Constraint-based register allocation and instruction scheduling. In Proceedings of the Conference on Principles and Practice of Constraint Programming (LNCS), Vol. 7514. Springer-Verlag, 750--766.Google ScholarGoogle ScholarCross RefCross Ref
  21. Roberto Castañeda Lozano, Mats Carlsson, Gabriel Hjort Blindell, and Christian Schulte. 2014. Combinatorial spill code optimization and ultimate coalescing. In Proceedings of the Conference on Languages, Compilers, Tools and Theory for Embedded Systems. ACM, 23--32. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. Roberto Castañeda Lozano, Mats Carlsson, Gabriel Hjort Blindell, and Christian Schulte. 2016. Register allocation and instruction scheduling in Unison. In Proceedings of the International Conference on Compiler Construction. ACM, 263--264. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Roberto Castañeda Lozano, Mats Carlsson, Gabriel Hjort Blindell, and Christian Schulte. 2018. Unison website. Retrieved from: https://unison-code.github.io.Google ScholarGoogle Scholar
  24. Roberto Castañeda Lozano and Christian Schulte. 2014. Survey on Combinatorial Register Allocation and Instruction Scheduling. Technical Report. SCALE, KTH Royal Institute of Technology 8 Swedish Institute of Computer Science. Retrieved from: https://arxiv.org/abs/1409.7628.Google ScholarGoogle Scholar
  25. Gregory J. Chaitin, Marc A. Auslander, Ashok K. Chandra, John Cocke, Martin E. Hopkins, and Peter W. Markstein. 1981. Register allocation via coloring. Comput. Lang. 6, 1 (1981), 47--57. Google ScholarGoogle ScholarCross RefCross Ref
  26. Chia-Ming Chang, Chien-Ming Chen, and Chung-Ta King. 1997. Using integer linear programming for instruction scheduling and register allocation in multi-issue processors. Comput. Math. Applic. 34, 9 (Nov. 1997), 1--14.Google ScholarGoogle ScholarCross RefCross Ref
  27. Frederick Chow. 1988. Minimizing register usage penalty at procedure calls. In Proceedings of the Symposium on Programming Language Design and Implementation. ACM, 85--94. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. Frederick Chow and John Hennessy. 1984. Register allocation by priority-based coloring. SIGPLAN Not. 19, 6 (June 1984), 222--232. Google ScholarGoogle ScholarDigital LibraryDigital Library
  29. Geoffrey G. Chu. 2011. Improving Combinatorial Optimization. Ph.D. Dissertation. The University of Melbourne, Australia.Google ScholarGoogle Scholar
  30. Lucian Codrescu, Willie Anderson, Suresh Venkumanhanti, Mao Zeng, Erich Plondke, Chris Koob, Ajay Ingle, Charles Tabony, and Rick Maule. 2014. Hexagon DSP: An architecture optimized for mobile multimedia and communications. IEEE Micro 34, 2 (Mar. 2014), 34--43.Google ScholarGoogle ScholarCross RefCross Ref
  31. Quentin Colombet, Florian Brandner, and Alain Darte. 2015. Studying optimal spilling in the light of SSA. ACM Trans. Arch. Code Opt. 11, 4 (Jan. 2015), 1--26. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Keith Cooper and Linda Torczon. 2012. Engineering a Compiler (2nd ed.). Morgan Kaufmann.Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. 2009. Introduction to Algorithms (3rd ed.). MIT Press. Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. Ron Cytron, Jeanne Ferrante, Barry K. Rosen, Mark N. Wegman, and F. Kenneth Zadeck. 1991. Efficiently computing static single assignment form and the control dependence graph. ACM Trans. Program. Lang. Syst. 13, 4 (Oct. 1991), 451--490. Google ScholarGoogle ScholarDigital LibraryDigital Library
  35. Dietmar Ebner, Bernhard Scholz, and Andreas Krall. 2009. Progressive spill code placement. In Proceedings of the Conference on Compilers, Architecture, and Synthesis for Embedded Systems. ACM, 77--86. Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. Tobias J. K. Edler von Koch, Igor Böhm, and Björn Franke. 2010. Integrated instruction selection and register allocation for compact code generation exploiting freeform mixing of 16- and 32-bit instructions. In Proceedings of the International Symposium on Code Generation and Optimization. ACM, 180--189. Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. Mattias Eriksson and Christoph W. Kessler. 2012. Integrated code generation for loops. ACM Trans. Embed. Comput. Syst. 11S, 1 (June 2012), 1--24. Google ScholarGoogle ScholarDigital LibraryDigital Library
  38. Heiko Falk, Norman Schmitz, and Florian Schmoll. 2011. WCET-aware register allocation based on integer-linear programming. In Proceedings of the Euromicro Conference on Real-Time Systems. IEEE, 13--22. Google ScholarGoogle ScholarDigital LibraryDigital Library
  39. Joseph A. Fisher. 1983. Very long instruction word architectures and the ELI-512. In Proceedings of the International Symposium on Computer Architecture. ACM, 140--150. Google ScholarGoogle ScholarDigital LibraryDigital Library
  40. Graeme Gange, Jorge A. Navas, Peter Schachte, Harald Søndergaard, and Peter J. Stuckey. 2015. Horn clauses as an intermediate representation for program analysis and transformation. In Proceedings of the International Workshop on Theory and Practice of Logic Programming. Cambridge University Press, 526--542.Google ScholarGoogle Scholar
  41. Catherine H. Gebotys. 1997. An efficient model for DSP code generation: Performance, code size, estimated energy. In Proceedings of the International Symposium on Systems Synthesis. IEEE, 41--47. Google ScholarGoogle ScholarDigital LibraryDigital Library
  42. Gecode Team. 2018. Gecode: Generic constraint development environment. Retrieved from: https://www.gecode.org.Google ScholarGoogle Scholar
  43. Carla P. Gomes and Bart Selman. 2001. Algorithm portfolios. Artific. Intell. 126, 1 (Feb. 2001), 43--62. Google ScholarGoogle ScholarDigital LibraryDigital Library
  44. Carla P. Gomes, Bart Selman, Nuno Crato, and Henry Kautz. 2000. Heavy-tailed phenomena in satisfiability and constraint satisfaction problems. J. Auto. Reason. 24, 1--2 (Feb. 2000), 67--100. Google ScholarGoogle ScholarDigital LibraryDigital Library
  45. James R. Goodman and Wei-Chung Hsu. 1988. Code scheduling and register allocation in large basic blocks. In Proceedings of the International Conference on Supercomputing. ACM, 442--452. Google ScholarGoogle ScholarDigital LibraryDigital Library
  46. David W. Goodwin and Kent Wilken. 1996. Optimal and near-optimal global register allocations using 0-1 integer programming. Softw.: Pract. Exper. 26, 8 (Aug. 1996), 929--965. Google ScholarGoogle ScholarDigital LibraryDigital Library
  47. R. Govindarajan. 2007. Instruction scheduling. In The Compiler Design Handbook (2nd ed.). CRC.Google ScholarGoogle Scholar
  48. Sebastian Hack, Daniel Grund, and Gerhard Goos. 2006. Register allocation for programs in SSA-form. In Proceedings of the International Conference on Compiler Construction (LNCS), Vol. 3923. Springer-Verlag, 247--262. Google ScholarGoogle ScholarDigital LibraryDigital Library
  49. John L. Hennessy and David A. Patterson. 2011. Computer Architecture: A Quantitative Approach (5th ed.). Morgan Kaufmann. Google ScholarGoogle ScholarDigital LibraryDigital Library
  50. Gabriel Hjort Blindell. 2016. Instruction Selection: Principles, Methods, and Applications. Springer-Verlag. Google ScholarGoogle ScholarDigital LibraryDigital Library
  51. Gabriel Hjort Blindell. 2018. Universal Instruction Selection. Ph.D. Dissertation. KTH Royal Institute of Technology, Sweden.Google ScholarGoogle Scholar
  52. Intel. 2017. Intel 64 and IA-32 Architectures Software Developer Manuals. Intel. 325462-065US. Retrieved from https://software.intel.com/en-us/articles/intel-sdm.Google ScholarGoogle Scholar
  53. Cliff Young Joseph A. Fisher, Paolo Faraboschi. 2005. Embedded Computing. Elsevier.Google ScholarGoogle Scholar
  54. Daniel Kästner. 2001. PROPAN: A retargetable system for postpass optimisations and analyses. In Proceedings of the Conference on Languages, Compilers, Tools and Theory for Embedded Systems (LNCS), Vol. 1985. Springer-Verlag, 63--80. Google ScholarGoogle ScholarDigital LibraryDigital Library
  55. Christoph W. Kessler. 2010. Compiling for VLIW DSPs. In Handbook of Signal Processing Systems. Springer-Verlag, 603--638.Google ScholarGoogle Scholar
  56. Christoph W. Kessler and Andrzej Bednarski. 2006. Optimal integrated code generation for VLIW architectures. Concur. Computat.: Pract. Exper. 18, 11 (2006), 1353--1390. Google ScholarGoogle ScholarDigital LibraryDigital Library
  57. David Ryan Koes and Seth Copen Goldstein. 2006. A global progressive register allocator. In Proceedings of the Symposium on Programming Language Design and Implementation. ACM, 204--215. Google ScholarGoogle ScholarDigital LibraryDigital Library
  58. David Ryan Koes and Seth Copen Goldstein. 2009. Register allocation deconstructed. In Proceedings of the International Workshop on Software and Compilers for Embedded Systems. ACM, 21--30. Google ScholarGoogle ScholarCross RefCross Ref
  59. Chris Lattner and Vikram Adve. 2004. LLVM: A compilation framework for lifelong program analysis 8 transformation. In Proceedings of the International Symposium on Code Generation and Optimization. IEEE, 75--88. Google ScholarGoogle ScholarDigital LibraryDigital Library
  60. Yat Chiu Law and Jimmy H. M. Lee. 2004. Global constraints for integer and set value precedence. In Proceedings of the International Conference on Principles and Practice of Constraint Programming (LNCS), Vol. 3258. Springer-Verlag, 362--376. Google ScholarGoogle ScholarDigital LibraryDigital Library
  61. Chunho Lee, Miodrag Potkonjak, and William H. Mangione-Smith. 1997. MediaBench: A tool for evaluating and synthesizing multimedia and communicatons systems. In Proceedings of the International Symposium on Microarchitecture. IEEE, 330--335. Google ScholarGoogle ScholarDigital LibraryDigital Library
  62. Rainer Leupers and Peter Marwedel. 2001. Retargetable Compiler Technology for Embedded Systems: Tools and Applications. Springer-Verlag. Google ScholarGoogle ScholarDigital LibraryDigital Library
  63. Andrea Lodi, Silvano Martello, and Michele Monaci. 2002. Two-dimensional packing problems: A survey. Euro. J. Op. Res. 141, 2 (Sept. 2002), 241--252.Google ScholarGoogle Scholar
  64. Michele Lombardi and Michela Milano. 2012. Optimal methods for resource allocation and scheduling: A cross-disciplinary survey. Constraints 17, 1 (Jan. 2012), 51--85. Google ScholarGoogle ScholarDigital LibraryDigital Library
  65. James B. MacQueen. 1967. Some methods for classification and analysis of multivariate observations. In Proceedings of the 5th Berkeley Symposium on Mathematical Statistics and Probability. University of California Press, 281--297.Google ScholarGoogle Scholar
  66. Abid M. Malik, Michael Chase, Tyrel Russell, and Peter Van Beek. 2008. An application of constraint programming to superblock instruction scheduling. In Proceedings of the International Conference on Principles and Practice of Constraint Programming (LNCS), Vol. 5202. Springer-Verlag, 97--111. Google ScholarGoogle ScholarDigital LibraryDigital Library
  67. Abid M. Malik, Jim McInnes, and Peter Van Beek. 2008. Optimal basic block instruction scheduling for multiple-issue processors using constraint programming. Artific. Intell. Tools 17, 1 (2008), 37--54.Google ScholarGoogle ScholarCross RefCross Ref
  68. Alan S. Manne. 1960. On the job-shop scheduling problem. Op. Res. 8, 2 (Mar. 1960), 219--223. Google ScholarGoogle ScholarDigital LibraryDigital Library
  69. MiniZinc Team. 2018. MiniZinc constraint modeling language. Retrieved from: https://www.minizinc.org.Google ScholarGoogle Scholar
  70. MIPS. 2016. The MIPS32 Instruction Set Manual. MIPS. Rev. 6.06. Retrieved from https://www.mips.com/downloads/the-mips32-instruction-set-v6-05.Google ScholarGoogle Scholar
  71. Santosh G. Nagarakatte and R. Govindarajan. 2007. Register allocation and optimal spill code scheduling in software pipelined loops using 0-1 integer linear programming formulation. In Proceedings of the International Conference on Compiler Construction (LNCS), Vol. 4420. Springer-Verlag, 126--140. Google ScholarGoogle ScholarDigital LibraryDigital Library
  72. Mayur Naik and Jens Palsberg. 2002. Compiling with code-size constraints. In Proceedings of the Conference on Languages, Compilers, Tools and Theory for Embedded Systems. ACM, 120--129. Google ScholarGoogle ScholarDigital LibraryDigital Library
  73. V. Krishna Nandivada and Jens Palsberg. 2006. SARA: Combining stack allocation and register allocation. In Proceedings of the International Conference on Compiler Construction (LNCS), Vol. 3923. Springer-Verlag, 232--246. Google ScholarGoogle ScholarDigital LibraryDigital Library
  74. V. Krishna Nandivada, Fernando Pereira, and Jens Palsberg. 2007. A framework for end-to-end verification and evaluation of register allocators. In Proceedings of the International Static Analysis Symposium (LNCS), Vol. 4634. Springer-Verlag, 153--169. Google ScholarGoogle ScholarDigital LibraryDigital Library
  75. George L. Nemhauser and Laurence A. Wolsey. 1999. Integer and Combinatorial Optimization. Wiley.Google ScholarGoogle ScholarDigital LibraryDigital Library
  76. Nicholas Nethercote, Peter J. Stuckey, Ralph Becket, Sebastian Brand, Gregory J. Duck, and Guido Tack. 2007. MiniZinc: Towards a standard CP modelling language. In Proceedings of the International Conference on Principles and Practice of Constraint Programming (LNCS), Vol. 4741. Springer-Verlag, 529--543. Google ScholarGoogle ScholarDigital LibraryDigital Library
  77. Fernando Magno Quintão Pereira and Jens Palsberg. 2008. Register allocation by puzzle solving. In Proceedings of the Symposium on Programming Language Design and Implementation. ACM, 216--226. Google ScholarGoogle ScholarDigital LibraryDigital Library
  78. Martin Persson. 2017. Evaluating Unison’s Speedup Estimation. Master’s Thesis. KTH Royal Institute of Technology, Sweden.Google ScholarGoogle Scholar
  79. Aashish Phansalkar, Ajay Joshi, Lieven Eeckhout, and Lizy K. John. 2005. Measuring program similarity: Experiments with SPEC CPU benchmark suites. In Proceedings of the International Symposium on Performance Analysis of Systems and Software. IEEE, 10--20. Google ScholarGoogle ScholarDigital LibraryDigital Library
  80. Qualcomm. 2013. Hexagon Application Binary Interface Specification. Qualcomm. 80-N2040-23 Rev. B. Retrieved from https://developer.qualcomm.com/software/hexagon-dsp-sdk/tools.Google ScholarGoogle Scholar
  81. Qualcomm. 2013. Hexagon Simulator User Guide. Qualcomm. 80-N2040-17 Rev. B. Retrieved from https://developer.qualcomm.com/software/hexagon-dsp-sdk/tools.Google ScholarGoogle Scholar
  82. Bantwal Ramakrishna Rau and Joseph A. Fisher. 1993. Instruction-level parallel processing: History, overview, and perspective. J. Supercomput. 7, 1--2 (May 1993), 9--50. Google ScholarGoogle ScholarDigital LibraryDigital Library
  83. Francesca Rossi, Peter van Beek, and Toby Walsh (Eds.). 2006. Handbook of Constraint Programming. Elsevier. Google ScholarGoogle ScholarDigital LibraryDigital Library
  84. Martin Savelsbergh. 1994. Preprocessing and probing techniques for mixed integer programming problems. ORSA J. Comput. 6, 4 (Sept. 1994), 445--454.Google ScholarGoogle ScholarCross RefCross Ref
  85. Bernhard Scholz and Erik Eckstein. 2002. Register allocation for irregular architectures. In Proceedings of the Conference on Languages, Compilers, Tools and Theory for Embedded Systems. ACM, 139--148. Google ScholarGoogle ScholarDigital LibraryDigital Library
  86. Ghassan Shobaki, Maxim Shawabkeh, and Najm Eldeen Abu Rmaileh. 2013. Preallocation instruction scheduling with register pressure minimization using a combinatorial optimization approach. ACM Trans. Arch. Code Optim. 10, 3 (Sept. 2013), 1--31. Google ScholarGoogle ScholarDigital LibraryDigital Library
  87. Helmut Simonis and Barry O’Sullivan. 2008. Search strategies for rectangle packing. In Proceedings of the International Conference on Principles and Practice of Constraint Programming (LNCS), Vol. 5202. Springer-Verlag, 52--66. Google ScholarGoogle ScholarDigital LibraryDigital Library
  88. Barbara M. Smith. 2006. Modelling. In Handbook of Constraint Programming, Francesca Rossi, Peter van Beek, and Toby Walsh (Eds.). Elsevier, 375--404.Google ScholarGoogle Scholar
  89. Charles Spearman. 1904. The proof and measurement of association between two things. Amer. J. Psych. 15, 1 (Jan. 1904), 72--101.Google ScholarGoogle ScholarCross RefCross Ref
  90. SPEC. 2016. CPU 2006 Benchmarks. SPEC. Retrieved from: https://www.spec.org/cpu2006.Google ScholarGoogle Scholar
  91. SPEC. 2018. Building the SPEC CPU2006 Tool Suite. SPEC. Retrieved from: https://www.spec.org/cpu2006/Docs/tools-build.html.Google ScholarGoogle Scholar
  92. Vugranam Sreedhar, Roy Ju, David Gillies, and Vatsa Santhanam. 1999. Translating out of static single assignment form. In Proceedings of the International Static Analysis Symposium (LNCS), Vol. 1694. Springer-Verlag, 849--849. Google ScholarGoogle ScholarDigital LibraryDigital Library
  93. Peter van Beek. 2006. Backtracking search algorithms. In Handbook of Constraint Programming, Francesca Rossi, Peter van Beek, and Toby Walsh (Eds.). Elsevier, 83--132.Google ScholarGoogle Scholar
  94. Pascal Van Hentenryck and Jean-Philippe Carillon. 1988. Generality vs. specificity: An experience with AI and OR techniques. In Proceedings of the National Conference on Artificial Intelligence. AAAI Press, 660--664. Google ScholarGoogle ScholarDigital LibraryDigital Library
  95. Willem-Jan van Hoeve and Irit Katriel. 2006. Global constraints. In Handbook of Constraint Programming, Francesca Rossi, Peter van Beek, and Toby Walsh (Eds.). Elsevier, 205--244.Google ScholarGoogle Scholar
  96. Harvey M. Wagner. 1959. An integer linear-programming model for machine scheduling. Naval Res. Logist. Quart. 6, 2 (June 1959), 131--140.Google ScholarGoogle ScholarCross RefCross Ref
  97. David W. Wall. 1986. Global register allocation at link time. In Proceedings of the SIGPLAN Symposium on Compiler Construction. ACM, 264--275. Google ScholarGoogle ScholarDigital LibraryDigital Library
  98. Fredrik Wickberg and Mattias Eriksson. 2017. Outperforming state-of-the-art compilers in Unison. Retrieved from: https://www.ericsson.com/research-blog/outperforming-state-art-compilers-unison.Google ScholarGoogle Scholar
  99. Frank Wilcoxon. 1945. Individual comparisons by ranking methods. Biomet. Bull. 1, 6 (Dec. 1945), 80--83.Google ScholarGoogle ScholarCross RefCross Ref
  100. Kent Wilken, Jack Liu, and Mark Heffernan. 2000. Optimal instruction scheduling using integer programming. In Proceedings of the Symposium on Programming Language Design and Implementation. ACM, 121--133. Google ScholarGoogle ScholarDigital LibraryDigital Library
  101. Tom Wilson, Gary Grewal, Ben Halley, and Dilip Banerji. 1994. An integrated approach to retargetable code generation. In Proceedings of the International Symposium on High Level Synthesis. IEEE, 70--75. Google ScholarGoogle ScholarDigital LibraryDigital Library
  102. Tom Wilson, Gary Grewal, Shawn Henshall, and Dilip Banerji. 2002. An ILP-based approach to code generation. In Proceedings of the International Symposium on Code Generation for Embedded Processors. Springer-Verlag, 103--118.Google ScholarGoogle ScholarCross RefCross Ref
  103. Sebastian Winkel. 2007. Optimal versus heuristic global code scheduling. In Proceedings of the International Symposium on Microarchitecture. IEEE, 43--55. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Combinatorial Register Allocation and Instruction Scheduling

          Recommendations

          Comments

          Login options

          Check if you have access through your login credentials or your institution to get full access on this article.

          Sign in

          Full Access

          • Published in

            cover image ACM Transactions on Programming Languages and Systems
            ACM Transactions on Programming Languages and Systems  Volume 41, Issue 3
            September 2019
            278 pages
            ISSN:0164-0925
            EISSN:1558-4593
            DOI:10.1145/3343145
            Issue’s Table of Contents

            Copyright © 2019 ACM

            Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

            Publisher

            Association for Computing Machinery

            New York, NY, United States

            Publication History

            • Published: 2 July 2019
            • Accepted: 1 April 2019
            • Revised: 1 January 2019
            • Received: 1 April 2018
            Published in toplas Volume 41, Issue 3

            Permissions

            Request permissions about this article.

            Request Permissions

            Check for updates

            Qualifiers

            • research-article
            • Research
            • Refereed

          PDF Format

          View or Download as a PDF file.

          PDF

          eReader

          View online with eReader.

          eReader

          HTML Format

          View this article in HTML Format .

          View HTML Format