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

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

Issue 2497243002: [stubs] Port builtin for Array.push fast-case from Crankshaft to TF (Closed)
Patch Set: Cleanup Created 4 years, 1 month 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
Index: src/code-stub-assembler.h
diff --git a/src/code-stub-assembler.h b/src/code-stub-assembler.h
index de07aa60033e287200be13ac8da77824b155940e..421fbcfcbcb73d6c842d02ddd87352b3a5b7198d 100644
--- a/src/code-stub-assembler.h
+++ b/src/code-stub-assembler.h
@@ -15,6 +15,7 @@ namespace v8 {
namespace internal {
class CallInterfaceDescriptor;
+class CodeStubArguments;
class StatsCounter;
class StubCache;
@@ -69,6 +70,12 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
return Is64() ? INTPTR_PARAMETERS : SMI_PARAMETERS;
}
+ MachineRepresentation OptimalParameterRepresentation() const {
+ return OptimalParameterMode() == INTPTR_PARAMETERS
+ ? MachineType::PointerRepresentation()
+ : MachineRepresentation::kTaggedSigned;
+ }
+
compiler::Node* UntagParameter(compiler::Node* value, ParameterMode mode) {
if (mode != SMI_PARAMETERS) value = SmiUntag(value);
return value;
@@ -142,6 +149,8 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
// Smi | HeapNumber operations.
compiler::Node* NumberInc(compiler::Node* value);
+ void GotoIfNotNumber(compiler::Node* value, Label* is_not_number);
Jakob Kummerow 2016/11/23 17:17:06 nit: when you rebase, please drop all the "compile
danno 2016/11/29 14:39:59 Done.
+ void GotoIfNumber(compiler::Node* value, Label* is_number);
// Allocate an object of the given size.
compiler::Node* Allocate(compiler::Node* size, AllocationFlags flags = kNone);
@@ -157,6 +166,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
// Check a value for smi-ness
compiler::Node* TaggedIsSmi(compiler::Node* a);
+ compiler::Node* TaggedIsNotSmi(compiler::Node* a);
// Check that the value is a non-negative smi.
compiler::Node* WordIsPositiveSmi(compiler::Node* a);
// Check that a word has a word-aligned address.
@@ -201,8 +211,12 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
Label* if_false);
void BranchIfJSObject(compiler::Node* object, Label* if_true,
Label* if_false);
+
+ enum class FastJSArrayAccessMode { INBOUNDS_READ, ANY_ACCESS };
+
void BranchIfFastJSArray(compiler::Node* object, compiler::Node* context,
- Label* if_true, Label* if_false);
+ FastJSArrayAccessMode mode, Label* if_true,
+ Label* if_false);
// Load value from current frame by given offset in bytes.
compiler::Node* LoadFromFrame(int offset,
@@ -372,6 +386,11 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
compiler::Node* object, compiler::Node* index, compiler::Node* value,
ParameterMode parameter_mode = INTEGER_PARAMETERS);
+ compiler::Node* BuildAppendJSArray(ElementsKind kind, compiler::Node* context,
+ compiler::Node* array,
+ CodeStubArguments& args,
+ Variable& arg_index, Label* bailout);
+
void StoreFieldsNoWriteBarrier(compiler::Node* start_address,
compiler::Node* end_address,
compiler::Node* value);
@@ -582,6 +601,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
compiler::Node* ChangeFloat64ToTagged(compiler::Node* value);
compiler::Node* ChangeInt32ToTagged(compiler::Node* value);
compiler::Node* ChangeUint32ToTagged(compiler::Node* value);
+ compiler::Node* ChangeNumberToFloat64(compiler::Node* value);
// Type conversions.
// Throws a TypeError for {method_name} if {value} is not coercible to Object,
@@ -742,6 +762,9 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
void IncrementCounter(StatsCounter* counter, int delta);
void DecrementCounter(StatsCounter* counter, int delta);
+ void Increment(Variable& variable, int value = 1,
+ ParameterMode mode = INTPTR_PARAMETERS);
+
// Generates "if (false) goto label" code. Useful for marking a label as
// "live" to avoid assertion failures during graph building. In the resulting
// code this check will be eliminated.
@@ -1249,14 +1272,16 @@ class CodeStubArguments {
CodeStubAssembler::ParameterMode mode =
CodeStubAssembler::INTPTR_PARAMETERS);
- compiler::Node* GetReceiver();
+ compiler::Node* GetReceiver() const;
// |index| is zero-based and does not include the receiver
compiler::Node* AtIndex(compiler::Node* index,
CodeStubAssembler::ParameterMode mode =
- CodeStubAssembler::INTPTR_PARAMETERS);
+ CodeStubAssembler::INTPTR_PARAMETERS) const;
+
+ compiler::Node* AtIndex(int index) const;
- compiler::Node* AtIndex(int index);
+ compiler::Node* GetLength() const { return argc_; }
typedef std::function<void(CodeStubAssembler* assembler, compiler::Node* arg)>
ForEachBodyFunction;

Powered by Google App Engine
This is Rietveld 408576698