This is an archive of the discontinued LLVM Phabricator instance.

[X86] WIP Codegen support for AVX5124FMAPS/AVX5124VNNI instructions.
Needs ReviewPublic

Authored by craig.topper on May 18 2020, 12:11 AM.
This revision needs review, but there are no reviewers specified.

Details

Reviewers
None
Summary

These instructions have weird register allocation constraints
that requires 4 consecutive registers. LLVM has support for
this using REG_SEQUENCE.

These instructions are also weird in that they do a 128 bit load
conditional on whether any bit of the mask is non-zero. This
differs from normal masked loads. They also have no register form.
We need to use target specific memory ISD opcodes to make sure
memory operands are propagated correctly to the machine instruction.

I've had part of this patch lying around for a couple years. I
tried to clean it up some this weekend. Still need to add tests
and finish the patterns for the scalar instructions. Not completely
sure I'm happy with the intrinsic format for those yet.

Some of the test changes are just from introducing the quad register
classes. This seems to break something in the critical anti dep
breaker if I remember from when I investigated this a year or two
ago.

Diff Detail

Event Timeline

craig.topper created this revision.May 18 2020, 12:11 AM
Herald added a project: Restricted Project. · View Herald TranscriptMay 18 2020, 12:11 AM

Change scalar intrinsic to using v4f32. Still not sure about this.

Add some test cases to show that things work. Still need AVX5124VNNI

Really include the test file