Skip to content

Commit b542fb3

Browse files
committed
[AArch64][Falkor] Fix some sched details.
- Remove all uses of base sched model entries and set them all to Unsupported so all the opcodes are described in AArch64SchedFalkorDetails.td. - Remove entries for unsupported half-float opcodes. - Remove entries for unsupported LSE extension opcodes. - Add entry for MOVbaseTLS (and set Sched in base td file entry to WriteSys) and a few other pseudo ops. - Fix a few FP load/store with reg offset entries to use the LSLfast predicates. - Add Q size BIF/BIT/BSL entries. - Fix swapped Q/D sized CLS/CLZ/CNT/RBIT entires. - Fix pre/post increment address register latency (this operand is always dest 0). - Fix swapped FCVTHD/FCVTHS/FCVTDH/FCVTDS entries. - Fix XYZ resource over usage on LD[1-4] opcodes. llvm-svn: 304108
1 parent e38cea0 commit b542fb3

File tree

4 files changed

+461
-294
lines changed

4 files changed

+461
-294
lines changed

llvm/lib/Target/AArch64/AArch64InstrInfo.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ def MSRpstateImm4 : MSRpstateImm0_15;
442442
// TPIDR_EL0. Add pseudo op so we can mark it as not having any side effects.
443443
let hasSideEffects = 0 in
444444
def MOVbaseTLS : Pseudo<(outs GPR64:$dst), (ins),
445-
[(set GPR64:$dst, AArch64threadpointer)]>, Sched<[]>;
445+
[(set GPR64:$dst, AArch64threadpointer)]>, Sched<[WriteSys]>;
446446

447447
// The cycle counter PMC register is PMCCNTR_EL0.
448448
let Predicates = [HasPerfMon] in

llvm/lib/Target/AArch64/AArch64SchedFalkor.td

