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

Side by Side Diff: src/ic/ic-state.cc

Issue 1487973002: [turbofan] Add binary operation hints for javascript operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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/ic/ic-state.h" 5 #include "src/ic/ic-state.h"
6 6
7 #include "src/ic/ic.h" 7 #include "src/ic/ic.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 GENERATE(Token::MOD, SMI, 2, SMI); 184 GENERATE(Token::MOD, SMI, 2, SMI);
185 GENERATE(Token::MOD, SMI, 4, SMI); 185 GENERATE(Token::MOD, SMI, 4, SMI);
186 GENERATE(Token::MOD, SMI, 8, SMI); 186 GENERATE(Token::MOD, SMI, 8, SMI);
187 GENERATE(Token::MOD, SMI, 16, SMI); 187 GENERATE(Token::MOD, SMI, 16, SMI);
188 GENERATE(Token::MOD, SMI, 32, SMI); 188 GENERATE(Token::MOD, SMI, 32, SMI);
189 GENERATE(Token::MOD, SMI, 2048, SMI); 189 GENERATE(Token::MOD, SMI, 2048, SMI);
190 #undef GENERATE 190 #undef GENERATE
191 } 191 }
192 192
193 193
194 Type* BinaryOpICState::GetResultType(Zone* zone) const { 194 Type* BinaryOpICState::GetResultType() const {
195 Kind result_kind = result_kind_; 195 Kind result_kind = result_kind_;
196 if (HasSideEffects()) { 196 if (HasSideEffects()) {
197 result_kind = NONE; 197 result_kind = NONE;
198 } else if (result_kind == GENERIC && op_ == Token::ADD) { 198 } else if (result_kind == GENERIC && op_ == Token::ADD) {
199 return Type::Union(Type::Number(zone), Type::String(zone), zone); 199 return Type::NumberOrString();
200 } else if (result_kind == NUMBER && op_ == Token::SHR) { 200 } else if (result_kind == NUMBER && op_ == Token::SHR) {
201 return Type::Unsigned32(zone); 201 return Type::Unsigned32();
202 } 202 }
203 DCHECK_NE(GENERIC, result_kind); 203 DCHECK_NE(GENERIC, result_kind);
204 return KindToType(result_kind, zone); 204 return KindToType(result_kind);
205 } 205 }
206 206
207 207
208 std::ostream& operator<<(std::ostream& os, const BinaryOpICState& s) { 208 std::ostream& operator<<(std::ostream& os, const BinaryOpICState& s) {
209 os << "(" << Token::Name(s.op_); 209 os << "(" << Token::Name(s.op_);
210 if (s.CouldCreateAllocationMementos()) os << "_CreateAllocationMementos"; 210 if (s.CouldCreateAllocationMementos()) os << "_CreateAllocationMementos";
211 if (is_strong(s.strength())) os << "_Strong"; 211 if (is_strong(s.strength())) os << "_Strong";
212 os << ":" << BinaryOpICState::KindToString(s.left_kind_) << "*"; 212 os << ":" << BinaryOpICState::KindToString(s.left_kind_) << "*";
213 if (s.fixed_right_arg_.IsJust()) { 213 if (s.fixed_right_arg_.IsJust()) {
214 os << s.fixed_right_arg_.FromJust(); 214 os << s.fixed_right_arg_.FromJust();
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 return "String"; 313 return "String";
314 case GENERIC: 314 case GENERIC:
315 return "Generic"; 315 return "Generic";
316 } 316 }
317 UNREACHABLE(); 317 UNREACHABLE();
318 return NULL; 318 return NULL;
319 } 319 }
320 320
321 321
322 // static 322 // static
323 Type* BinaryOpICState::KindToType(Kind kind, Zone* zone) { 323 Type* BinaryOpICState::KindToType(Kind kind) {
324 switch (kind) { 324 switch (kind) {
325 case NONE: 325 case NONE:
326 return Type::None(zone); 326 return Type::None();
327 case SMI: 327 case SMI:
328 return Type::SignedSmall(zone); 328 return Type::SignedSmall();
329 case INT32: 329 case INT32:
330 return Type::Signed32(zone); 330 return Type::Signed32();
331 case NUMBER: 331 case NUMBER:
332 return Type::Number(zone); 332 return Type::Number();
333 case STRING: 333 case STRING:
334 return Type::String(zone); 334 return Type::String();
335 case GENERIC: 335 case GENERIC:
336 return Type::Any(zone); 336 return Type::Any();
337 } 337 }
338 UNREACHABLE(); 338 UNREACHABLE();
339 return NULL; 339 return NULL;
340 } 340 }
341 341
342 342
343 const char* CompareICState::GetStateName(State state) { 343 const char* CompareICState::GetStateName(State state) {
344 switch (state) { 344 switch (state) {
345 case UNINITIALIZED: 345 case UNINITIALIZED:
346 return "UNINITIALIZED"; 346 return "UNINITIALIZED";
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 case OBJECT: 501 case OBJECT:
502 case GENERIC: 502 case GENERIC:
503 return GENERIC; 503 return GENERIC;
504 } 504 }
505 UNREACHABLE(); 505 UNREACHABLE();
506 return GENERIC; // Make the compiler happy. 506 return GENERIC; // Make the compiler happy.
507 } 507 }
508 508
509 } // namespace internal 509 } // namespace internal
510 } // namespace v8 510 } // namespace v8
OLDNEW
« src/compiler/js-typed-lowering.cc ('K') | « src/ic/ic-state.h ('k') | src/type-info.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698