@@ -52,6 +52,7 @@ def V2UnitV3 : ProcResource<1>; // FP/ASIMD 3
5252def V2UnitL01 : ProcResource<2>; // Load/Store 0/1
5353def V2UnitL2 : ProcResource<1>; // Load 2
5454def V2UnitD : ProcResource<2>; // Store data 0/1
55+ def V2UnitFlg : ProcResource<3>; // Flags
5556
5657def V2UnitR : ProcResGroup<[V2UnitS0, V2UnitS1]>; // Integer single-cycle 0/1
5758def V2UnitS : ProcResGroup<[V2UnitS0, V2UnitS1, V2UnitS2, V2UnitS3]>; // Integer single-cycle 0/1/2/3
@@ -97,11 +98,13 @@ def V2Write_0c : SchedWriteRes<[]> { let Latency = 0; }
9798
9899def V2Write_1c_1B : SchedWriteRes<[V2UnitB]> { let Latency = 1; }
99100def V2Write_1c_1F : SchedWriteRes<[V2UnitF]> { let Latency = 1; }
101+ def V2Write_1c_1F_1Flg : SchedWriteRes<[V2UnitF, V2UnitFlg]> { let Latency = 1; }
100102def V2Write_1c_1I : SchedWriteRes<[V2UnitI]> { let Latency = 1; }
101103def V2Write_1c_1M : SchedWriteRes<[V2UnitM]> { let Latency = 1; }
102104def V2Write_1c_1M0 : SchedWriteRes<[V2UnitM0]> { let Latency = 1; }
103105def V2Write_1c_1L01 : SchedWriteRes<[V2UnitL01]> { let Latency = 1; }
104106def V2Write_2c_1M : SchedWriteRes<[V2UnitM]> { let Latency = 2; }
107+ def V2Write_2c_1M_1Flg : SchedWriteRes<[V2UnitM, V2UnitFlg]> { let Latency = 2; }
105108def V2Write_3c_1M : SchedWriteRes<[V2UnitM]> { let Latency = 3; }
106109def V2Write_2c_1M0 : SchedWriteRes<[V2UnitM0]> { let Latency = 2; }
107110def V2Write_3c_1M0 : SchedWriteRes<[V2UnitM0]> { let Latency = 3; }
@@ -886,12 +889,12 @@ def V2Write_ArithI : SchedWriteVariant<[
886889 SchedVar<NoSchedPred, [V2Write_2c_1M]>]>;
887890
888891def V2Write_ArithF : SchedWriteVariant<[
889- SchedVar<IsCheapLSL, [V2Write_1c_1F ]>,
890- SchedVar<NoSchedPred, [V2Write_2c_1M ]>]>;
892+ SchedVar<IsCheapLSL, [V2Write_1c_1F_1Flg ]>,
893+ SchedVar<NoSchedPred, [V2Write_2c_1M_1Flg ]>]>;
891894
892895def V2Write_Logical : SchedWriteVariant<[
893- SchedVar<NeoverseNoLSL, [V2Write_1c_1F ]>,
894- SchedVar<NoSchedPred, [V2Write_2c_1M ]>]>;
896+ SchedVar<NeoverseNoLSL, [V2Write_1c_1F_1Flg ]>,
897+ SchedVar<NoSchedPred, [V2Write_2c_1M_1Flg ]>]>;
895898
896899def V2Write_Extr : SchedWriteVariant<[
897900 SchedVar<IsRORImmIdiomPred, [V2Write_1c_1I]>,
@@ -1106,19 +1109,19 @@ def : InstRW<[V2Write_1c_1B_1R], (instrs BL, BLR)>;
11061109// -----------------------------------------------------------------------------
11071110
11081111// ALU, basic
1109- // ALU, basic, flagset
11101112def : SchedAlias<WriteI, V2Write_1c_1I>;
1111- def : InstRW<[V2Write_1c_1F], (instregex "^(ADD|SUB)S[WX]r[ir]$",
1113+
1114+ // ALU, basic, flagset
1115+ def : InstRW<[V2Write_1c_1F_1Flg],
1116+ (instregex "^(ADD|SUB)S[WX]r[ir]$",
11121117 "^(ADC|SBC)S[WX]r$",
1113- "^ANDS[WX]ri$")>;
1118+ "^ANDS[WX]ri$",
1119+ "^(AND|BIC)S[WX]rr$")>;
11141120def : InstRW<[V2Write_0or1c_1I], (instregex "^MOVZ[WX]i$")>;
11151121
11161122// ALU, extend and shift
11171123def : SchedAlias<WriteIEReg, V2Write_2c_1M>;
11181124
1119- // Conditional compare
1120- def : InstRW<[V2Write_1c_1F], (instregex "^CCM[NP][WX][ir]")>;
1121-
11221125// Arithmetic, LSL shift, shift <= 4
11231126// Arithmetic, flagset, LSL shift, shift <= 4
11241127// Arithmetic, LSR/ASR/ROR shift or LSL shift > 4
@@ -1129,6 +1132,9 @@ def : InstRW<[V2Write_ArithF],
11291132// Arithmetic, immediate to logical address tag
11301133def : InstRW<[V2Write_2c_1M], (instrs ADDG, SUBG)>;
11311134
1135+ // Conditional compare
1136+ def : InstRW<[V2Write_1c_1F_1Flg], (instregex "^CCM[NP][WX][ir]")>;
1137+
11321138// Convert floating-point condition flags
11331139// Flag manipulation instructions
11341140def : WriteRes<WriteSys, []> { let Latency = 1; }
@@ -1138,8 +1144,10 @@ def : InstRW<[V2Write_2c_1M], (instrs IRG, IRGstack)>;
11381144
11391145// Insert Tag Mask
11401146// Subtract Pointer
1147+ def : InstRW<[V2Write_1c_1I], (instrs GMI, SUBP)>;
1148+
11411149// Subtract Pointer, flagset
1142- def : InstRW<[V2Write_1c_1I ], (instrs GMI, SUBP, SUBPS)>;
1150+ def : InstRW<[V2Write_1c_1F_1Flg ], (instrs SUBPS)>;
11431151
11441152// Logical, shift, no flagset
11451153def : InstRW<[V2Write_1c_1I], (instregex "^(AND|BIC|EON|EOR|ORN)[WX]rs$")>;
0 commit comments