This is an archive of the discontinued LLVM Phabricator instance.

[X86] Redefine MOVSS/MOVSD instructions to take VR128 regclass as input instead of FR32/FR64
ClosedPublic

Authored by craig.topper on Oct 1 2017, 10:45 PM.

Details

Summary

This patch redefines the MOVSS/MOVSD instructions to take VR128 as its second input. This allows the MOVSS/SD->BLEND commute to work without requiring a COPY to be inserted.

This should fix PR33079

Overall this looks to be an improvement in the generated code. I haven't checked the EXPENSIVE_CHECKS build but I'll do that and update with results.

Diff Detail

Event Timeline

craig.topper created this revision.Oct 1 2017, 10:45 PM

No new verifier failures

RKSimon edited edge metadata.Oct 1 2017, 11:49 PM

This is managing to remove quite a few moves with improved register allocation - I had no idea that it was so sensitive to copies.

Context is missing.

Forgot to fix the _REV EVEX versions.

Please can you add the test case from PR33079

I can add the test cases but its about 1500 lines that bugpoint can't seem to reduce. I think it would be extremely fragile.

Rebase one of the tests.

RKSimon accepted this revision.Oct 4 2017, 1:23 AM

I'm happy for this to go in as is - getting a suitable repro from PR33079 added would be nice though.

This revision is now accepted and ready to land.Oct 4 2017, 1:23 AM
This revision was automatically updated to reflect the committed changes.