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

Side by Side Diff: src/compiler/arm64/instruction-scheduler-arm64.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 2014 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 kArm64Add:
15 case kArm64Add32:
16 case kArm64And:
17 case kArm64And32:
18 case kArm64Bic:
19 case kArm64Bic32:
20 case kArm64Clz:
21 case kArm64Clz32:
22 case kArm64Cmp:
23 case kArm64Cmp32:
24 case kArm64Cmn:
25 case kArm64Cmn32:
26 case kArm64Tst:
27 case kArm64Tst32:
28 case kArm64Or:
29 case kArm64Or32:
30 case kArm64Orn:
31 case kArm64Orn32:
32 case kArm64Eor:
33 case kArm64Eor32:
34 case kArm64Eon:
35 case kArm64Eon32:
36 case kArm64Sub:
37 case kArm64Sub32:
38 case kArm64Mul:
39 case kArm64Mul32:
40 case kArm64Smull:
41 case kArm64Umull:
42 case kArm64Madd:
43 case kArm64Madd32:
44 case kArm64Msub:
45 case kArm64Msub32:
46 case kArm64Mneg:
47 case kArm64Mneg32:
48 case kArm64Idiv:
49 case kArm64Idiv32:
50 case kArm64Udiv:
51 case kArm64Udiv32:
52 case kArm64Imod:
53 case kArm64Imod32:
54 case kArm64Umod:
55 case kArm64Umod32:
56 case kArm64Not:
57 case kArm64Not32:
58 case kArm64Lsl:
59 case kArm64Lsl32:
60 case kArm64Lsr:
61 case kArm64Lsr32:
62 case kArm64Asr:
63 case kArm64Asr32:
64 case kArm64Ror:
65 case kArm64Ror32:
66 case kArm64Mov32:
67 case kArm64Sxtb32:
68 case kArm64Sxth32:
69 case kArm64Sxtw:
70 case kArm64Sbfx32:
71 case kArm64Ubfx:
72 case kArm64Ubfx32:
73 case kArm64Ubfiz32:
74 case kArm64Bfi:
75 case kArm64Float32Cmp:
76 case kArm64Float32Add:
77 case kArm64Float32Sub:
78 case kArm64Float32Mul:
79 case kArm64Float32Div:
80 case kArm64Float32Max:
81 case kArm64Float32Min:
82 case kArm64Float32Abs:
83 case kArm64Float32Sqrt:
84 case kArm64Float32RoundDown:
85 case kArm64Float64Cmp:
86 case kArm64Float64Add:
87 case kArm64Float64Sub:
88 case kArm64Float64Mul:
89 case kArm64Float64Div:
90 case kArm64Float64Mod:
91 case kArm64Float64Max:
92 case kArm64Float64Min:
93 case kArm64Float64Abs:
94 case kArm64Float64Neg:
95 case kArm64Float64Sqrt:
96 case kArm64Float64RoundDown:
97 case kArm64Float64RoundTiesAway:
98 case kArm64Float64RoundTruncate:
99 case kArm64Float64RoundTiesEven:
100 case kArm64Float64RoundUp:
101 case kArm64Float32RoundTiesEven:
102 case kArm64Float32RoundTruncate:
103 case kArm64Float32RoundUp:
104 case kArm64Float32ToFloat64:
105 case kArm64Float64ToFloat32:
106 case kArm64Float64ToInt32:
107 case kArm64Float64ToUint32:
108 case kArm64Float64ToInt64:
109 case kArm64Float64ToUint64:
110 case kArm64Int32ToFloat64:
111 case kArm64Int64ToFloat32:
112 case kArm64Int64ToFloat64:
113 case kArm64Uint32ToFloat64:
114 case kArm64Uint64ToFloat32:
115 case kArm64Uint64ToFloat64:
116 case kArm64Float64ExtractLowWord32:
117 case kArm64Float64ExtractHighWord32:
118 case kArm64Float64InsertLowWord32:
119 case kArm64Float64InsertHighWord32:
120 case kArm64Float64MoveU64:
121 case kArm64U64MoveFloat64:
122 return kNoOpcodeFlags;
123
124 case kArm64TestAndBranch32:
125 case kArm64TestAndBranch:
126 case kArm64CompareAndBranch32:
127 return kIsBlockTerminator;
128
129 case kArm64LdrS:
130 case kArm64LdrD:
131 case kArm64Ldrb:
132 case kArm64Ldrsb:
133 case kArm64Ldrh:
134 case kArm64Ldrsh:
135 case kArm64LdrW:
136 case kArm64Ldr:
137 return kIsLoadOperation;
138
139 case kArm64ClaimForCallArguments:
140 case kArm64Poke:
141 case kArm64PokePair:
142 case kArm64StrS:
143 case kArm64StrD:
144 case kArm64Strb:
145 case kArm64Strh:
146 case kArm64StrW:
147 case kArm64Str:
148 return kHasSideEffect;
149
150 #define CASE(Name) case k##Name:
151 COMMON_ARCH_OPCODE_LIST(CASE)
152 #undef CASE
153 // Already covered in architecture independent code.
154 UNREACHABLE();
155 }
156 }
157
158
159 int InstructionScheduler::GetInstructionLatency(const Instruction* instr) {
160 // Basic latency modeling for arm64 instructions. They have been determined
161 // in an empirical way.
162 switch (instr->arch_opcode()) {
163 case kArm64Float32ToFloat64:
164 case kArm64Float64ToFloat32:
165 case kArm64Float64ToInt32:
166 case kArm64Float64ToUint32:
167 case kArm64Int32ToFloat64:
168 case kArm64Uint32ToFloat64:
169 return 3;
170
171 case kArm64Float64Add:
172 case kArm64Float64Sub:
173 return 2;
174
175 case kArm64Float64Mul:
176 return 3;
177
178 case kArm64Float64Div:
179 return 6;
180
181 case kArm64Lsl:
182 case kArm64Lsl32:
183 case kArm64Lsr:
184 case kArm64Lsr32:
185 case kArm64Asr:
186 case kArm64Asr32:
187 case kArm64Ror:
188 case kArm64Ror32:
189 return 3;
190
191 case kCheckedLoadInt8:
192 case kCheckedLoadUint8:
193 case kCheckedLoadInt16:
194 case kCheckedLoadUint16:
195 case kCheckedLoadWord32:
196 case kCheckedLoadWord64:
197 case kCheckedLoadFloat32:
198 case kCheckedLoadFloat64:
199 case kArm64LdrS:
200 case kArm64LdrD:
201 case kArm64Ldrb:
202 case kArm64Ldrsb:
203 case kArm64Ldrh:
204 case kArm64Ldrsh:
205 case kArm64LdrW:
206 case kArm64Ldr:
207 return 5;
208
209 default:
210 return 1;
211 }
212 }
213
214 } // namespace compiler
215 } // namespace internal
216 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698