This is an archive of the discontinued LLVM Phabricator instance.

[X86][SSE] Introduce WriteVecMove, WriteVecLoad and WriteVecStore scheduler classes
ClosedPublic

Authored by RKSimon on Mar 14 2018, 8:12 AM.

Details

Summary

As discussed on D44428 and PR36726, this patch splits off WriteVecMove, WriteVecLoad and WriteVecStore scheduler classes to permit vectors to be handled separately from gpr/scalar types.

I've minimised the diff here by only moving various basic SSE/AVX vector instructions across - we can fix the rest as its called for. This does fix the MOVDQA vs MOVAPS/MOVAPD discrepancies mentioned on D44428.

Diff Detail

Repository
rL LLVM

Event Timeline

RKSimon created this revision.Mar 14 2018, 8:12 AM

I only checked the Intel sched models.

lib/Target/X86/X86SchedBroadwell.td
122 ↗(On Diff #138359)

I don't have access to a broadwell to doublecheck, but that does sound weird. I would have expected BWPort5.

lib/Target/X86/X86SchedHaswell.td
108 ↗(On Diff #138359)

This should be HWPort5

lib/Target/X86/X86SchedSandyBridge.td
97 ↗(On Diff #138359)

This should be SBPort5

lib/Target/X86/X86SchedSkylakeClient.td
123 ↗(On Diff #138359)

This one is fine.

And BTW thanks for the change, I think this is the right approach.

RKSimon added inline comments.Mar 14 2018, 9:57 AM
lib/Target/X86/X86SchedBroadwell.td
122 ↗(On Diff #138359)

MOVAPD/MOVAPS can only use Port5 - MOVDQA can use 015 (search below for MOVDQArr and MOVAPSrr). I can feel a WriteFMove and WriteVecMove coming......

RKSimon updated this revision to Diff 138475.Mar 14 2018, 4:43 PM

Fully split fp/int vector move/load/store classes

courbet accepted this revision.Mar 15 2018, 12:17 AM
This revision is now accepted and ready to land.Mar 15 2018, 12:17 AM
This revision was automatically updated to reflect the committed changes.