Changes from Git (git http://labmaster3.local/git/llvm-project.git)


  1. [ARM] Combines for VMOVN (details)
  2. [x86][CGP] try to hoist funnel shift above select-of-splats (details)
Commit 72f1fb2edf596e6030f6b55439c732631edb4e91 by
[ARM] Combines for VMOVN

This adds two combines for VMOVN, one to fold
VMOVN[tb](c, VQMOVNb(a, b)) => VQMOVN[tb](c, b)
The other to perform demand bits analysis on the lanes of a VMOVN. We
know that only the bottom lanes of the second operand and the top or
bottom lanes of the Qd operand are needed in the result, depending on if
the VMOVN is bottom or top.

Differential Revision:
The file was modifiedllvm/test/CodeGen/Thumb2/mve-vqmovn-combine.ll
The file was modifiedllvm/lib/Target/ARM/ARMISelLowering.cpp
The file was modifiedllvm/test/CodeGen/Thumb2/mve-satmul-loops.ll
Commit 5be37cb124f71e267f1cf7bc3929486fde2acd0a by spatel
[x86][CGP] try to hoist funnel shift above select-of-splats

This is basically the same patch as D63233, but converted to
funnel shifts rather than regular shifts. I did not see a
way to effectively share code for these 2 cases though.

This follows D79718 and D79827 to re-fix PR37426 because
that gets canonicalized to funnel shift intrinsics in IR.

I did draft an alternative patch as an enhancement to
"shouldSinkOperands()", but that was awkward because
we have to key the transform from the select, but then
look at both its users and its operands.
The file was modifiedllvm/test/Transforms/CodeGenPrepare/X86/vec-shift.ll
The file was modifiedllvm/test/CodeGen/X86/vector-fshl-256.ll
The file was modifiedllvm/lib/CodeGen/CodeGenPrepare.cpp