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

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

Issue 2310923002: [turbofan] Also nuke Array and Function types. (Closed)
Patch Set: Created 4 years, 3 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') | 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 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 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 integers.push_back(isolate->factory()->NewNumber(+rng_->NextInt(10))); 82 integers.push_back(isolate->factory()->NewNumber(+rng_->NextInt(10)));
83 for (int i = 0; i < 10; ++i) { 83 for (int i = 0; i < 10; ++i) {
84 double x = rng_->NextInt(); 84 double x = rng_->NextInt();
85 integers.push_back(isolate->factory()->NewNumber(x)); 85 integers.push_back(isolate->factory()->NewNumber(x));
86 x *= rng_->NextInt(); 86 x *= rng_->NextInt();
87 if (!IsMinusZero(x)) integers.push_back(isolate->factory()->NewNumber(x)); 87 if (!IsMinusZero(x)) integers.push_back(isolate->factory()->NewNumber(x));
88 } 88 }
89 89
90 Integer = Type::Range(-V8_INFINITY, +V8_INFINITY, zone); 90 Integer = Type::Range(-V8_INFINITY, +V8_INFINITY, zone);
91 91
92 NumberArray = Type::Array(Number, zone);
93 StringArray = Type::Array(String, zone);
94 AnyArray = Type::Array(Any, zone);
95
96 SignedFunction1 = Type::Function(SignedSmall, SignedSmall, zone);
97 NumberFunction1 = Type::Function(Number, Number, zone);
98 NumberFunction2 = Type::Function(Number, Number, Number, zone);
99 MethodFunction = Type::Function(String, Object, 0, zone);
100
101 for (int i = 0; i < 30; ++i) { 92 for (int i = 0; i < 30; ++i) {
102 types.push_back(Fuzz()); 93 types.push_back(Fuzz());
103 } 94 }
104 } 95 }
105 96
106 Handle<i::Map> object_map; 97 Handle<i::Map> object_map;
107 98
108 Handle<i::Smi> smi; 99 Handle<i::Smi> smi;
109 Handle<i::HeapNumber> signed32; 100 Handle<i::HeapNumber> signed32;
110 Handle<i::JSObject> object1; 101 Handle<i::JSObject> object1;
(...skipping 13 matching lines...) Expand all
124 115
125 Type* SmiConstant; 116 Type* SmiConstant;
126 Type* Signed32Constant; 117 Type* Signed32Constant;
127 Type* ObjectConstant1; 118 Type* ObjectConstant1;
128 Type* ObjectConstant2; 119 Type* ObjectConstant2;
129 Type* ArrayConstant; 120 Type* ArrayConstant;
130 Type* UninitializedConstant; 121 Type* UninitializedConstant;
131 122
132 Type* Integer; 123 Type* Integer;
133 124
134 Type* NumberArray;
135 Type* StringArray;
136 Type* AnyArray;
137
138 Type* SignedFunction1;
139 Type* NumberFunction1;
140 Type* NumberFunction2;
141 Type* MethodFunction;
142
143 typedef std::vector<Type*> TypeVector; 125 typedef std::vector<Type*> TypeVector;
144 typedef std::vector<Handle<i::Object> > ValueVector; 126 typedef std::vector<Handle<i::Object> > ValueVector;
145 127
146 TypeVector types; 128 TypeVector types;
147 ValueVector values; 129 ValueVector values;
148 ValueVector integers; // "Integer" values used for range limits. 130 ValueVector integers; // "Integer" values used for range limits.
149 131
150 Type* Of(Handle<i::Object> value) { return Type::Of(value, zone_); } 132 Type* Of(Handle<i::Object> value) { return Type::Of(value, zone_); }
151 133
152 Type* Constant(Handle<i::Object> value) { 134 Type* Constant(Handle<i::Object> value) {
153 return Type::Constant(value, zone_); 135 return Type::Constant(value, zone_);
154 } 136 }
155 137
156 Type* Range(double min, double max) { return Type::Range(min, max, zone_); } 138 Type* Range(double min, double max) { return Type::Range(min, max, zone_); }
157 139
158 Type* Array1(Type* element) { return Type::Array(element, zone_); }
159
160 Type* Function0(Type* result, Type* receiver) {
161 return Type::Function(result, receiver, 0, zone_);
162 }
163
164 Type* Function1(Type* result, Type* receiver, Type* arg) {
165 Type* type = Type::Function(result, receiver, 1, zone_);
166 type->AsFunction()->InitParameter(0, arg);
167 return type;
168 }
169
170 Type* Function2(Type* result, Type* arg1, Type* arg2) {
171 return Type::Function(result, arg1, arg2, zone_);
172 }
173
174 Type* Union(Type* t1, Type* t2) { return Type::Union(t1, t2, zone_); } 140 Type* Union(Type* t1, Type* t2) { return Type::Union(t1, t2, zone_); }
175 141
176 Type* Intersect(Type* t1, Type* t2) { return Type::Intersect(t1, t2, zone_); } 142 Type* Intersect(Type* t1, Type* t2) { return Type::Intersect(t1, t2, zone_); }
177 143
178 Type* Representation(Type* t) { return Type::Representation(t, zone_); } 144 Type* Representation(Type* t) { return Type::Representation(t, zone_); }
179 145
180 Type* Semantic(Type* t) { return Type::Semantic(t, zone_); } 146 Type* Semantic(Type* t) { return Type::Semantic(t, zone_); }
181 147
182 Type* Random() { 148 Type* Random() {
183 return types[rng_->NextInt(static_cast<int>(types.size()))]; 149 return types[rng_->NextInt(static_cast<int>(types.size()))];
(...skipping 29 matching lines...) Expand all
213 return Type::Constant(values[i], zone_); 179 return Type::Constant(values[i], zone_);
214 } 180 }
215 case 2: { // range 181 case 2: { // range
216 int i = rng_->NextInt(static_cast<int>(integers.size())); 182 int i = rng_->NextInt(static_cast<int>(integers.size()));
217 int j = rng_->NextInt(static_cast<int>(integers.size())); 183 int j = rng_->NextInt(static_cast<int>(integers.size()));
218 double min = integers[i]->Number(); 184 double min = integers[i]->Number();
219 double max = integers[j]->Number(); 185 double max = integers[j]->Number();
220 if (min > max) std::swap(min, max); 186 if (min > max) std::swap(min, max);
221 return Type::Range(min, max, zone_); 187 return Type::Range(min, max, zone_);
222 } 188 }
223 case 3: { // array
224 Type* element = Fuzz(depth / 2);
225 return Type::Array(element, zone_);
226 }
227 case 4:
228 case 5: { // function
229 Type* result = Fuzz(depth / 2);
230 Type* receiver = Fuzz(depth / 2);
231 int arity = rng_->NextInt(3);
232 Type* type = Type::Function(result, receiver, arity, zone_);
233 for (int i = 0; i < type->AsFunction()->Arity(); ++i) {
234 Type* parameter = Fuzz(depth / 2);
235 type->AsFunction()->InitParameter(i, parameter);
236 }
237 return type;
238 }
239 default: { // union 189 default: { // union
240 int n = rng_->NextInt(10); 190 int n = rng_->NextInt(10);
241 Type* type = None; 191 Type* type = None;
242 for (int i = 0; i < n; ++i) { 192 for (int i = 0; i < n; ++i) {
243 Type* operand = Fuzz(depth - 1); 193 Type* operand = Fuzz(depth - 1);
244 type = Type::Union(type, operand, zone_); 194 type = Type::Union(type, operand, zone_);
245 } 195 }
246 return type; 196 return type;
247 } 197 }
248 } 198 }
249 UNREACHABLE(); 199 UNREACHABLE();
250 } 200 }
251 201
252 Zone* zone() { return zone_; } 202 Zone* zone() { return zone_; }
253 203
254 private: 204 private:
255 Zone* zone_; 205 Zone* zone_;
256 v8::base::RandomNumberGenerator* rng_; 206 v8::base::RandomNumberGenerator* rng_;
257 }; 207 };
258 208
259 209
260 } // namespace internal 210 } // namespace internal
261 } // namespace v8 211 } // namespace v8
262 212
263 #endif 213 #endif
OLDNEW
« no previous file with comments | « test/cctest/test-types.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698