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

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

Issue 1375253002: [WIP][turbofan] Instruction scheduler for Turbofan. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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
OLDNEW
(Empty)
1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "src/compiler/instruction-scheduler.h"
6
7 namespace v8 {
8 namespace internal {
9 namespace compiler {
10
11 int InstructionScheduler::GetTargetInstructionFlags(
12 const Instruction* instr) const {
13 switch (instr->arch_opcode()) {
14 case kIA32Add:
15 case kIA32And:
16 case kIA32Cmp:
17 case kIA32Test:
18 case kIA32Or:
19 case kIA32Xor:
20 case kIA32Sub:
21 case kIA32Imul:
22 case kIA32ImulHigh:
23 case kIA32UmulHigh:
24 case kIA32Idiv:
25 case kIA32Udiv:
26 case kIA32Not:
27 case kIA32Neg:
28 case kIA32Shl:
29 case kIA32Shr:
30 case kIA32Sar:
31 case kIA32Ror:
32 case kIA32Lzcnt:
33 case kIA32Tzcnt:
34 case kIA32Popcnt:
35 case kIA32Lea:
36 case kSSEFloat32Cmp:
37 case kSSEFloat32Add:
38 case kSSEFloat32Sub:
39 case kSSEFloat32Mul:
40 case kSSEFloat32Div:
41 case kSSEFloat32Max:
42 case kSSEFloat32Min:
43 case kSSEFloat32Abs:
44 case kSSEFloat32Neg:
45 case kSSEFloat32Sqrt:
46 case kSSEFloat32Round:
47 case kSSEFloat64Cmp:
48 case kSSEFloat64Add:
49 case kSSEFloat64Sub:
50 case kSSEFloat64Mul:
51 case kSSEFloat64Div:
52 case kSSEFloat64Mod:
53 case kSSEFloat64Max:
54 case kSSEFloat64Min:
55 case kSSEFloat64Abs:
56 case kSSEFloat64Neg:
57 case kSSEFloat64Sqrt:
58 case kSSEFloat64Round:
59 case kSSEFloat32ToFloat64:
60 case kSSEFloat64ToFloat32:
61 case kSSEFloat64ToInt32:
62 case kSSEFloat64ToUint32:
63 case kSSEInt32ToFloat64:
64 case kSSEUint32ToFloat64:
65 case kSSEFloat64ExtractLowWord32:
66 case kSSEFloat64ExtractHighWord32:
67 case kSSEFloat64InsertLowWord32:
68 case kSSEFloat64InsertHighWord32:
69 case kSSEFloat64LoadLowWord32:
70 case kAVXFloat32Add:
71 case kAVXFloat32Sub:
72 case kAVXFloat32Mul:
73 case kAVXFloat32Div:
74 case kAVXFloat32Max:
75 case kAVXFloat32Min:
76 case kAVXFloat64Add:
77 case kAVXFloat64Sub:
78 case kAVXFloat64Mul:
79 case kAVXFloat64Div:
80 case kAVXFloat64Max:
81 case kAVXFloat64Min:
82 case kAVXFloat64Abs:
83 case kAVXFloat64Neg:
84 case kAVXFloat32Abs:
85 case kAVXFloat32Neg:
86 case kIA32BitcastFI:
87 case kIA32BitcastIF:
88 return (instr->addressing_mode() == kMode_None)
89 ? kNoOpcodeFlags
90 : kIsLoadOperation | kHasSideEffect;
91
92 case kIA32Movsxbl:
93 case kIA32Movzxbl:
94 case kIA32Movb:
95 case kIA32Movsxwl:
96 case kIA32Movzxwl:
97 case kIA32Movw:
98 case kIA32Movl:
99 case kIA32Movss:
100 case kIA32Movsd:
101 // Moves are used for memory load/store operations.
102 return instr->HasOutput() ? kIsLoadOperation : kHasSideEffect;
103
104 case kIA32StackCheck:
105 return kIsLoadOperation;
106
107 case kIA32Push:
108 case kIA32Poke:
109 return kHasSideEffect;
110
111 #define CASE(Name) case k##Name:
112 COMMON_ARCH_OPCODE_LIST(CASE)
113 #undef CASE
114 // Already covered in architecture independent code.
115 UNREACHABLE();
116 }
117 }
118
119
120 int InstructionScheduler::GetInstructionLatency(const Instruction* instr) {
121 // TODO(all): Add instruction cost modeling.
122 return 1;
123 }
124
125 } // namespace compiler
126 } // namespace internal
127 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698