Index: src/builtins/builtins-array.cc |
diff --git a/src/builtins/builtins-array.cc b/src/builtins/builtins-array.cc |
index e8ee8640c665b16a380fb3f3a2c65eabca1c8929..b0dfae667a809beae748bff82c0caa9247c112d7 100644 |
--- a/src/builtins/builtins-array.cc |
+++ b/src/builtins/builtins-array.cc |
@@ -2021,11 +2021,12 @@ void Builtins::Generate_ArrayIndexOf(compiler::CodeAssemblerState* state) { |
assembler.Bind(&init_len); |
{ |
- // Handle case where JSArray length is not an Smi in the runtime |
- Node* len = assembler.LoadObjectField(array, JSArray::kLengthOffset); |
- assembler.GotoIfNot(assembler.TaggedIsSmi(len), &call_runtime); |
+ // JSArray length is always an Smi for fast arrays. |
+ Node* len = assembler.LoadAndUntagToWord32ObjectField( |
+ array, JSArray::kLengthOffset); |
+ CSA_ASSERT(&assembler, assembler.TaggedIsSmi(len)); |
caitp
2017/02/24 16:09:16
You're doing a LoadAndUntagToWord32ObjectField, wh
caitp
2017/02/24 16:12:42
There may not be any point in untagging though, I
Benedikt Meurer
2017/02/24 17:50:06
That's less efficient on 64-bit platforms, since t
caitp
2017/02/24 18:19:05
Fair enough --- might be worth updating the ArrayI
|
- len_var.Bind(assembler.SmiToWord(len)); |
+ len_var.Bind(len); |
assembler.Branch(assembler.WordEqual(len_var.value(), intptr_zero), |
&return_not_found, &init_k); |
} |