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

Side by Side Diff: src/crankshaft/hydrogen-types.cc

Issue 1722193002: [compiler] Drop the CompareNilIC. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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
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/crankshaft/hydrogen-types.h" 5 #include "src/crankshaft/hydrogen-types.h"
6 6
7 #include "src/field-type.h" 7 #include "src/field-type.h"
8 #include "src/handles-inl.h" 8 #include "src/handles-inl.h"
9 #include "src/ostreams.h" 9 #include "src/ostreams.h"
10 10
11 namespace v8 { 11 namespace v8 {
12 namespace internal { 12 namespace internal {
13 13
14 // static 14 // static
15 HType HType::FromType(Type* type) { 15 HType HType::FromType(Type* type) {
16 if (Type::Any()->Is(type)) return HType::Any(); 16 if (Type::Any()->Is(type)) return HType::Any();
17 if (!type->IsInhabited()) return HType::None(); 17 if (!type->IsInhabited()) return HType::None();
18 if (type->Is(Type::SignedSmall())) return HType::Smi(); 18 if (type->Is(Type::SignedSmall())) return HType::Smi();
19 if (type->Is(Type::Number())) return HType::TaggedNumber(); 19 if (type->Is(Type::Number())) return HType::TaggedNumber();
20 if (type->Is(Type::Null())) return HType::Null(); 20 if (type->Is(Type::Null())) return HType::Null();
21 if (type->Is(Type::String())) return HType::String(); 21 if (type->Is(Type::String())) return HType::String();
22 if (type->Is(Type::Boolean())) return HType::Boolean(); 22 if (type->Is(Type::Boolean())) return HType::Boolean();
23 if (type->Is(Type::Undefined())) return HType::Undefined(); 23 if (type->Is(Type::Undefined())) return HType::Undefined();
24 if (type->Is(Type::Object())) return HType::JSObject(); 24 if (type->Is(Type::Object())) return HType::JSObject();
25 if (type->Is(Type::Receiver())) return HType::JSReceiver(); 25 if (type->Is(Type::DetectableReceiver())) return HType::JSReceiver();
26 return HType::Tagged(); 26 return HType::Tagged();
27 } 27 }
28 28
29 29
30 // static 30 // static
31 HType HType::FromFieldType(Handle<FieldType> type, Zone* temp_zone) { 31 HType HType::FromFieldType(Handle<FieldType> type, Zone* temp_zone) {
32 return FromType(type->Convert(temp_zone)); 32 return FromType(type->Convert(temp_zone));
33 } 33 }
34 34
35 // static 35 // static
36 HType HType::FromValue(Handle<Object> value) { 36 HType HType::FromValue(Handle<Object> value) {
37 if (value->IsSmi()) return HType::Smi(); 37 if (value->IsSmi()) return HType::Smi();
38 if (value->IsNull()) return HType::Null(); 38 if (value->IsNull()) return HType::Null();
39 if (value->IsHeapNumber()) { 39 if (value->IsHeapNumber()) {
40 double n = Handle<v8::internal::HeapNumber>::cast(value)->value(); 40 double n = Handle<v8::internal::HeapNumber>::cast(value)->value();
41 return IsSmiDouble(n) ? HType::Smi() : HType::HeapNumber(); 41 return IsSmiDouble(n) ? HType::Smi() : HType::HeapNumber();
42 } 42 }
43 if (value->IsString()) return HType::String(); 43 if (value->IsString()) return HType::String();
44 if (value->IsBoolean()) return HType::Boolean(); 44 if (value->IsBoolean()) return HType::Boolean();
45 if (value->IsUndefined()) return HType::Undefined(); 45 if (value->IsUndefined()) return HType::Undefined();
46 if (value->IsJSArray()) return HType::JSArray(); 46 if (value->IsJSArray() && !value->IsUndetectableObject()) {
Toon Verwaest 2016/02/23 20:03:19 JSArrays cannot be undetectable I think. It's only
Benedikt Meurer 2016/02/24 05:39:18 Done.
47 if (value->IsJSObject()) return HType::JSObject(); 47 return HType::JSArray();
48 }
49 if (value->IsJSObject() && !value->IsUndetectableObject()) {
50 return HType::JSObject();
51 }
48 DCHECK(value->IsHeapObject()); 52 DCHECK(value->IsHeapObject());
49 return HType::HeapObject(); 53 return HType::HeapObject();
50 } 54 }
51 55
52 56
53 std::ostream& operator<<(std::ostream& os, const HType& t) { 57 std::ostream& operator<<(std::ostream& os, const HType& t) {
54 // Note: The c1visualizer syntax for locals allows only a sequence of the 58 // Note: The c1visualizer syntax for locals allows only a sequence of the
55 // following characters: A-Za-z0-9_-|: 59 // following characters: A-Za-z0-9_-|:
56 switch (t.kind_) { 60 switch (t.kind_) {
57 #define DEFINE_CASE(Name, mask) \ 61 #define DEFINE_CASE(Name, mask) \
58 case HType::k##Name: \ 62 case HType::k##Name: \
59 return os << #Name; 63 return os << #Name;
60 HTYPE_LIST(DEFINE_CASE) 64 HTYPE_LIST(DEFINE_CASE)
61 #undef DEFINE_CASE 65 #undef DEFINE_CASE
62 } 66 }
63 UNREACHABLE(); 67 UNREACHABLE();
64 return os; 68 return os;
65 } 69 }
66 70
67 } // namespace internal 71 } // namespace internal
68 } // namespace v8 72 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698