[all-commits] [llvm/llvm-project] 7fb84d: [AArch64][GlobalISel] Port buildvector -> dup patt...

Jessica Paquette via All-commits all-commits at lists.llvm.org
Thu Jun 25 14:19:30 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 7fb84dff69572b59dc730f9616fea918bedc7384
      https://github.com/llvm/llvm-project/commit/7fb84dff69572b59dc730f9616fea918bedc7384
  Author: Jessica Paquette <jpaquette at apple.com>
  Date:   2020-06-25 (Thu, 25 Jun 2020)

  Changed paths:
    M llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerCombiner.cpp
    M llvm/test/CodeGen/AArch64/GlobalISel/postlegalizer-combiner-shuffle-splat.mir

  Log Message:
  -----------
  [AArch64][GlobalISel] Port buildvector -> dup pattern from AArch64ISelLowering

Given this:

```
%x:_(<n x sK>) = G_BUILD_VECTOR %lane, ...
...
%y:_(<n x sK>) = G_SHUFFLE_VECTOR %x(<n x sK>), %foo, shufflemask(0, 0, ...)
```

We can produce:

```
%y:_(<n x sK) = G_DUP %lane(sK)
```

Doesn't seem to be too common, but AArch64ISelLowering attempts to do this
before trying to produce a DUPLANE. Might as well port it.

Also make it so that when the splat has an undef mask, we try setting it to
0. SDAG does this, and it makes sure that when we get the build vector operand,
we actually get a source operand.

Differential Revision: https://reviews.llvm.org/D81979




More information about the All-commits mailing list