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

Side by Side Diff: src/type-info.cc

Issue 2407923002: Revert of [Interpreter] Collect feedback about Oddballs in Subtract Stub. (Closed)
Patch Set: Created 4 years, 2 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 | « src/type-feedback-vector-inl.h ('k') | 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/type-info.h" 5 #include "src/type-info.h"
6 6
7 #include "src/ast/ast.h" 7 #include "src/ast/ast.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/ic/ic.h" 9 #include "src/ic/ic.h"
10 #include "src/ic/stub-cache.h" 10 #include "src/ic/stub-cache.h"
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 return AstType::Number(); 203 return AstType::Number();
204 case CompareOperationHint::kNumberOrOddball: 204 case CompareOperationHint::kNumberOrOddball:
205 return AstType::NumberOrOddball(); 205 return AstType::NumberOrOddball();
206 case CompareOperationHint::kAny: 206 case CompareOperationHint::kAny:
207 return AstType::Any(); 207 return AstType::Any();
208 } 208 }
209 UNREACHABLE(); 209 UNREACHABLE();
210 return AstType::None(); 210 return AstType::None();
211 } 211 }
212 212
213 AstType* BinaryOpFeedbackToType(int hint) { 213 AstType* BinaryOpHintToType(BinaryOperationHint hint) {
214 switch (hint) { 214 switch (hint) {
215 case BinaryOperationFeedback::kNone: 215 case BinaryOperationHint::kNone:
216 return AstType::None(); 216 return AstType::None();
217 case BinaryOperationFeedback::kSignedSmall: 217 case BinaryOperationHint::kSignedSmall:
218 return AstType::SignedSmall(); 218 return AstType::SignedSmall();
219 case BinaryOperationFeedback::kNumber: 219 case BinaryOperationHint::kSigned32:
220 return AstType::Signed32();
221 case BinaryOperationHint::kNumberOrOddball:
220 return AstType::Number(); 222 return AstType::Number();
221 case BinaryOperationFeedback::kString: 223 case BinaryOperationHint::kString:
222 return AstType::String(); 224 return AstType::String();
223 // TODO(mythria): Merge Number and NumberOrOddball feedback, after 225 case BinaryOperationHint::kAny:
224 // fixing crankshaft to handle Oddballs along with Numbers.
225 case BinaryOperationFeedback::kNumberOrOddball:
226 case BinaryOperationFeedback::kAny:
227 default:
228 return AstType::Any(); 226 return AstType::Any();
229 } 227 }
230 UNREACHABLE(); 228 UNREACHABLE();
231 return AstType::None(); 229 return AstType::None();
232 } 230 }
233 231
234 } // end anonymous namespace 232 } // end anonymous namespace
235 233
236 void TypeFeedbackOracle::CompareType(TypeFeedbackId id, FeedbackVectorSlot slot, 234 void TypeFeedbackOracle::CompareType(TypeFeedbackId id, FeedbackVectorSlot slot,
237 AstType** left_type, AstType** right_type, 235 AstType** left_type, AstType** right_type,
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 *allocation_site = Handle<AllocationSite>::null(); 292 *allocation_site = Handle<AllocationSite>::null();
295 return; 293 return;
296 } 294 }
297 295
298 // Feedback from Ignition. The feedback slot will be allocated and initialized 296 // Feedback from Ignition. The feedback slot will be allocated and initialized
299 // to AstType::None() even when ignition is not enabled. So it is safe to get 297 // to AstType::None() even when ignition is not enabled. So it is safe to get
300 // feedback from the type feedback vector. 298 // feedback from the type feedback vector.
301 DCHECK(!slot.IsInvalid()); 299 DCHECK(!slot.IsInvalid());
302 BinaryOpICNexus nexus(feedback_vector_, slot); 300 BinaryOpICNexus nexus(feedback_vector_, slot);
303 *left = *right = *result = 301 *left = *right = *result =
304 BinaryOpFeedbackToType(Smi::cast(nexus.GetFeedback())->value()); 302 BinaryOpHintToType(nexus.GetBinaryOperationFeedback());
305 *fixed_right_arg = Nothing<int>(); 303 *fixed_right_arg = Nothing<int>();
306 *allocation_site = Handle<AllocationSite>::null(); 304 *allocation_site = Handle<AllocationSite>::null();
307 305
308 if (!object->IsCode()) return; 306 if (!object->IsCode()) return;
309 307
310 // Merge the feedback from full-codegen if available. 308 // Merge the feedback from full-codegen if available.
311 Handle<Code> code = Handle<Code>::cast(object); 309 Handle<Code> code = Handle<Code>::cast(object);
312 DCHECK_EQ(Code::BINARY_OP_IC, code->kind()); 310 DCHECK_EQ(Code::BINARY_OP_IC, code->kind());
313 BinaryOpICState state(isolate(), code->extra_ic_state()); 311 BinaryOpICState state(isolate(), code->extra_ic_state());
314 DCHECK_EQ(op, state.op()); 312 DCHECK_EQ(op, state.op());
(...skipping 14 matching lines...) Expand all
329 AstType* TypeFeedbackOracle::CountType(TypeFeedbackId id, 327 AstType* TypeFeedbackOracle::CountType(TypeFeedbackId id,
330 FeedbackVectorSlot slot) { 328 FeedbackVectorSlot slot) {
331 Handle<Object> object = GetInfo(id); 329 Handle<Object> object = GetInfo(id);
332 if (slot.IsInvalid()) { 330 if (slot.IsInvalid()) {
333 DCHECK(!object->IsCode()); 331 DCHECK(!object->IsCode());
334 return AstType::None(); 332 return AstType::None();
335 } 333 }
336 334
337 DCHECK(!slot.IsInvalid()); 335 DCHECK(!slot.IsInvalid());
338 BinaryOpICNexus nexus(feedback_vector_, slot); 336 BinaryOpICNexus nexus(feedback_vector_, slot);
339 AstType* type = 337 AstType* type = BinaryOpHintToType(nexus.GetBinaryOperationFeedback());
340 BinaryOpFeedbackToType(Smi::cast(nexus.GetFeedback())->value());
341 338
342 if (!object->IsCode()) return type; 339 if (!object->IsCode()) return type;
343 340
344 Handle<Code> code = Handle<Code>::cast(object); 341 Handle<Code> code = Handle<Code>::cast(object);
345 DCHECK_EQ(Code::BINARY_OP_IC, code->kind()); 342 DCHECK_EQ(Code::BINARY_OP_IC, code->kind());
346 BinaryOpICState state(isolate(), code->extra_ic_state()); 343 BinaryOpICState state(isolate(), code->extra_ic_state());
347 return AstType::Union(type, state.GetLeftType(), zone()); 344 return AstType::Union(type, state.GetLeftType(), zone());
348 } 345 }
349 346
350 347
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 // Dictionary has been allocated with sufficient size for all elements. 545 // Dictionary has been allocated with sufficient size for all elements.
549 DisallowHeapAllocation no_need_to_resize_dictionary; 546 DisallowHeapAllocation no_need_to_resize_dictionary;
550 HandleScope scope(isolate()); 547 HandleScope scope(isolate());
551 USE(UnseededNumberDictionary::AtNumberPut( 548 USE(UnseededNumberDictionary::AtNumberPut(
552 dictionary_, IdToKey(ast_id), handle(target, isolate()))); 549 dictionary_, IdToKey(ast_id), handle(target, isolate())));
553 } 550 }
554 551
555 552
556 } // namespace internal 553 } // namespace internal
557 } // namespace v8 554 } // namespace v8
OLDNEW
« no previous file with comments | « src/type-feedback-vector-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698