Intermediate Topic 31 of 50 Languages & Compilers
Register Allocation
Mapping many variables onto few CPU registers.
How it works
Register allocation decides which program values live in the CPU's limited registers and which are spilled to memory. A common formulation is graph coloring: variables are nodes, edges connect variables that are live at the same time and k colors represent the k registers; if the graph cannot be colored, some variables are spilled. Linear scan allocation is a faster alternative used in JIT compilers. Coalescing eliminates copies, and live-range splitting improves quality.
Step-by-step walkthrough
- Many variables compete for few registers.
- Two variables that are live at the same time interfere.
- Graph colouring gives interfering variables different registers.
- Non-interfering a and c can share r1.
- When colours run out a variable is spilled to memory.
Where it is used
Every optimizing compiler performs it, as register use dominates performance on modern CPUs.
Common pitfall
Optimal allocation is NP-hard, so heuristics are used, and the quality varies. Spilling in hot loops hurts speed. Calling conventions, special registers and instruction constraints complicate allocation. Interactions with SSA form and phi elimination need care. Look at generated assembly to detect excessive spills, and reduce the number of simultaneously live values in hot code.
Where it fits in the course
Register Allocation is topic 31 of 50 in Languages & Compilers, rated Intermediate. It follows Code Generation. The next topic is Compiler Optimizations.
Practice and explore
- Open the interactive lesson, with a mini quiz.
- Take the Languages & Compilers quiz.
How to study this topic
- Read the explanation above and restate the definition in your own words.
- Open the interactive lesson and answer its mini quiz.
- Read the common pitfall, then write a short example that avoids it.
- Check your understanding in the Languages & Compilers quiz, and revisit the topic if you miss a question.
Frequently asked questions
What is Register Allocation?
Where do people use Register Allocation?
What is the most common mistake with Register Allocation?
What should I learn before this topic?
How can I practice it?
Is Register Allocation hard to learn?
How long does it take to learn Register Allocation?
Which topics are related to Register Allocation?
What should I study after Register Allocation?
Related topics
- Code Generation (Languages & Compilers)
- Compiler Optimizations (Languages & Compilers)
- Control Flow Graphs (Languages & Compilers)
- Constant Folding and Propagation (Languages & Compilers)
- Memory Allocation (Operating Systems)
- File Allocation Methods (Operating Systems)