Lines changed: 36 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -61,56 +61,42 @@ let SchedModel = FalkorModel in {
6161

6262
let SchedModel = FalkorModel in {
6363

64-
def : WriteRes<WriteImm, [FalkorUnitXYZ]> { let Latency = 1; }
65-
def : WriteRes<WriteI, [FalkorUnitXYZ]> { let Latency = 1; }
66-
def : WriteRes<WriteISReg, [FalkorUnitVXVY, FalkorUnitVXVY]>
67-
{ let Latency = 1; let NumMicroOps = 2; }
68-
def : WriteRes<WriteIEReg, [FalkorUnitXYZ, FalkorUnitXYZ]>
69-
{ let Latency = 2; let NumMicroOps = 2; }
70-
def : WriteRes<WriteExtr, [FalkorUnitXYZ, FalkorUnitXYZ]>
71-
{ let Latency = 2; let NumMicroOps = 2; }
72-
def : WriteRes<WriteIS, [FalkorUnitXYZ]> { let Latency = 1; }
73-
def : WriteRes<WriteID32, [FalkorUnitX, FalkorUnitZ]>
74-
{ let Latency = 8; let NumMicroOps = 2; }
75-
def : WriteRes<WriteID64, [FalkorUnitX, FalkorUnitZ]>
76-
{ let Latency = 16; let NumMicroOps = 2; }
77-
def : WriteRes<WriteIM32, [FalkorUnitX]> { let Latency = 4; }
78-
def : WriteRes<WriteIM64, [FalkorUnitX]> { let Latency = 5; }
79-
def : WriteRes<WriteBr, [FalkorUnitB]> { let Latency = 1; }
80-
def : WriteRes<WriteBrReg, [FalkorUnitB]> { let Latency = 1; }
81-
def : WriteRes<WriteLD, [FalkorUnitLD]> { let Latency = 3; }
82-
def : WriteRes<WriteST, [FalkorUnitST, FalkorUnitSD]>
83-
{ let Latency = 0; let NumMicroOps = 2; }
84-
def : WriteRes<WriteSTP, [FalkorUnitST, FalkorUnitSD]>
85-
{ let Latency = 0; let NumMicroOps = 2; }
86-
def : WriteRes<WriteAdr, [FalkorUnitXYZ]> { let Latency = 1; }
87-
def : WriteRes<WriteLDIdx, [FalkorUnitLD]> { let Latency = 5; }
88-
def : WriteRes<WriteSTIdx, [FalkorUnitST, FalkorUnitSD]>
89-
{ let Latency = 0; let NumMicroOps = 2; }
90-
def : WriteRes<WriteF, [FalkorUnitVXVY, FalkorUnitVXVY]>
91-
{ let Latency = 3; let NumMicroOps = 2; }
92-
def : WriteRes<WriteFCmp, [FalkorUnitVXVY]> { let Latency = 2; }
93-
def : WriteRes<WriteFCvt, [FalkorUnitVXVY]> { let Latency = 4; }
94-
def : WriteRes<WriteFCopy, [FalkorUnitVXVY]> { let Latency = 4; }
95-
def : WriteRes<WriteFImm, [FalkorUnitVXVY]> { let Latency = 4; }
96-
def : WriteRes<WriteFMul, [FalkorUnitVXVY, FalkorUnitVXVY]>
97-
{ let Latency = 6; let NumMicroOps = 2; }
98-
def : WriteRes<WriteFDiv, [FalkorUnitVXVY, FalkorUnitVXVY]>
99-
{ let Latency = 12; let NumMicroOps = 2; } // Fragent -1 / NoRSV +1
100-
def : WriteRes<WriteV, [FalkorUnitVXVY]> { let Latency = 6; }
101-
def : WriteRes<WriteVLD, [FalkorUnitLD]> { let Latency = 3; }
102-
def : WriteRes<WriteVST, [FalkorUnitST, FalkorUnitVSD]>
103-
{ let Latency = 0; let NumMicroOps = 2; }
104-
105-
def : WriteRes<WriteSys, []> { let Latency = 1; }
106-
def : WriteRes<WriteBarrier, []> { let Latency = 1; }
107-
def : WriteRes<WriteHint, []> { let Latency = 1; }
108-
109-
def : WriteRes<WriteLDHi, []> { let Latency = 3; }
110-
111-
def : WriteRes<WriteAtomic, []> { let Unsupported = 1; }
112-
113-
// No forwarding logic is modelled yet.
64+
// These WriteRes entries are not used in the Falkor sched model.
65+
def : WriteRes<WriteImm, []> { let Unsupported = 1; }
66+
def : WriteRes<WriteI, []> { let Unsupported = 1; }
67+
def : WriteRes<WriteISReg, []> { let Unsupported = 1; }
68+
def : WriteRes<WriteIEReg, []> { let Unsupported = 1; }
69+
def : WriteRes<WriteExtr, []> { let Unsupported = 1; }
70+
def : WriteRes<WriteIS, []> { let Unsupported = 1; }
71+
def : WriteRes<WriteID32, []> { let Unsupported = 1; }
72+
def : WriteRes<WriteID64, []> { let Unsupported = 1; }
73+
def : WriteRes<WriteIM32, []> { let Unsupported = 1; }
74+
def : WriteRes<WriteIM64, []> { let Unsupported = 1; }
75+
def : WriteRes<WriteBr, []> { let Unsupported = 1; }
76+
def : WriteRes<WriteBrReg, []> { let Unsupported = 1; }
77+
def : WriteRes<WriteLD, []> { let Unsupported = 1; }
78+
def : WriteRes<WriteST, []> { let Unsupported = 1; }
79+
def : WriteRes<WriteSTP, []> { let Unsupported = 1; }
80+
def : WriteRes<WriteAdr, []> { let Unsupported = 1; }
81+
def : WriteRes<WriteLDIdx, []> { let Unsupported = 1; }
82+
def : WriteRes<WriteSTIdx, []> { let Unsupported = 1; }
83+
def : WriteRes<WriteF, []> { let Unsupported = 1; }
84+
def : WriteRes<WriteFCmp, []> { let Unsupported = 1; }
85+
def : WriteRes<WriteFCvt, []> { let Unsupported = 1; }
86+
def : WriteRes<WriteFCopy, []> { let Unsupported = 1; }
87+
def : WriteRes<WriteFImm, []> { let Unsupported = 1; }
88+
def : WriteRes<WriteFMul, []> { let Unsupported = 1; }
89+
def : WriteRes<WriteFDiv, []> { let Unsupported = 1; }
90+
def : WriteRes<WriteV, []> { let Unsupported = 1; }
91+
def : WriteRes<WriteVLD, []> { let Unsupported = 1; }
92+
def : WriteRes<WriteVST, []> { let Unsupported = 1; }
93+
def : WriteRes<WriteSys, []> { let Unsupported = 1; }
94+
def : WriteRes<WriteBarrier, []> { let Unsupported = 1; }
95+
def : WriteRes<WriteHint, []> { let Unsupported = 1; }
96+
def : WriteRes<WriteLDHi, []> { let Unsupported = 1; }
97+
def : WriteRes<WriteAtomic, []> { let Unsupported = 1; }
98+
99+
// These ReadAdvance entries are not used in the Falkor sched model.
114100
def : ReadAdvance<ReadI, 0>;
115101
def : ReadAdvance<ReadISReg, 0>;
116102
def : ReadAdvance<ReadIEReg, 0>;

0 commit comments

Comments
 (0)