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

Side by Side Diff: src/hydrogen-instructions.cc

Issue 10534006: Remove TLS access for current Zone. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Address review. Created 8 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « src/hydrogen-instructions.h ('k') | src/ia32/assembler-ia32.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 } 329 }
330 330
331 previous = current; 331 previous = current;
332 current = current->tail(); 332 current = current->tail();
333 } 333 }
334 334
335 #ifdef DEBUG 335 #ifdef DEBUG
336 // Do not reuse use list nodes in debug mode, zap them. 336 // Do not reuse use list nodes in debug mode, zap them.
337 if (current != NULL) { 337 if (current != NULL) {
338 HUseListNode* temp = 338 HUseListNode* temp =
339 new HUseListNode(current->value(), current->index(), NULL); 339 new(block()->zone())
340 HUseListNode(current->value(), current->index(), NULL);
340 current->Zap(); 341 current->Zap();
341 current = temp; 342 current = temp;
342 } 343 }
343 #endif 344 #endif
344 return current; 345 return current;
345 } 346 }
346 347
347 348
348 bool HValue::Equals(HValue* other) { 349 bool HValue::Equals(HValue* other) {
349 if (other->opcode() != opcode()) return false; 350 if (other->opcode() != opcode()) return false;
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 HValue* old_value = OperandAt(index); 489 HValue* old_value = OperandAt(index);
489 if (old_value == new_value) return; 490 if (old_value == new_value) return;
490 491
491 HUseListNode* removed = NULL; 492 HUseListNode* removed = NULL;
492 if (old_value != NULL) { 493 if (old_value != NULL) {
493 removed = old_value->RemoveUse(this, index); 494 removed = old_value->RemoveUse(this, index);
494 } 495 }
495 496
496 if (new_value != NULL) { 497 if (new_value != NULL) {
497 if (removed == NULL) { 498 if (removed == NULL) {
498 new_value->use_list_ = 499 new_value->use_list_ = new(new_value->block()->zone()) HUseListNode(
499 new HUseListNode(this, index, new_value->use_list_); 500 this, index, new_value->use_list_);
500 } else { 501 } else {
501 removed->set_tail(new_value->use_list_); 502 removed->set_tail(new_value->use_list_);
502 new_value->use_list_ = removed; 503 new_value->use_list_ = removed;
503 } 504 }
504 } 505 }
505 } 506 }
506 507
507 508
508 void HValue::AddNewRange(Range* r, Zone* zone) { 509 void HValue::AddNewRange(Range* r, Zone* zone) {
509 if (!HasRange()) ComputeInitialRange(zone); 510 if (!HasRange()) ComputeInitialRange(zone);
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 958
958 // Insert the new values in the graph. 959 // Insert the new values in the graph.
959 if (new_left->IsInstruction() && 960 if (new_left->IsInstruction() &&
960 !HInstruction::cast(new_left)->IsLinked()) { 961 !HInstruction::cast(new_left)->IsLinked()) {
961 HInstruction::cast(new_left)->InsertBefore(this); 962 HInstruction::cast(new_left)->InsertBefore(this);
962 } 963 }
963 if (new_right->IsInstruction() && 964 if (new_right->IsInstruction() &&
964 !HInstruction::cast(new_right)->IsLinked()) { 965 !HInstruction::cast(new_right)->IsLinked()) {
965 HInstruction::cast(new_right)->InsertBefore(this); 966 HInstruction::cast(new_right)->InsertBefore(this);
966 } 967 }
967 HMathFloorOfDiv* instr = new HMathFloorOfDiv(context(), 968 HMathFloorOfDiv* instr = new(block()->zone()) HMathFloorOfDiv(context(),
968 new_left, 969 new_left,
969 new_right); 970 new_right);
970 // Replace this HMathFloor instruction by the new HMathFloorOfDiv. 971 // Replace this HMathFloor instruction by the new HMathFloorOfDiv.
971 instr->InsertBefore(this); 972 instr->InsertBefore(this);
972 ReplaceAllUsesWith(instr); 973 ReplaceAllUsesWith(instr);
973 Kill(); 974 Kill();
974 // We know the division had no other uses than this HMathFloor. Delete it. 975 // We know the division had no other uses than this HMathFloor. Delete it.
975 // Also delete the arguments of the division if they are not used any 976 // Also delete the arguments of the division if they are not used any
976 // more. 977 // more.
977 hdiv->DeleteAndReplaceWith(NULL); 978 hdiv->DeleteAndReplaceWith(NULL);
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1244 int32_non_phi_uses() + int32_indirect_uses(), 1245 int32_non_phi_uses() + int32_indirect_uses(),
1245 double_non_phi_uses() + double_indirect_uses(), 1246 double_non_phi_uses() + double_indirect_uses(),
1246 tagged_non_phi_uses() + tagged_indirect_uses()); 1247 tagged_non_phi_uses() + tagged_indirect_uses());
1247 stream->Add("%s%s]", 1248 stream->Add("%s%s]",
1248 is_live() ? "_live" : "", 1249 is_live() ? "_live" : "",
1249 IsConvertibleToInteger() ? "" : "_ncti"); 1250 IsConvertibleToInteger() ? "" : "_ncti");
1250 } 1251 }
1251 1252
1252 1253
1253 void HPhi::AddInput(HValue* value) { 1254 void HPhi::AddInput(HValue* value) {
1254 inputs_.Add(NULL); 1255 inputs_.Add(NULL, value->block()->zone());
1255 SetOperandAt(OperandCount() - 1, value); 1256 SetOperandAt(OperandCount() - 1, value);
1256 // Mark phis that may have 'arguments' directly or indirectly as an operand. 1257 // Mark phis that may have 'arguments' directly or indirectly as an operand.
1257 if (!CheckFlag(kIsArguments) && value->CheckFlag(kIsArguments)) { 1258 if (!CheckFlag(kIsArguments) && value->CheckFlag(kIsArguments)) {
1258 SetFlag(kIsArguments); 1259 SetFlag(kIsArguments);
1259 } 1260 }
1260 } 1261 }
1261 1262
1262 1263
1263 bool HPhi::HasRealUses() { 1264 bool HPhi::HasRealUses() {
1264 for (HUseIterator it(uses()); !it.Done(); it.Advance()) { 1265 for (HUseIterator it(uses()); !it.Done(); it.Advance()) {
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1390 double n = handle_->Number(); 1391 double n = handle_->Number();
1391 double roundtrip_value = static_cast<double>(static_cast<int32_t>(n)); 1392 double roundtrip_value = static_cast<double>(static_cast<int32_t>(n));
1392 has_int32_value_ = BitCast<int64_t>(roundtrip_value) == BitCast<int64_t>(n); 1393 has_int32_value_ = BitCast<int64_t>(roundtrip_value) == BitCast<int64_t>(n);
1393 if (has_int32_value_) int32_value_ = static_cast<int32_t>(n); 1394 if (has_int32_value_) int32_value_ = static_cast<int32_t>(n);
1394 double_value_ = n; 1395 double_value_ = n;
1395 has_double_value_ = true; 1396 has_double_value_ = true;
1396 } 1397 }
1397 } 1398 }
1398 1399
1399 1400
1400 HConstant* HConstant::CopyToRepresentation(Representation r) const { 1401 HConstant* HConstant::CopyToRepresentation(Representation r, Zone* zone) const {
1401 if (r.IsInteger32() && !has_int32_value_) return NULL; 1402 if (r.IsInteger32() && !has_int32_value_) return NULL;
1402 if (r.IsDouble() && !has_double_value_) return NULL; 1403 if (r.IsDouble() && !has_double_value_) return NULL;
1403 return new HConstant(handle_, r); 1404 return new(zone) HConstant(handle_, r);
1404 } 1405 }
1405 1406
1406 1407
1407 HConstant* HConstant::CopyToTruncatedInt32() const { 1408 HConstant* HConstant::CopyToTruncatedInt32(Zone* zone) const {
1408 if (!has_double_value_) return NULL; 1409 if (!has_double_value_) return NULL;
1409 int32_t truncated = NumberToInt32(*handle_); 1410 int32_t truncated = NumberToInt32(*handle_);
1410 return new HConstant(FACTORY->NewNumberFromInt(truncated), 1411 return new(zone) HConstant(FACTORY->NewNumberFromInt(truncated),
1411 Representation::Integer32()); 1412 Representation::Integer32());
1412 } 1413 }
1413 1414
1414 1415
1415 bool HConstant::ToBoolean() const { 1416 bool HConstant::ToBoolean() const {
1416 // Converts the constant's boolean value according to 1417 // Converts the constant's boolean value according to
1417 // ECMAScript section 9.2 ToBoolean conversion. 1418 // ECMAScript section 9.2 ToBoolean conversion.
1418 if (HasInteger32Value()) return Integer32Value() != 0; 1419 if (HasInteger32Value()) return Integer32Value() != 0;
1419 if (HasDoubleValue()) { 1420 if (HasDoubleValue()) {
1420 double v = DoubleValue(); 1421 double v = DoubleValue();
1421 return v != 0 && !isnan(v); 1422 return v != 0 && !isnan(v);
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1613 1614
1614 void HLoadNamedField::PrintDataTo(StringStream* stream) { 1615 void HLoadNamedField::PrintDataTo(StringStream* stream) {
1615 object()->PrintNameTo(stream); 1616 object()->PrintNameTo(stream);
1616 stream->Add(" @%d%s", offset(), is_in_object() ? "[in-object]" : ""); 1617 stream->Add(" @%d%s", offset(), is_in_object() ? "[in-object]" : "");
1617 } 1618 }
1618 1619
1619 1620
1620 HLoadNamedFieldPolymorphic::HLoadNamedFieldPolymorphic(HValue* context, 1621 HLoadNamedFieldPolymorphic::HLoadNamedFieldPolymorphic(HValue* context,
1621 HValue* object, 1622 HValue* object,
1622 SmallMapList* types, 1623 SmallMapList* types,
1623 Handle<String> name) 1624 Handle<String> name,
1624 : types_(Min(types->length(), kMaxLoadPolymorphism)), 1625 Zone* zone)
1626 : types_(Min(types->length(), kMaxLoadPolymorphism), zone),
1625 name_(name), 1627 name_(name),
1626 need_generic_(false) { 1628 need_generic_(false) {
1627 SetOperandAt(0, context); 1629 SetOperandAt(0, context);
1628 SetOperandAt(1, object); 1630 SetOperandAt(1, object);
1629 set_representation(Representation::Tagged()); 1631 set_representation(Representation::Tagged());
1630 SetGVNFlag(kDependsOnMaps); 1632 SetGVNFlag(kDependsOnMaps);
1631 int map_transitions = 0; 1633 int map_transitions = 0;
1632 for (int i = 0; 1634 for (int i = 0;
1633 i < types->length() && types_.length() < kMaxLoadPolymorphism; 1635 i < types->length() && types_.length() < kMaxLoadPolymorphism;
1634 ++i) { 1636 ++i) {
1635 Handle<Map> map = types->at(i); 1637 Handle<Map> map = types->at(i);
1636 LookupResult lookup(map->GetIsolate()); 1638 LookupResult lookup(map->GetIsolate());
1637 map->LookupInDescriptors(NULL, *name, &lookup); 1639 map->LookupInDescriptors(NULL, *name, &lookup);
1638 if (lookup.IsFound()) { 1640 if (lookup.IsFound()) {
1639 switch (lookup.type()) { 1641 switch (lookup.type()) {
1640 case FIELD: { 1642 case FIELD: {
1641 int index = lookup.GetLocalFieldIndexFromMap(*map); 1643 int index = lookup.GetLocalFieldIndexFromMap(*map);
1642 if (index < 0) { 1644 if (index < 0) {
1643 SetGVNFlag(kDependsOnInobjectFields); 1645 SetGVNFlag(kDependsOnInobjectFields);
1644 } else { 1646 } else {
1645 SetGVNFlag(kDependsOnBackingStoreFields); 1647 SetGVNFlag(kDependsOnBackingStoreFields);
1646 } 1648 }
1647 types_.Add(types->at(i)); 1649 types_.Add(types->at(i), zone);
1648 break; 1650 break;
1649 } 1651 }
1650 case CONSTANT_FUNCTION: 1652 case CONSTANT_FUNCTION:
1651 types_.Add(types->at(i)); 1653 types_.Add(types->at(i), zone);
1652 break; 1654 break;
1653 case MAP_TRANSITION: 1655 case MAP_TRANSITION:
1654 // We should just ignore these since they are not relevant to a load 1656 // We should just ignore these since they are not relevant to a load
1655 // operation. This means we will deopt if we actually see this map 1657 // operation. This means we will deopt if we actually see this map
1656 // from optimized code. 1658 // from optimized code.
1657 map_transitions++; 1659 map_transitions++;
1658 break; 1660 break;
1659 default: 1661 default:
1660 break; 1662 break;
1661 } 1663 }
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1758 1760
1759 if (names_cache->enumerable() == object()) { 1761 if (names_cache->enumerable() == object()) {
1760 HForInCacheArray* index_cache = 1762 HForInCacheArray* index_cache =
1761 names_cache->index_cache(); 1763 names_cache->index_cache();
1762 HCheckMapValue* map_check = 1764 HCheckMapValue* map_check =
1763 new(block()->zone()) HCheckMapValue(object(), names_cache->map()); 1765 new(block()->zone()) HCheckMapValue(object(), names_cache->map());
1764 HInstruction* index = new(block()->zone()) HLoadKeyedFastElement( 1766 HInstruction* index = new(block()->zone()) HLoadKeyedFastElement(
1765 index_cache, 1767 index_cache,
1766 key_load->key(), 1768 key_load->key(),
1767 OMIT_HOLE_CHECK); 1769 OMIT_HOLE_CHECK);
1770 map_check->InsertBefore(this);
1771 index->InsertBefore(this);
1768 HLoadFieldByIndex* load = new(block()->zone()) HLoadFieldByIndex( 1772 HLoadFieldByIndex* load = new(block()->zone()) HLoadFieldByIndex(
1769 object(), index); 1773 object(), index);
1770 map_check->InsertBefore(this);
1771 index->InsertBefore(this);
1772 load->InsertBefore(this); 1774 load->InsertBefore(this);
1773 return load; 1775 return load;
1774 } 1776 }
1775 } 1777 }
1776 } 1778 }
1777 1779
1778 return this; 1780 return this;
1779 } 1781 }
1780 1782
1781 1783
(...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after
2476 2478
2477 2479
2478 void HCheckPrototypeMaps::Verify() { 2480 void HCheckPrototypeMaps::Verify() {
2479 HInstruction::Verify(); 2481 HInstruction::Verify();
2480 ASSERT(HasNoUses()); 2482 ASSERT(HasNoUses());
2481 } 2483 }
2482 2484
2483 #endif 2485 #endif
2484 2486
2485 } } // namespace v8::internal 2487 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/hydrogen-instructions.h ('k') | src/ia32/assembler-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698