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

Side by Side Diff: test/cctest/types-fuzz.h

Issue 2381523002: [Turbofan] Introduce OtherNumberConstant. (Closed)
Patch Set: Better DCHECK in HeapConstantType(). 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 | « test/cctest/test-types.cc ('k') | test/unittests/compiler/graph-unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 PROPER_BITSET_TYPE_LIST(DECLARE_TYPE) 47 PROPER_BITSET_TYPE_LIST(DECLARE_TYPE)
48 #undef DECLARE_TYPE 48 #undef DECLARE_TYPE
49 49
50 SignedSmall = Type::SignedSmall(); 50 SignedSmall = Type::SignedSmall();
51 UnsignedSmall = Type::UnsignedSmall(); 51 UnsignedSmall = Type::UnsignedSmall();
52 52
53 object_map = isolate->factory()->NewMap( 53 object_map = isolate->factory()->NewMap(
54 JS_OBJECT_TYPE, JSObject::kHeaderSize); 54 JS_OBJECT_TYPE, JSObject::kHeaderSize);
55 55
56 smi = handle(Smi::FromInt(666), isolate); 56 smi = handle(Smi::FromInt(666), isolate);
57 boxed_smi = isolate->factory()->NewHeapNumber(666);
57 signed32 = isolate->factory()->NewHeapNumber(0x40000000); 58 signed32 = isolate->factory()->NewHeapNumber(0x40000000);
59 float1 = isolate->factory()->NewHeapNumber(1.53);
60 float2 = isolate->factory()->NewHeapNumber(0.53);
61 // float3 is identical to float1 in order to test that OtherNumberConstant
62 // types are equal by double value and not by handle pointer value.
63 float3 = isolate->factory()->NewHeapNumber(1.53);
58 object1 = isolate->factory()->NewJSObjectFromMap(object_map); 64 object1 = isolate->factory()->NewJSObjectFromMap(object_map);
59 object2 = isolate->factory()->NewJSObjectFromMap(object_map); 65 object2 = isolate->factory()->NewJSObjectFromMap(object_map);
60 array = isolate->factory()->NewJSArray(20); 66 array = isolate->factory()->NewJSArray(20);
61 uninitialized = isolate->factory()->uninitialized_value(); 67 uninitialized = isolate->factory()->uninitialized_value();
62 SmiConstant = Type::Constant(smi, zone); 68 SmiConstant = Type::NewConstant(smi, zone);
63 Signed32Constant = Type::Constant(signed32, zone); 69 Signed32Constant = Type::NewConstant(signed32, zone);
64 70
65 ObjectConstant1 = Type::Constant(object1, zone); 71 ObjectConstant1 = Type::HeapConstant(object1, zone);
66 ObjectConstant2 = Type::Constant(object2, zone); 72 ObjectConstant2 = Type::HeapConstant(object2, zone);
67 ArrayConstant = Type::Constant(array, zone); 73 ArrayConstant = Type::HeapConstant(array, zone);
68 UninitializedConstant = Type::Constant(uninitialized, zone); 74 UninitializedConstant = Type::HeapConstant(uninitialized, zone);
69 75
70 values.push_back(smi); 76 values.push_back(smi);
77 values.push_back(boxed_smi);
71 values.push_back(signed32); 78 values.push_back(signed32);
72 values.push_back(object1); 79 values.push_back(object1);
73 values.push_back(object2); 80 values.push_back(object2);
74 values.push_back(array); 81 values.push_back(array);
75 values.push_back(uninitialized); 82 values.push_back(uninitialized);
83 values.push_back(float1);
84 values.push_back(float2);
85 values.push_back(float3);
76 for (ValueVector::iterator it = values.begin(); it != values.end(); ++it) { 86 for (ValueVector::iterator it = values.begin(); it != values.end(); ++it) {
77 types.push_back(Type::Constant(*it, zone)); 87 types.push_back(Type::NewConstant(*it, zone));
78 } 88 }
79 89
80 integers.push_back(isolate->factory()->NewNumber(-V8_INFINITY)); 90 integers.push_back(isolate->factory()->NewNumber(-V8_INFINITY));
81 integers.push_back(isolate->factory()->NewNumber(+V8_INFINITY)); 91 integers.push_back(isolate->factory()->NewNumber(+V8_INFINITY));
82 integers.push_back(isolate->factory()->NewNumber(-rng_->NextInt(10))); 92 integers.push_back(isolate->factory()->NewNumber(-rng_->NextInt(10)));
83 integers.push_back(isolate->factory()->NewNumber(+rng_->NextInt(10))); 93 integers.push_back(isolate->factory()->NewNumber(+rng_->NextInt(10)));
84 for (int i = 0; i < 10; ++i) { 94 for (int i = 0; i < 10; ++i) {
85 double x = rng_->NextInt(); 95 double x = rng_->NextInt();
86 integers.push_back(isolate->factory()->NewNumber(x)); 96 integers.push_back(isolate->factory()->NewNumber(x));
87 x *= rng_->NextInt(); 97 x *= rng_->NextInt();
88 if (!IsMinusZero(x)) integers.push_back(isolate->factory()->NewNumber(x)); 98 if (!IsMinusZero(x)) integers.push_back(isolate->factory()->NewNumber(x));
89 } 99 }
90 100
91 Integer = Type::Range(-V8_INFINITY, +V8_INFINITY, zone); 101 Integer = Type::Range(-V8_INFINITY, +V8_INFINITY, zone);
92 102
93 for (int i = 0; i < 30; ++i) { 103 for (int i = 0; i < 30; ++i) {
94 types.push_back(Fuzz()); 104 types.push_back(Fuzz());
95 } 105 }
96 } 106 }
97 107
98 Handle<i::Map> object_map; 108 Handle<i::Map> object_map;
99 109
100 Handle<i::Smi> smi; 110 Handle<i::Smi> smi;
111 Handle<i::HeapNumber> boxed_smi;
101 Handle<i::HeapNumber> signed32; 112 Handle<i::HeapNumber> signed32;
113 Handle<i::HeapNumber> float1;
114 Handle<i::HeapNumber> float2;
115 Handle<i::HeapNumber> float3;
102 Handle<i::JSObject> object1; 116 Handle<i::JSObject> object1;
103 Handle<i::JSObject> object2; 117 Handle<i::JSObject> object2;
104 Handle<i::JSArray> array; 118 Handle<i::JSArray> array;
105 Handle<i::Oddball> uninitialized; 119 Handle<i::Oddball> uninitialized;
106 120
107 #define DECLARE_TYPE(name, value) Type* name; 121 #define DECLARE_TYPE(name, value) Type* name;
108 PROPER_BITSET_TYPE_LIST(DECLARE_TYPE) 122 PROPER_BITSET_TYPE_LIST(DECLARE_TYPE)
109 #undef DECLARE_TYPE 123 #undef DECLARE_TYPE
110 124
111 Type* SignedSmall; 125 Type* SignedSmall;
(...skipping 10 matching lines...) Expand all
122 136
123 typedef std::vector<Type*> TypeVector; 137 typedef std::vector<Type*> TypeVector;
124 typedef std::vector<Handle<i::Object> > ValueVector; 138 typedef std::vector<Handle<i::Object> > ValueVector;
125 139
126 TypeVector types; 140 TypeVector types;
127 ValueVector values; 141 ValueVector values;
128 ValueVector integers; // "Integer" values used for range limits. 142 ValueVector integers; // "Integer" values used for range limits.
129 143
130 Type* Of(Handle<i::Object> value) { return Type::Of(value, zone_); } 144 Type* Of(Handle<i::Object> value) { return Type::Of(value, zone_); }
131 145
132 Type* Constant(Handle<i::Object> value) { 146 Type* NewConstant(Handle<i::Object> value) {
133 return Type::Constant(value, zone_); 147 return Type::NewConstant(value, zone_);
148 }
149
150 Type* HeapConstant(Handle<i::Object> value) {
151 return Type::HeapConstant(value, zone_);
134 } 152 }
135 153
136 Type* Range(double min, double max) { return Type::Range(min, max, zone_); } 154 Type* Range(double min, double max) { return Type::Range(min, max, zone_); }
137 155
138 Type* Union(Type* t1, Type* t2) { return Type::Union(t1, t2, zone_); } 156 Type* Union(Type* t1, Type* t2) { return Type::Union(t1, t2, zone_); }
139 157
140 Type* Intersect(Type* t1, Type* t2) { return Type::Intersect(t1, t2, zone_); } 158 Type* Intersect(Type* t1, Type* t2) { return Type::Intersect(t1, t2, zone_); }
141 159
142 Type* Random() { 160 Type* Random() {
143 return types[rng_->NextInt(static_cast<int>(types.size()))]; 161 return types[rng_->NextInt(static_cast<int>(types.size()))];
(...skipping 19 matching lines...) Expand all
163 continue; \ 181 continue; \
164 } \ 182 } \
165 } 183 }
166 PROPER_BITSET_TYPE_LIST(PICK_BITSET_TYPE) 184 PROPER_BITSET_TYPE_LIST(PICK_BITSET_TYPE)
167 #undef PICK_BITSET_TYPE 185 #undef PICK_BITSET_TYPE
168 } 186 }
169 return result; 187 return result;
170 } 188 }
171 case 1: { // constant 189 case 1: { // constant
172 int i = rng_->NextInt(static_cast<int>(values.size())); 190 int i = rng_->NextInt(static_cast<int>(values.size()));
173 return Type::Constant(values[i], zone_); 191 return Type::NewConstant(values[i], zone_);
174 } 192 }
175 case 2: { // range 193 case 2: { // range
176 int i = rng_->NextInt(static_cast<int>(integers.size())); 194 int i = rng_->NextInt(static_cast<int>(integers.size()));
177 int j = rng_->NextInt(static_cast<int>(integers.size())); 195 int j = rng_->NextInt(static_cast<int>(integers.size()));
178 double min = integers[i]->Number(); 196 double min = integers[i]->Number();
179 double max = integers[j]->Number(); 197 double max = integers[j]->Number();
180 if (min > max) std::swap(min, max); 198 if (min > max) std::swap(min, max);
181 return Type::Range(min, max, zone_); 199 return Type::Range(min, max, zone_);
182 } 200 }
183 default: { // union 201 default: { // union
(...skipping 14 matching lines...) Expand all
198 private: 216 private:
199 Zone* zone_; 217 Zone* zone_;
200 v8::base::RandomNumberGenerator* rng_; 218 v8::base::RandomNumberGenerator* rng_;
201 }; 219 };
202 220
203 } // namespace compiler 221 } // namespace compiler
204 } // namespace internal 222 } // namespace internal
205 } // namespace v8 223 } // namespace v8
206 224
207 #endif 225 #endif
OLDNEW
« no previous file with comments | « test/cctest/test-types.cc ('k') | test/unittests/compiler/graph-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698