Reviewers: Jakob,
Message:
PTAL
Description:
Tag length of FixedArrayBase and smi-array[x] as smi representation
Please review this at https://chromiumcodereview.appspot.com/15858006/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/arm/lithium-arm.cc
M src/hydrogen-instructions.h
M src/ia32/lithium-ia32.cc
M src/x64/lithium-x64.cc
Index: src/arm/lithium-arm.cc
diff --git a/src/arm/lithium-arm.cc b/src/arm/lithium-arm.cc
index
57d75258154ef4a29bb512a49450ed84634525fa..ed333b702708cd364070f9d18eb10a2836d9d55a
100644
--- a/src/arm/lithium-arm.cc
+++ b/src/arm/lithium-arm.cc
@@ -1890,6 +1890,12 @@ LInstruction* LChunkBuilder::DoChange(HChange*
instr) {
if (from.IsSmi()) {
if (to.IsTagged()) {
LOperand* value = UseRegister(instr->value());
+ // For now, always deopt on hole.
+ if (instr->value()->IsLoadKeyed() &&
+ HLoadKeyed::cast(instr->value())->UsesMustHandleHole()) {
+ return AssignEnvironment(
+ DefineSameAsFirst(new(zone()) LCheckSmi(value)));
+ }
return DefineSameAsFirst(new(zone()) LDummyUse(value));
}
from = Representation::Tagged();
Index: src/hydrogen-instructions.h
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
index
5a103e44ed96b547fe80dfc2e3478dca0fe82eb1..bf05619fbf228bb95f6aaa321bf268b57fe63673
100644
--- a/src/hydrogen-instructions.h
+++ b/src/hydrogen-instructions.h
@@ -2422,7 +2422,7 @@ class HFixedArrayBaseLength: public HUnaryOperation {
public:
explicit HFixedArrayBaseLength(HValue* value) : HUnaryOperation(value) {
set_type(HType::Smi());
- set_representation(Representation::Tagged());
+ set_representation(Representation::Smi());
SetFlag(kUseGVN);
SetGVNFlag(kDependsOnArrayLengths);
}
@@ -5419,9 +5419,11 @@ class HLoadKeyed
if (IsFastSmiOrObjectElementsKind(elements_kind)) {
if (IsFastSmiElementsKind(elements_kind)) {
set_type(HType::Smi());
+ set_representation(Representation::Smi());
+ } else {
+ set_representation(Representation::Tagged());
}
- set_representation(Representation::Tagged());
SetGVNFlag(kDependsOnArrayElements);
} else {
set_representation(Representation::Double());
Index: src/ia32/lithium-ia32.cc
diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc
index
3e6931c27431e5861c9bf65d3bce5ad28bc1cbf1..64aaf72baad415be8db9dd2abb38b869cad12a76
100644
--- a/src/ia32/lithium-ia32.cc
+++ b/src/ia32/lithium-ia32.cc
@@ -1910,7 +1910,14 @@ LInstruction* LChunkBuilder::DoChange(HChange*
instr) {
if (from.IsSmi()) {
if (to.IsTagged()) {
LOperand* value = UseRegister(instr->value());
- return DefineSameAsFirst(new(zone()) LDummyUse(value));
+ // For now, always deopt on hole.
+ if (instr->value()->IsLoadKeyed() &&
+ HLoadKeyed::cast(instr->value())->UsesMustHandleHole()) {
+ return AssignEnvironment(
+ DefineSameAsFirst(new(zone()) LCheckSmi(value)));
+ } else {
+ return DefineSameAsFirst(new(zone()) LDummyUse(value));
+ }
}
from = Representation::Tagged();
}
Index: src/x64/lithium-x64.cc
diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc
index
135c4cf3f9fe19f5c6d0caa52f9df677e199b4d6..5e524dfc218454873aa04c18f777a68d096672c8
100644
--- a/src/x64/lithium-x64.cc
+++ b/src/x64/lithium-x64.cc
@@ -1815,6 +1815,12 @@ LInstruction* LChunkBuilder::DoChange(HChange*
instr) {
if (from.IsSmi()) {
if (to.IsTagged()) {
LOperand* value = UseRegister(instr->value());
+ // For now, always deopt on hole.
+ if (instr->value()->IsLoadKeyed() &&
+ HLoadKeyed::cast(instr->value())->UsesMustHandleHole()) {
+ return AssignEnvironment(
+ DefineSameAsFirst(new(zone()) LCheckSmi(value)));
+ }
return DefineSameAsFirst(new(zone()) LDummyUse(value));
}
from = Representation::Tagged();
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.