Skip to content

Commit 1748694

Browse files
committed
[AArch64] Refactor predicate to check for a ZR operand (NFC)
Create generic predicates to check for a ZR among the possible register operands.
1 parent 1575063 commit 1748694

File tree

4 files changed

+19
-25
lines changed

4 files changed

+19
-25
lines changed

llvm/lib/Target/AArch64/AArch64SchedNeoverseV2.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -948,8 +948,8 @@ def V2Write_IncDec : SchedWriteVariant<[
948948
def V2Wr_IM : SchedWriteRes<[V2UnitM]> { let Latency = 2; }
949949
def V2Wr_IMA : SchedWriteRes<[V2UnitM0]> { let Latency = 2; }
950950
def V2Wr_IMUL : SchedWriteVariant<[
951-
SchedVar<NeoverseReg3IsZero, [V2Wr_IM]>,
952-
SchedVar<NoSchedPred, [V2Wr_IMA]>]>;
951+
SchedVar<IsReg3ZeroPred, [V2Wr_IM]>,
952+
SchedVar<NoSchedPred, [V2Wr_IMA]>]>;
953953
def V2Rd_IMA : SchedReadAdvance<1, [V2Wr_IMA]>;
954954

955955
def V2Wr_FMA : SchedWriteRes<[V2UnitV]> { let Latency = 4; }

llvm/lib/Target/AArch64/AArch64SchedPredExynos.td

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,7 @@ def ExynosResetFn : TIIPredicate<
125125
MCReturnStatement<TruePred>>,
126126
MCOpcodeSwitchCase<
127127
[ORRWri, ORRXri],
128-
MCReturnStatement<
129-
CheckAll<
130-
[CheckIsRegOperand<1>,
131-
CheckAny<
132-
[CheckRegOperand<1, WZR>,
133-
CheckRegOperand<1, XZR>]>]>>>],
128+
MCReturnStatement<CheckIsReg1Zero>>],
134129
MCReturnStatement<
135130
CheckAny<
136131
[IsCopyIdiomFn,

llvm/lib/Target/AArch64/AArch64SchedPredNeoverse.td

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,6 @@ def NeoverseNoLSL : MCSchedPredicate<
1818
CheckAll<[CheckShiftLSL,
1919
CheckShiftBy0]>>;
2020

21-
// Check if the fourth operand of an instruction is WZR or XZR
22-
def NeoverseReg3IsZero : MCSchedPredicate<
23-
CheckAll<
24-
[CheckIsRegOperand<3>,
25-
CheckAny<
26-
[CheckRegOperand<3, WZR>,
27-
CheckRegOperand<3, XZR>]>]>>;
28-
2921
// Identify LDR/STR H/Q-form scaled (and potentially extended) FP instructions
3022
def NeoverseHQForm : MCSchedPredicate<
3123
CheckAll<[

llvm/lib/Target/AArch64/AArch64SchedPredicates.td

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,19 @@ let FunctionMapper = "AArch64_AM::getShiftType" in {
5959
}
6060

6161
// Generic predicates.
62+
63+
// Check for ZR in a register operand.
64+
foreach I = {1-3} in {
65+
def CheckIsReg#I#Zero : CheckAll<
66+
[CheckIsRegOperand<I>,
67+
CheckAny<
68+
[CheckRegOperand<I, WZR>,
69+
CheckRegOperand<I, XZR>]>]>;
70+
}
71+
def IsReg1ZeroPred : MCSchedPredicate<CheckIsReg1Zero>;
72+
def IsReg2ZeroPred : MCSchedPredicate<CheckIsReg2Zero>;
73+
def IsReg3ZeroPred : MCSchedPredicate<CheckIsReg3Zero>;
74+
6275
// Identify whether an instruction is NEON or floating point
6376
def CheckFpOrNEON : CheckFunctionPredicateWithTII<
6477
"AArch64_MC::isFpOrNEON",
@@ -288,11 +301,8 @@ def IsCopyIdiomFn : TIIPredicate<"isCopyIdiom",
288301
[ORRWrs, ORRXrs],
289302
MCReturnStatement<
290303
CheckAll<
291-
[CheckIsRegOperand<1>,
304+
[CheckIsReg1Zero,
292305
CheckIsRegOperand<2>,
293-
CheckAny<
294-
[CheckRegOperand<1, WZR>,
295-
CheckRegOperand<1, XZR>]>,
296306
CheckShiftBy0]>>>],
297307
MCReturnStatement<FalsePred>>>;
298308
def IsCopyIdiomPred : MCSchedPredicate<IsCopyIdiomFn>;
@@ -305,10 +315,7 @@ def IsZeroIdiomFn : TIIPredicate<"isZeroIdiom",
305315
[ORRWri, ORRXri],
306316
MCReturnStatement<
307317
CheckAll<
308-
[CheckIsRegOperand<1>,
309-
CheckAny<
310-
[CheckRegOperand<1, WZR>,
311-
CheckRegOperand<1, XZR>]>,
318+
[CheckIsReg1Zero,
312319
CheckZeroOperand<2>]>>>],
313320
MCReturnStatement<FalsePred>>>;
314321
def IsZeroIdiomPred : MCSchedPredicate<IsZeroIdiomFn>;
@@ -333,6 +340,6 @@ def IsZeroFPIdiomFn : TIIPredicate<"isZeroFPIdiom",
333340
def IsZeroFPIdiomPred : MCSchedPredicate<IsZeroFPIdiomFn>;
334341

335342
// Identify EXTR as the alias for ROR (immediate).
336-
def IsRORImmIdiomPred : MCSchedPredicate<
343+
def IsRORImmIdiomPred : MCSchedPredicate< // EXTR Rd, Rs, Rs, #Imm
337344
CheckAll<[CheckOpcode<[EXTRWrri, EXTRXrri]>,
338345
CheckSameRegOperand<1, 2>]>>;

0 commit comments

Comments
 (0)