This is an archive of the discontinued LLVM Phabricator instance.

LiveIntervalAnalysis: Calculate liveness even if a superreg is reserved.
ClosedPublic

Authored by MatzeB on Jan 18 2017, 5:17 PM.

Details

Summary

A register unit may be allocatable and non-reserved but some of the
register(tuples) built with it are reserved. We still need to calculate
liveness in this case.

Diff Detail

Repository
rL LLVM

Event Timeline

MatzeB created this revision.Jan 18 2017, 5:17 PM
escha added a subscriber: escha.Jan 18 2017, 5:40 PM

Confirmed this fixes the problem I was having.

This revision is now accepted and ready to land.Jan 23 2017, 11:58 AM

So we don't really have a concept of reserving register units, we just reserve registers; This patch currenly considers a register unit as reserved if all the root registers are reserved. This turned out to be a bad idea for the X86 32bit mode which reserves BIL, SIL, ... but of course still wants to use the 16+32bit versions of those register.

So I tried changing this to a register unit is considered reserved if the roots and all their super registers are reserved. This fixes all X86 cases but now breaks a number of tests on PowerPC and Hexagon (fun times).

Could you update to r292836 (or later) and try again? Hexagon should start working.

Could you update to r292836 (or later) and try again? Hexagon should start working.

Indeed its fixed now before I even started investigating. Woohoo, thanks that is cool!

(I started with PowerPC which looks like it needs a similar fix as Hexagon, but got interrupted by a meeting)

Fix for PowerPC submited as D29056

This revision was automatically updated to reflect the committed changes.