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

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: Addressed issues and add support for a few other platforms. Created 5 years, 1 month 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 kArm64Float64Cmp:
85 case kArm64Float64Add:
86 case kArm64Float64Sub:
87 case kArm64Float64Mul:
88 case kArm64Float64Div:
89 case kArm64Float64Mod:
90 case kArm64Float64Max:
91 case kArm64Float64Min:
92 case kArm64Float64Abs:
93 case kArm64Float64Neg:
94 case kArm64Float64Sqrt:
95 case kArm64Float64RoundDown:
96 case kArm64Float64RoundTiesAway:
97 case kArm64Float64RoundTruncate:
98 case kArm64Float64RoundTiesEven:
99 case kArm64Float64RoundUp:
100 case kArm64Float32ToFloat64:
101 case kArm64Float64ToFloat32:
102 case kArm64Float64ToInt32:
103 case kArm64Float64ToUint32:
104 case kArm64Float64ToInt64:
105 case kArm64Float64ToUint64:
106 case kArm64Int32ToFloat64:
107 case kArm64Int64ToFloat32:
108 case kArm64Int64ToFloat64:
109 case kArm64Uint32ToFloat64:
110 case kArm64Uint64ToFloat32:
111 case kArm64Uint64ToFloat64:
112 case kArm64Float64ExtractLowWord32:
113 case kArm64Float64ExtractHighWord32:
114 case kArm64Float64InsertLowWord32:
115 case kArm64Float64InsertHighWord32:
116 case kArm64Float64MoveU64:
117 case kArm64U64MoveFloat64:
118 return kNoOpcodeFlags;
119
120 case kArm64TestAndBranch32:
121 case kArm64TestAndBranch:
122 case kArm64CompareAndBranch32:
123 return kIsBlockTerminator;
124
125 case kArm64LdrS:
126 case kArm64LdrD:
127 case kArm64Ldrb:
128 case kArm64Ldrsb:
129 case kArm64Ldrh:
130 case kArm64Ldrsh:
131 case kArm64LdrW:
132 case kArm64Ldr:
133 return kIsLoadOperation;
134
135 case kArm64ClaimForCallArguments:
136 case kArm64Poke:
137 case kArm64PokePair:
138 case kArm64StrS:
139 case kArm64StrD:
140 case kArm64Strb:
141 case kArm64Strh:
142 case kArm64StrW:
143 case kArm64Str:
144 return kHasSideEffect;
145
146 #define CASE(Name) case k##Name:
147 COMMON_ARCH_OPCODE_LIST(CASE)
148 #undef CASE
149 // Already covered in architecture independent code.
150 UNREACHABLE();
151 }
152 }
153
154
155 int InstructionScheduler::GetInstructionLatency(const Instruction* instr) {
156 // Basic latency modeling for arm64 instructions. They have been determined
157 // in an empirical way.
158 switch (instr->arch_opcode()) {
159 case kArm64Float32ToFloat64:
160 case kArm64Float64ToFloat32:
161 case kArm64Float64ToInt32:
162 case kArm64Float64ToUint32:
163 case kArm64Int32ToFloat64:
164 case kArm64Uint32ToFloat64:
165 return 3;
166
167 case kArm64Float64Add:
168 case kArm64Float64Sub:
169 return 2;
170
171 case kArm64Float64Mul:
172 return 3;
173
174 case kArm64Float64Div:
175 return 6;
176
177 case kArm64Lsl:
178 case kArm64Lsl32:
179 case kArm64Lsr:
180 case kArm64Lsr32:
181 case kArm64Asr:
182 case kArm64Asr32:
183 case kArm64Ror:
184 case kArm64Ror32:
185 return 3;
186
187 case kCheckedLoadInt8:
188 case kCheckedLoadUint8:
189 case kCheckedLoadInt16:
190 case kCheckedLoadUint16:
191 case kCheckedLoadWord32:
192 case kCheckedLoadWord64:
193 case kCheckedLoadFloat32:
194 case kCheckedLoadFloat64:
195 case kArm64LdrS:
196 case kArm64LdrD:
197 case kArm64Ldrb:
198 case kArm64Ldrsb:
199 case kArm64Ldrh:
200 case kArm64Ldrsh:
201 case kArm64LdrW:
202 case kArm64Ldr:
203 return 5;
204
205 default:
206 return 1;
207 }
208 }
209
210 } // namespace compiler
211 } // namespace internal
212 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698