@@ -52,11 +52,11 @@ 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
5859def V2UnitF : ProcResGroup<[V2UnitS0, V2UnitS1, V2UnitM0, V2UnitM1]>; // Integer single-cycle 0/1 and single/multicycle 0/1
59- def V2UnitG : ProcResGroup<[V2UnitS0, V2UnitS1, V2UnitM0]>; // Integer single-cycle 0/1 and single/multicycle 0
6060def V2UnitI : ProcResGroup<[V2UnitS0, V2UnitS1, V2UnitS2, V2UnitS3, V2UnitM0, V2UnitM1]>; // Integer single-cycle 0/1/2/3 and single/multicycle 0/1
6161def V2UnitM : ProcResGroup<[V2UnitM0, V2UnitM1]>; // Integer single/multicycle 0/1
6262def V2UnitL : ProcResGroup<[V2UnitL01, V2UnitL2]>; // Load/Store 0/1 and Load 2
@@ -98,12 +98,13 @@ def V2Write_0c : SchedWriteRes<[]> { let Latency = 0; }
9898
9999def V2Write_1c_1B : SchedWriteRes<[V2UnitB]> { let Latency = 1; }
100100def V2Write_1c_1F : SchedWriteRes<[V2UnitF]> { let Latency = 1; }
101- def V2Write_1c_1G : SchedWriteRes<[V2UnitG ]> { let Latency = 1; }
101+ def V2Write_1c_1F_1Flg : SchedWriteRes<[V2UnitF, V2UnitFlg ]> { let Latency = 1; }
102102def V2Write_1c_1I : SchedWriteRes<[V2UnitI]> { let Latency = 1; }
103103def V2Write_1c_1M : SchedWriteRes<[V2UnitM]> { let Latency = 1; }
104104def V2Write_1c_1M0 : SchedWriteRes<[V2UnitM0]> { let Latency = 1; }
105105def V2Write_1c_1L01 : SchedWriteRes<[V2UnitL01]> { let Latency = 1; }
106106def V2Write_2c_1M : SchedWriteRes<[V2UnitM]> { let Latency = 2; }
107+ def V2Write_2c_1M_1Flg : SchedWriteRes<[V2UnitM, V2UnitFlg]> { let Latency = 2; }
107108def V2Write_3c_1M : SchedWriteRes<[V2UnitM]> { let Latency = 3; }
108109def V2Write_2c_1M0 : SchedWriteRes<[V2UnitM0]> { let Latency = 2; }
109110def V2Write_3c_1M0 : SchedWriteRes<[V2UnitM0]> { let Latency = 3; }
@@ -888,12 +889,12 @@ def V2Write_ArithI : SchedWriteVariant<[
888889 SchedVar<NoSchedPred, [V2Write_2c_1M]>]>;
889890
890891def V2Write_ArithF : SchedWriteVariant<[
891- SchedVar<IsCheapLSL, [V2Write_1c_1G ]>,
892- SchedVar<NoSchedPred, [V2Write_2c_1M ]>]>;
892+ SchedVar<IsCheapLSL, [V2Write_1c_1F_1Flg ]>,
893+ SchedVar<NoSchedPred, [V2Write_2c_1M_1Flg ]>]>;
893894
894895def V2Write_Logical : SchedWriteVariant<[
895- SchedVar<NeoverseNoLSL, [V2Write_1c_1G ]>,
896- SchedVar<NoSchedPred, [V2Write_2c_1M ]>]>;
896+ SchedVar<NeoverseNoLSL, [V2Write_1c_1F_1Flg ]>,
897+ SchedVar<NoSchedPred, [V2Write_2c_1M_1Flg ]>]>;
897898
898899def V2Write_Extr : SchedWriteVariant<[
899900 SchedVar<IsRORImmIdiomPred, [V2Write_1c_1I]>,
@@ -1111,7 +1112,7 @@ def : InstRW<[V2Write_1c_1B_1R], (instrs BL, BLR)>;
11111112def : SchedAlias<WriteI, V2Write_1c_1I>;
11121113
11131114// ALU, basic, flagset
1114- def : InstRW<[V2Write_1c_1G ],
1115+ def : InstRW<[V2Write_1c_1F_1Flg ],
11151116 (instregex "^(ADD|SUB)S[WX]r[ir]$",
11161117 "^(ADC|SBC)S[WX]r$",
11171118 "^ANDS[WX]ri$",
@@ -1132,7 +1133,7 @@ def : InstRW<[V2Write_ArithF],
11321133def : InstRW<[V2Write_2c_1M], (instrs ADDG, SUBG)>;
11331134
11341135// Conditional compare
1135- def : InstRW<[V2Write_1c_1G ], (instregex "^CCM[NP][WX][ir]")>;
1136+ def : InstRW<[V2Write_1c_1F_1Flg ], (instregex "^CCM[NP][WX][ir]")>;
11361137
11371138// Convert floating-point condition flags
11381139// Flag manipulation instructions
@@ -1146,7 +1147,7 @@ def : InstRW<[V2Write_2c_1M], (instrs IRG, IRGstack)>;
11461147def : InstRW<[V2Write_1c_1I], (instrs GMI, SUBP)>;
11471148
11481149// Subtract Pointer, flagset
1149- def : InstRW<[V2Write_1c_1G ], (instrs SUBPS)>;
1150+ def : InstRW<[V2Write_1c_1F_1Flg ], (instrs SUBPS)>;
11501151
11511152// Logical, shift, no flagset
11521153def : InstRW<[V2Write_1c_1I], (instregex "^(AND|BIC|EON|EOR|ORN)[WX]rs$")>;
0 commit comments