[PATCH] D120340: [SVE] Don't custom lower constant predicate ISD:SPLAT_VECTOR operations.
Paul Walker via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 22 10:27:28 PST 2022
paulwalker-arm created this revision.
Herald added subscribers: psnobl, hiraditya, tschuett.
Herald added a reviewer: efriedma.
paulwalker-arm requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D120340
Files:
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/lib/Target/AArch64/SVEInstrFormats.td
Index: llvm/lib/Target/AArch64/SVEInstrFormats.td
===================================================================
--- llvm/lib/Target/AArch64/SVEInstrFormats.td
+++ llvm/lib/Target/AArch64/SVEInstrFormats.td
@@ -338,6 +338,11 @@
let Predicates = [HasSVEorStreamingSVE] in {
defm PTRUE : sve_int_ptrue<0b000, "ptrue", AArch64ptrue>;
defm PTRUES : sve_int_ptrue<0b001, "ptrues", null_frag>;
+
+ def : Pat<(nxv16i1 immAllOnesV), (PTRUE_B 31)>;
+ def : Pat<(nxv8i1 immAllOnesV), (PTRUE_H 31)>;
+ def : Pat<(nxv4i1 immAllOnesV), (PTRUE_S 31)>;
+ def : Pat<(nxv2i1 immAllOnesV), (PTRUE_D 31)>;
}
//===----------------------------------------------------------------------===//
@@ -638,10 +643,10 @@
multiclass sve_int_pfalse<bits<6> opc, string asm> {
def NAME : sve_int_pfalse<opc, asm>;
- def : Pat<(nxv16i1 (splat_vector (i32 0))), (!cast<Instruction>(NAME))>;
- def : Pat<(nxv8i1 (splat_vector (i32 0))), (!cast<Instruction>(NAME))>;
- def : Pat<(nxv4i1 (splat_vector (i32 0))), (!cast<Instruction>(NAME))>;
- def : Pat<(nxv2i1 (splat_vector (i32 0))), (!cast<Instruction>(NAME))>;
+ def : Pat<(nxv16i1 immAllZerosV), (!cast<Instruction>(NAME))>;
+ def : Pat<(nxv8i1 immAllZerosV), (!cast<Instruction>(NAME))>;
+ def : Pat<(nxv4i1 immAllZerosV), (!cast<Instruction>(NAME))>;
+ def : Pat<(nxv2i1 immAllZerosV), (!cast<Instruction>(NAME))>;
}
class sve_int_ptest<bits<6> opc, string asm>
Index: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
===================================================================
--- llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -10090,13 +10090,11 @@
case MVT::i1: {
// The only legal i1 vectors are SVE vectors, so we can use SVE-specific
// lowering code.
- if (auto *ConstVal = dyn_cast<ConstantSDNode>(SplatVal)) {
- // We can hande the zero case during isel.
- if (ConstVal->isZero())
- return Op;
- if (ConstVal->isOne())
- return getPTrue(DAG, dl, VT, AArch64SVEPredPattern::all);
- }
+
+ // We can handle the constant cases during isel.
+ if (isa<ConstantSDNode>(SplatVal))
+ return Op;
+
// The general case of i1. There isn't any natural way to do this,
// so we use some trickery with whilelo.
SplatVal = DAG.getAnyExtOrTrunc(SplatVal, dl, MVT::i64);
@@ -15361,6 +15359,9 @@
return false;
}
+ if (ISD::isConstantSplatVectorAllOnes(N.getNode()))
+ return true;
+
// "ptrue p.<ty>, all" can be considered all active when <ty> is the same size
// or smaller than the implicit element type represented by N.
// NOTE: A larger element count implies a smaller element type.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D120340.410584.patch
Type: text/x-patch
Size: 2703 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220222/c21cc507/attachment.bin>
More information about the llvm-commits
mailing list