Implement liveness analysis:
- Calculate live-in and live-out sets for each instruction
- Identify live ranges for each variable
Implement linear scan allocation:
- Sort live ranges by start point
- Allocate registers greedily
- Spill when no registers available
Generate load/store for spilled variables:
- Allocate stack slot for spilled variables
- Insert load before use
- Insert store after definition
Handle register constraints:
- Reserved registers (esp, ebp)
- Caller-saved vs callee-saved
- Special uses (eax for return value)