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

Unified Diff: src/code-stub-assembler.cc

Issue 2552883012: [interpreter][stubs] Fixing issues found by machine graph verifier. (Closed)
Patch Set: Addressing nits Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/code-stub-assembler.h ('k') | src/code-stubs.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/code-stub-assembler.cc
diff --git a/src/code-stub-assembler.cc b/src/code-stub-assembler.cc
index 388af31c040fd6bf3f0720f769bfc5b0c7ab400b..2579b38cf5e18885eefc5010bedd4b0973805788 100644
--- a/src/code-stub-assembler.cc
+++ b/src/code-stub-assembler.cc
@@ -571,7 +571,7 @@ Node* CodeStubAssembler::SmiMul(Node* a, Node* b) {
Label answer_zero(this), answer_not_zero(this);
Node* answer = Projection(0, pair);
Node* zero = Int32Constant(0);
- Branch(WordEqual(answer, zero), &answer_zero, &answer_not_zero);
+ Branch(Word32Equal(answer, zero), &answer_zero, &answer_not_zero);
Bind(&answer_not_zero);
{
var_result.Bind(ChangeInt32ToTagged(answer));
@@ -590,7 +590,7 @@ Node* CodeStubAssembler::SmiMul(Node* a, Node* b) {
}
Bind(&if_should_be_zero);
{
- var_result.Bind(zero);
+ var_result.Bind(SmiConstant(0));
Goto(&return_result);
}
}
@@ -627,8 +627,9 @@ Node* CodeStubAssembler::TaggedIsNotSmi(Node* a) {
IntPtrConstant(0));
}
-Node* CodeStubAssembler::WordIsPositiveSmi(Node* a) {
- return WordEqual(WordAnd(a, IntPtrConstant(kSmiTagMask | kSmiSignMask)),
+Node* CodeStubAssembler::TaggedIsPositiveSmi(Node* a) {
+ return WordEqual(WordAnd(BitcastTaggedToWord(a),
+ IntPtrConstant(kSmiTagMask | kSmiSignMask)),
IntPtrConstant(0));
}
@@ -921,7 +922,7 @@ Node* CodeStubAssembler::Allocate(int size_in_bytes, AllocationFlags flags) {
}
Node* CodeStubAssembler::InnerAllocate(Node* previous, Node* offset) {
- return BitcastWordToTagged(IntPtrAdd(previous, offset));
+ return BitcastWordToTagged(IntPtrAdd(BitcastTaggedToWord(previous), offset));
}
Node* CodeStubAssembler::InnerAllocate(Node* previous, int offset) {
@@ -1586,9 +1587,10 @@ Node* CodeStubAssembler::AllocateSeqOneByteString(int length,
StoreMapNoWriteBarrier(result, Heap::kOneByteStringMapRootIndex);
StoreObjectFieldNoWriteBarrier(result, SeqOneByteString::kLengthOffset,
SmiConstant(Smi::FromInt(length)));
- StoreObjectFieldNoWriteBarrier(result, SeqOneByteString::kHashFieldOffset,
+ // Initialize both used and unused parts of hash field slot at once.
+ StoreObjectFieldNoWriteBarrier(result, SeqOneByteString::kHashFieldSlot,
IntPtrConstant(String::kEmptyHashField),
- MachineRepresentation::kWord32);
+ MachineType::PointerRepresentation());
return result;
}
@@ -1614,12 +1616,12 @@ Node* CodeStubAssembler::AllocateSeqOneByteString(Node* context, Node* length,
Node* result = Allocate(size, flags);
DCHECK(Heap::RootIsImmortalImmovable(Heap::kOneByteStringMapRootIndex));
StoreMapNoWriteBarrier(result, Heap::kOneByteStringMapRootIndex);
- StoreObjectFieldNoWriteBarrier(
- result, SeqOneByteString::kLengthOffset,
- mode == SMI_PARAMETERS ? length : SmiFromWord(length));
- StoreObjectFieldNoWriteBarrier(result, SeqOneByteString::kHashFieldOffset,
+ StoreObjectFieldNoWriteBarrier(result, SeqOneByteString::kLengthOffset,
+ TagParameter(length, mode));
+ // Initialize both used and unused parts of hash field slot at once.
+ StoreObjectFieldNoWriteBarrier(result, SeqOneByteString::kHashFieldSlot,
IntPtrConstant(String::kEmptyHashField),
- MachineRepresentation::kWord32);
+ MachineType::PointerRepresentation());
var_result.Bind(result);
Goto(&if_join);
}
@@ -1627,9 +1629,8 @@ Node* CodeStubAssembler::AllocateSeqOneByteString(Node* context, Node* length,
Bind(&if_notsizeissmall);
{
// We might need to allocate in large object space, go to the runtime.
- Node* result =
- CallRuntime(Runtime::kAllocateSeqOneByteString, context,
- mode == SMI_PARAMETERS ? length : SmiFromWord(length));
+ Node* result = CallRuntime(Runtime::kAllocateSeqOneByteString, context,
+ TagParameter(length, mode));
var_result.Bind(result);
Goto(&if_join);
}
@@ -1646,9 +1647,10 @@ Node* CodeStubAssembler::AllocateSeqTwoByteString(int length,
StoreMapNoWriteBarrier(result, Heap::kStringMapRootIndex);
StoreObjectFieldNoWriteBarrier(result, SeqTwoByteString::kLengthOffset,
SmiConstant(Smi::FromInt(length)));
- StoreObjectFieldNoWriteBarrier(result, SeqTwoByteString::kHashFieldOffset,
+ // Initialize both used and unused parts of hash field slot at once.
+ StoreObjectFieldNoWriteBarrier(result, SeqTwoByteString::kHashFieldSlot,
IntPtrConstant(String::kEmptyHashField),
- MachineRepresentation::kWord32);
+ MachineType::PointerRepresentation());
return result;
}
@@ -1677,9 +1679,10 @@ Node* CodeStubAssembler::AllocateSeqTwoByteString(Node* context, Node* length,
StoreObjectFieldNoWriteBarrier(
result, SeqTwoByteString::kLengthOffset,
mode == SMI_PARAMETERS ? length : SmiFromWord(length));
- StoreObjectFieldNoWriteBarrier(result, SeqTwoByteString::kHashFieldOffset,
+ // Initialize both used and unused parts of hash field slot at once.
+ StoreObjectFieldNoWriteBarrier(result, SeqTwoByteString::kHashFieldSlot,
IntPtrConstant(String::kEmptyHashField),
- MachineRepresentation::kWord32);
+ MachineType::PointerRepresentation());
var_result.Bind(result);
Goto(&if_join);
}
@@ -1707,9 +1710,10 @@ Node* CodeStubAssembler::AllocateSlicedString(
StoreMapNoWriteBarrier(result, map_root_index);
StoreObjectFieldNoWriteBarrier(result, SlicedString::kLengthOffset, length,
MachineRepresentation::kTagged);
- StoreObjectFieldNoWriteBarrier(result, SlicedString::kHashFieldOffset,
- Int32Constant(String::kEmptyHashField),
- MachineRepresentation::kWord32);
+ // Initialize both used and unused parts of hash field slot at once.
+ StoreObjectFieldNoWriteBarrier(result, SlicedString::kHashFieldSlot,
+ IntPtrConstant(String::kEmptyHashField),
+ MachineType::PointerRepresentation());
StoreObjectFieldNoWriteBarrier(result, SlicedString::kParentOffset, parent,
MachineRepresentation::kTagged);
StoreObjectFieldNoWriteBarrier(result, SlicedString::kOffsetOffset, offset,
@@ -1739,9 +1743,10 @@ Node* CodeStubAssembler::AllocateConsString(Heap::RootListIndex map_root_index,
StoreMapNoWriteBarrier(result, map_root_index);
StoreObjectFieldNoWriteBarrier(result, ConsString::kLengthOffset, length,
MachineRepresentation::kTagged);
- StoreObjectFieldNoWriteBarrier(result, ConsString::kHashFieldOffset,
- Int32Constant(String::kEmptyHashField),
- MachineRepresentation::kWord32);
+ // Initialize both used and unused parts of hash field slot at once.
+ StoreObjectFieldNoWriteBarrier(result, ConsString::kHashFieldSlot,
+ IntPtrConstant(String::kEmptyHashField),
+ MachineType::PointerRepresentation());
bool const new_space = !(flags & kPretenured);
if (new_space) {
StoreObjectFieldNoWriteBarrier(result, ConsString::kFirstOffset, first,
@@ -2015,8 +2020,7 @@ CodeStubAssembler::AllocateUninitializedJSArrayWithElements(
Node* array = AllocateUninitializedJSArray(kind, array_map, length,
allocation_site, size);
- // The bitcast here is safe because InnerAllocate doesn't actually allocate.
- Node* elements = InnerAllocate(BitcastTaggedToWord(array), elements_offset);
+ Node* elements = InnerAllocate(array, elements_offset);
StoreObjectField(array, JSObject::kElementsOffset, elements);
return {array, elements};
@@ -2032,6 +2036,7 @@ Node* CodeStubAssembler::AllocateUninitializedJSArray(ElementsKind kind,
Comment("write JSArray headers");
StoreMapNoWriteBarrier(array, array_map);
+ CSA_ASSERT(this, TaggedIsSmi(length));
StoreObjectFieldNoWriteBarrier(array, JSArray::kLengthOffset, length);
StoreObjectFieldRoot(array, JSArray::kPropertiesOffset,
@@ -3260,7 +3265,7 @@ Node* CodeStubAssembler::SubString(Node* context, Node* string, Node* from,
Label end(this);
Label runtime(this);
- Variable var_instance_type(this, MachineRepresentation::kWord8); // Int32.
+ Variable var_instance_type(this, MachineRepresentation::kWord32); // Int32.
Variable var_result(this, MachineRepresentation::kTagged); // String.
Variable var_from(this, MachineRepresentation::kTagged); // Smi.
Variable var_string(this, MachineRepresentation::kTagged); // String.
@@ -3283,8 +3288,8 @@ Node* CodeStubAssembler::SubString(Node* context, Node* string, Node* from,
// Make sure that both from and to are non-negative smis.
- GotoUnless(WordIsPositiveSmi(from), &runtime);
- GotoUnless(WordIsPositiveSmi(to), &runtime);
+ GotoUnless(TaggedIsPositiveSmi(from), &runtime);
+ GotoUnless(TaggedIsPositiveSmi(to), &runtime);
Node* const substr_length = SmiSub(to, from);
Node* const string_length = LoadStringLength(string);
@@ -3424,8 +3429,9 @@ Node* CodeStubAssembler::SubString(Node* context, Node* string, Node* from,
STATIC_ASSERT(SeqTwoByteString::kHeaderSize ==
SeqOneByteString::kHeaderSize);
- Node* resource_data = LoadObjectField(var_string.value(),
- ExternalString::kResourceDataOffset);
+ Node* resource_data =
+ LoadObjectField(var_string.value(), ExternalString::kResourceDataOffset,
+ MachineType::Pointer());
Node* const fake_sequential_string = IntPtrSub(
resource_data,
IntPtrConstant(SeqTwoByteString::kHeaderSize - kHeapObjectTag));
@@ -3983,7 +3989,7 @@ Node* CodeStubAssembler::ToUint32(Node* context, Node* input) {
// TODO(jgruber): This branch and the recheck below can be removed once we
// have a ToNumber with multiple exits.
Label next(this, Label::kDeferred);
- Branch(WordIsPositiveSmi(input), &out, &next);
+ Branch(TaggedIsPositiveSmi(input), &out, &next);
Bind(&next);
}
@@ -3993,7 +3999,7 @@ Node* CodeStubAssembler::ToUint32(Node* context, Node* input) {
// Perhaps we have a positive smi now.
{
Label next(this, Label::kDeferred);
- Branch(WordIsPositiveSmi(number), &out, &next);
+ Branch(TaggedIsPositiveSmi(number), &out, &next);
Bind(&next);
}
@@ -4857,7 +4863,8 @@ void CodeStubAssembler::LoadPropertyFromFastObject(Node* object, Node* map,
Comment("if_backing_store");
Node* properties = LoadProperties(object);
field_index = IntPtrSub(field_index, inobject_properties);
- Node* value = LoadFixedArrayElement(properties, field_index);
+ Node* value =
+ LoadFixedArrayElement(properties, field_index, 0, INTPTR_PARAMETERS);
Label if_double(this), if_tagged(this);
Branch(Word32NotEqual(representation,
@@ -4911,8 +4918,8 @@ void CodeStubAssembler::LoadPropertyFromNameDictionary(Node* dictionary,
name_to_details_offset);
var_details->Bind(details);
- var_value->Bind(
- LoadFixedArrayElement(dictionary, name_index, name_to_value_offset));
+ var_value->Bind(LoadFixedArrayElement(
+ dictionary, name_index, name_to_value_offset, INTPTR_PARAMETERS));
Comment("] LoadPropertyFromNameDictionary");
}
@@ -4929,8 +4936,8 @@ void CodeStubAssembler::LoadPropertyFromGlobalDictionary(Node* dictionary,
(GlobalDictionary::kEntryValueIndex - GlobalDictionary::kEntryKeyIndex) *
kPointerSize;
- Node* property_cell =
- LoadFixedArrayElement(dictionary, name_index, name_to_value_offset);
+ Node* property_cell = LoadFixedArrayElement(
+ dictionary, name_index, name_to_value_offset, INTPTR_PARAMETERS);
Node* value = LoadObjectField(property_cell, PropertyCell::kValueOffset);
GotoIf(WordEqual(value, TheHoleConstant()), if_deleted);
@@ -5179,7 +5186,7 @@ void CodeStubAssembler::TryPrototypeChainLookup(
{
Variable var_holder(this, MachineRepresentation::kTagged);
Variable var_holder_map(this, MachineRepresentation::kTagged);
- Variable var_holder_instance_type(this, MachineRepresentation::kWord8);
+ Variable var_holder_instance_type(this, MachineRepresentation::kWord32);
Variable* merged_variables[] = {&var_holder, &var_holder_map,
&var_holder_instance_type};
@@ -5223,7 +5230,7 @@ void CodeStubAssembler::TryPrototypeChainLookup(
{
Variable var_holder(this, MachineRepresentation::kTagged);
Variable var_holder_map(this, MachineRepresentation::kTagged);
- Variable var_holder_instance_type(this, MachineRepresentation::kWord8);
+ Variable var_holder_instance_type(this, MachineRepresentation::kWord32);
Variable* merged_variables[] = {&var_holder, &var_holder_map,
&var_holder_instance_type};
@@ -5448,11 +5455,11 @@ void CodeStubAssembler::UpdateFeedback(Node* feedback,
// our new feedback in place.
// TODO(interpreter): Consider passing the feedback as Smi already to avoid
// the tagging completely.
- Node* previous_feedback =
- LoadFixedArrayElement(type_feedback_vector, slot_id);
+ Node* previous_feedback = LoadFixedArrayElement(type_feedback_vector, slot_id,
+ 0, INTPTR_PARAMETERS);
Node* combined_feedback = SmiOr(previous_feedback, SmiFromWord32(feedback));
StoreFixedArrayElement(type_feedback_vector, slot_id, combined_feedback,
- SKIP_WRITE_BARRIER);
+ SKIP_WRITE_BARRIER, 0, INTPTR_PARAMETERS);
}
Node* CodeStubAssembler::LoadReceiverMap(Node* receiver) {
@@ -6205,13 +6212,13 @@ Node* CodeStubAssembler::CreateAllocationSiteInFeedbackVector(
Node* size = IntPtrConstant(AllocationSite::kSize);
Node* site = Allocate(size, CodeStubAssembler::kPretenured);
- StoreMap(site, LoadRoot(Heap::kAllocationSiteMapRootIndex));
- Node* kind = SmiConstant(Smi::FromInt(GetInitialFastElementsKind()));
+ StoreMap(site, AllocationSiteMapConstant());
+ Node* kind = SmiConstant(GetInitialFastElementsKind());
StoreObjectFieldNoWriteBarrier(site, AllocationSite::kTransitionInfoOffset,
kind);
// Unlike literals, constructed arrays don't have nested sites
- Node* zero = IntPtrConstant(0);
+ Node* zero = SmiConstant(0);
StoreObjectFieldNoWriteBarrier(site, AllocationSite::kNestedSiteOffset, zero);
// Pretenuring calculation field.
@@ -8106,7 +8113,7 @@ Node* CodeStubAssembler::CreateArrayIterator(Node* array, Node* array_map,
{
Node* map =
LoadFixedArrayElement(LoadNativeContext(context), var_map_index.value(),
- 0, CodeStubAssembler::INTPTR_PARAMETERS);
+ 0, INTPTR_PARAMETERS);
var_result.Bind(AllocateJSArrayIterator(array, var_array_map.value(), map));
Goto(&return_result);
}
« no previous file with comments | « src/code-stub-assembler.h ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698