Converts concat_vectors(V64 (trunc V128), V64 (trunc V128)) and concat_vectors(V32 (trunc V64), V32 (trunc V64)), which would otherwise be lowered as xtn followed by xtn2, to uzp1.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
llvm/lib/Target/AArch64/AArch64InstrInfo.td | ||
---|---|---|
5291 | I was wondering if we also need patterns that work on V64 values/regs, so that we get the uzp1 .8b variants? |
llvm/lib/Target/AArch64/AArch64InstrInfo.td | ||
---|---|---|
5291 | Does this pattern and the one below work? I think illegal types don't get this far through lowering, and tablegen often balks at them. |
llvm/lib/Target/AArch64/AArch64InstrInfo.td | ||
---|---|---|
5291 | Yes they do. I have added tests for them in llvm/test/CodeGen/AArch64/concat_vector-truncate-combine.ll. However, the pattern for the 2s variant didn't work (v1i64 --> v2i32). |
llvm/lib/Target/AArch64/AArch64InstrInfo.td | ||
---|---|---|
5291 | OK. These two already seem to produce the single instruction, without the need for this patch: I'm not sure if they are actually doing much. |
I was wondering if we also need patterns that work on V64 values/regs, so that we get the uzp1 .8b variants?