[AArch64][GlobalISel] Use fcsel instead of csel for G_SELECT on FPRs
authorJessica Paquette <jpaquette@apple.com>
Fri, 3 May 2019 22:37:46 +0000 (22:37 +0000)
committerJessica Paquette <jpaquette@apple.com>
Fri, 3 May 2019 22:37:46 +0000 (22:37 +0000)
commit910630c1e4a13513eba8e205ebe2cee2a9c18407
tree16daadde273552c3a26816a6a47e893db57ec2af
parent99f8c4f5b659ab92c8eafc6dc9f887f1af465eb0
[AArch64][GlobalISel] Use fcsel instead of csel for G_SELECT on FPRs

This saves us some unnecessary copies.

If the inputs to a G_SELECT are floating point, we should use fcsel rather than
csel.

Changes here are...

- Teach selectCopy about s1-to-s1 copies across register banks.
- AArch64RegisterBankInfo about G_SELECT in general.
- Teach the instruction selector about the FCSEL instructions.

Also add two tests:

- select-select.mir to show that we get the expected FCSEL
- regbank-select.mir (unfortunately named) to show the register banks on
G_SELECT are properly preserved

And update fast-isel-select.ll to show that we do the same thing as other
instruction selectors in these cases.

llvm-svn: 359940
llvm/lib/Target/AArch64/AArch64InstructionSelector.cpp
llvm/lib/Target/AArch64/AArch64RegisterBankInfo.cpp
llvm/test/CodeGen/AArch64/GlobalISel/regbank-select.mir [new file with mode: 0644]
llvm/test/CodeGen/AArch64/GlobalISel/select-select.mir [new file with mode: 0644]
llvm/test/CodeGen/AArch64/fast-isel-select.ll