This is an archive of the discontinued LLVM Phabricator instance.

[AArch64][GlobalISel] Infer whether G_PHI is going to be a FPR in regbankselect
ClosedPublic

Authored by paquette on Sep 23 2020, 11:54 AM.

Details

Summary

Some instructions (G_LOAD, G_SELECT, G_UNMERGE_VALUES) check if their uses will define/use FPRs (using onlyUsesFP and onlyDefinesFP).

The register bank of a use isn't necessarily known when an instruction asks for this.

Teach hasFPConstraints to look at the instructions feeding into a G_PHI when its destination bank is unknown. If any of them are FPR, assume the entire G_PHI will also be assigned a FPR.

Since a phi can have many inputs, and those inputs can in turn be phis, restrict the search depth to a very low number.

Also improve the docs for hasFPConstraints and friends a little.

This is a 0.3% code size improvement on CTMark/Bullet at -O3, and a 0.2% code size improvement at CTMark/pairlocalalign at -O3.

Diff Detail

Event Timeline

paquette created this revision.Sep 23 2020, 11:54 AM
paquette requested review of this revision.Sep 23 2020, 11:54 AM
aemerson accepted this revision.Sep 24 2020, 11:48 AM
aemerson added inline comments.
llvm/lib/Target/AArch64/GISel/AArch64RegisterBankInfo.h
118

Would be useful to turn this into a hidden cmdline switch.

This revision is now accepted and ready to land.Sep 24 2020, 11:48 AM