register allocator