Make SMS take register pressure into account

Registered by Richard Sandiford on 2011-09-19

A known problem with SMS is that it fails to take register pressure into account. Some of the extreme examples are handled by blueprint sms-register-scheduling, but that is an incidental effect rather than the focus of that blueprint. There are cases in our libav microbenchmarks where excess register pressure still causes SMS to produce worse code than the normal Haifa scheduler.

The SMS algorithm already has a specified (but unimplemented) way of handling register pressure: after scheduling with a particular ii, we check whether there are enough registers to satisfy that schedule, and try with a larger ii if not. (Note that this would also make SMS rather conservative, in that it would refuse to handle any loops that are likely to need spills. Since no subsequent pass would schedule the spill instructions, being conservative may be a good thing overall, but it is a little unfortunate. Note that the normal Haifa scheduler runs both before and after reload in order to cope with things like this, so the same concerns don't apply there.)

It is likely that any accurate estimation of register pressure will rely on sms-register-scheduling.

Blueprint information

Status:
Not started
Approver:
None
Priority:
Not
Drafter:
Richard Sandiford
Direction:
Needs approval
Assignee:
None
Definition:
Discussion
Series goal:
None
Implementation:
Informational Informational
Milestone target:
None

Related branches

Sprints

Whiteboard

[michaelh1 2012-06-25] marked as 'not' as we've stopped on SMS.
[2013-05-29 matthew-gretton-dann] Not moving to Jira as this has been blocked for too long.

(?)

Work Items

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.