Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(444)

Side by Side Diff: src/compiler/arm64/instruction-scheduler-arm64.cc

Issue 1905883003: [turbofan] Refined cost model for instruction scheduling on arm64. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: addressed comment Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/instruction-scheduler.h" 5 #include "src/compiler/instruction-scheduler.h"
6 6
7 namespace v8 { 7 namespace v8 {
8 namespace internal { 8 namespace internal {
9 namespace compiler { 9 namespace compiler {
10 10
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 169
170 UNREACHABLE(); 170 UNREACHABLE();
171 return kNoOpcodeFlags; 171 return kNoOpcodeFlags;
172 } 172 }
173 173
174 174
175 int InstructionScheduler::GetInstructionLatency(const Instruction* instr) { 175 int InstructionScheduler::GetInstructionLatency(const Instruction* instr) {
176 // Basic latency modeling for arm64 instructions. They have been determined 176 // Basic latency modeling for arm64 instructions. They have been determined
177 // in an empirical way. 177 // in an empirical way.
178 switch (instr->arch_opcode()) { 178 switch (instr->arch_opcode()) {
179 case kArm64Float32ToFloat64: 179 case kArm64Add:
180 case kArm64Float64ToFloat32: 180 case kArm64Add32:
181 case kArm64Float64ToInt32: 181 case kArm64And:
182 case kArm64Float64ToUint32: 182 case kArm64And32:
183 case kArm64Int32ToFloat64: 183 case kArm64Bic:
184 case kArm64Uint32ToFloat64: 184 case kArm64Bic32:
185 return 3; 185 case kArm64Cmn:
186 case kArm64Cmn32:
187 case kArm64Cmp:
188 case kArm64Cmp32:
189 case kArm64Eon:
190 case kArm64Eon32:
191 case kArm64Eor:
192 case kArm64Eor32:
193 case kArm64Not:
194 case kArm64Not32:
195 case kArm64Or:
196 case kArm64Or32:
197 case kArm64Orn:
198 case kArm64Orn32:
199 case kArm64Sub:
200 case kArm64Sub32:
201 case kArm64Tst:
202 case kArm64Tst32:
203 if (instr->addressing_mode() != kMode_None) {
204 return 3;
205 } else {
206 return 1;
207 }
186 208
187 case kArm64Float64Add: 209 case kArm64Clz:
188 case kArm64Float64Sub: 210 case kArm64Clz32:
189 return 2; 211 case kArm64Sbfx32:
190 212 case kArm64Sxtb32:
191 case kArm64Float64Mul: 213 case kArm64Sxth32:
192 return 3; 214 case kArm64Sxtw:
193 215 case kArm64Ubfiz32:
194 case kArm64Float64Div: 216 case kArm64Ubfx:
195 return 6; 217 case kArm64Ubfx32:
218 return 1;
196 219
197 case kArm64Lsl: 220 case kArm64Lsl:
198 case kArm64Lsl32: 221 case kArm64Lsl32:
199 case kArm64Lsr: 222 case kArm64Lsr:
200 case kArm64Lsr32: 223 case kArm64Lsr32:
201 case kArm64Asr: 224 case kArm64Asr:
202 case kArm64Asr32: 225 case kArm64Asr32:
203 case kArm64Ror: 226 case kArm64Ror:
204 case kArm64Ror32: 227 case kArm64Ror32:
205 return 3; 228 return 1;
229
230 case kArm64Ldr:
231 case kArm64LdrD:
232 case kArm64LdrS:
233 case kArm64LdrW:
234 case kArm64Ldrb:
235 case kArm64Ldrh:
236 case kArm64Ldrsb:
237 case kArm64Ldrsh:
238 return 11;
206 239
207 case kCheckedLoadInt8: 240 case kCheckedLoadInt8:
208 case kCheckedLoadUint8: 241 case kCheckedLoadUint8:
209 case kCheckedLoadInt16: 242 case kCheckedLoadInt16:
210 case kCheckedLoadUint16: 243 case kCheckedLoadUint16:
211 case kCheckedLoadWord32: 244 case kCheckedLoadWord32:
212 case kCheckedLoadWord64: 245 case kCheckedLoadWord64:
213 case kCheckedLoadFloat32: 246 case kCheckedLoadFloat32:
214 case kCheckedLoadFloat64: 247 case kCheckedLoadFloat64:
215 case kArm64LdrS: 248 return 5;
216 case kArm64LdrD: 249
217 case kArm64Ldrb: 250 case kArm64Str:
218 case kArm64Ldrsb: 251 case kArm64StrD:
219 case kArm64Ldrh: 252 case kArm64StrS:
220 case kArm64Ldrsh: 253 case kArm64StrW:
221 case kArm64LdrW: 254 case kArm64Strb:
222 case kArm64Ldr: 255 case kArm64Strh:
256 return 1;
257
258 case kCheckedStoreWord8:
259 case kCheckedStoreWord16:
260 case kCheckedStoreWord32:
261 case kCheckedStoreWord64:
262 case kCheckedStoreFloat32:
263 case kCheckedStoreFloat64:
264 return 1;
265
266 case kArm64Madd32:
267 case kArm64Mneg32:
268 case kArm64Msub32:
269 case kArm64Mul32:
270 return 3;
271
272 case kArm64Madd:
273 case kArm64Mneg:
274 case kArm64Msub:
275 case kArm64Mul:
276 return 5;
277
278 case kArm64Idiv32:
279 case kArm64Udiv32:
280 return 12;
281
282 case kArm64Idiv:
283 case kArm64Udiv:
284 return 20;
285
286 case kArm64Float32Add:
287 case kArm64Float32Sub:
288 case kArm64Float64Add:
289 case kArm64Float64Sub:
290 return 5;
291
292 case kArm64Float32Abs:
293 case kArm64Float32Cmp:
294 case kArm64Float64Abs:
295 case kArm64Float64Cmp:
296 case kArm64Float64Neg:
297 return 3;
298
299 case kArm64Float32Div:
300 case kArm64Float32Sqrt:
301 return 12;
302
303 case kArm64Float64Div:
304 case kArm64Float64Sqrt:
305 return 19;
306
307 case kArm64Float32RoundDown:
308 case kArm64Float32RoundTiesEven:
309 case kArm64Float32RoundTruncate:
310 case kArm64Float32RoundUp:
311 case kArm64Float64RoundDown:
312 case kArm64Float64RoundTiesAway:
313 case kArm64Float64RoundTiesEven:
314 case kArm64Float64RoundTruncate:
315 case kArm64Float64RoundUp:
316 return 5;
317
318 case kArm64Float32ToFloat64:
319 case kArm64Float64ToFloat32:
320 case kArm64Float64ToInt32:
321 case kArm64Float64ToUint32:
322 case kArm64Float32ToInt64:
323 case kArm64Float64ToInt64:
324 case kArm64Float32ToUint64:
325 case kArm64Float64ToUint64:
326 case kArm64Int32ToFloat64:
327 case kArm64Int64ToFloat32:
328 case kArm64Int64ToFloat64:
329 case kArm64Uint32ToFloat64:
330 case kArm64Uint64ToFloat32:
331 case kArm64Uint64ToFloat64:
223 return 5; 332 return 5;
224 333
225 default: 334 default:
226 return 1; 335 return 2;
227 } 336 }
228 } 337 }
229 338
230 } // namespace compiler 339 } // namespace compiler
231 } // namespace internal 340 } // namespace internal
232 } // namespace v8 341 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698