[X86] Fold ADD(VPMADDWD(X,Y),VPMADDWD(Z,W)) -> VPMADDWD(SHUFFLE(X,Z), SHUFFLE(Y,W))
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 26 Sep 2021 17:08:17 +0000 (18:08 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 26 Sep 2021 17:08:29 +0000 (18:08 +0100)
commit3fe97672047bcdedbd5d34a26498b10f9dba369d
tree4591dc20136dc7c16a0c40d3e2868042b35e35c1
parent175c1a39e8f924f9199d4c8c94f06ad0d3502235
[X86] Fold ADD(VPMADDWD(X,Y),VPMADDWD(Z,W)) -> VPMADDWD(SHUFFLE(X,Z), SHUFFLE(Y,W))

Merge addition of VPMADDWD nodes if each element pair doesn't use the upper element in each pair (i.e. its zero) - we can generalize this to either element in the pair if we one day create VPMADDWD with zero lower elements.

There are still a number of issues with extending/shuffling with 256/512-bit VPMADDWD nodes so this initially only works for v2i32/v4i32 cases - I'm working on removing all these limitations but there's still a bit of yak shaving to go.....
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/madd.ll
llvm/test/CodeGen/X86/pmaddubsw.ll