[all-commits] [llvm/llvm-project] d0ba6c: [AArch64][GlobalISel] Select CSINC and CSINV for G...
Jessica Paquette via All-commits
all-commits at lists.llvm.org
Thu Nov 12 14:44:32 PST 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: d0ba6c4002e455cc005ca3f4baca36f2d199582f
https://github.com/llvm/llvm-project/commit/d0ba6c4002e455cc005ca3f4baca36f2d199582f
Author: Jessica Paquette <jpaquette at apple.com>
Date: 2020-11-12 (Thu, 12 Nov 2020)
Changed paths:
M llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
M llvm/test/CodeGen/AArch64/GlobalISel/opt-fold-compare.mir
M llvm/test/CodeGen/AArch64/GlobalISel/select-select.mir
Log Message:
-----------
[AArch64][GlobalISel] Select CSINC and CSINV for G_SELECT with constants
Select the following:
- G_SELECT cc, 0, 1 -> CSINC zreg, zreg, cc
- G_SELECT cc 0, -1 -> CSINV zreg, zreg cc
- G_SELECT cc, 1, f -> CSINC f, zreg, inv_cc
- G_SELECT cc, -1, f -> CSINV f, zreg, inv_cc
- G_SELECT cc, t, 1 -> CSINC t, zreg, cc
- G_SELECT cc, t, -1 -> CSINC t, zreg, cc
(IR example: https://godbolt.org/z/YfPna9)
These correspond to a bunch of the AArch64csel patterns in AArch64InstrInfo.td.
Unfortunately, it doesn't seem like we can import patterns that use NZCV like
those ones do. E.g.
```
def : Pat<(AArch64csel GPR32:$tval, (i32 1), (i32 imm:$cc), NZCV),
(CSINCWr GPR32:$tval, WZR, (i32 imm:$cc))>;
```
So we have to manually select these for now.
This replaces `selectSelectOpc` with an `emitSelect` function, which performs
these optimizations.
Differential Revision: https://reviews.llvm.org/D90701
More information about the All-commits
mailing list