Commit 7bf33c53 authored by verwaest@chromium.org's avatar verwaest@chromium.org

Use Representation::Integer32() for smi types on 32-bit-tagged systems.

BUG=
R=jkummerow@chromium.org

Review URL: https://codereview.chromium.org/187353005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19684 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent f913c3b4
...@@ -2605,8 +2605,8 @@ HConstant::HConstant(ExternalReference reference) ...@@ -2605,8 +2605,8 @@ HConstant::HConstant(ExternalReference reference)
void HConstant::Initialize(Representation r) { void HConstant::Initialize(Representation r) {
if (r.IsNone()) { if (r.IsNone()) {
if (has_smi_value_ && SmiValuesAre31Bits()) { if (has_smi_value_) {
r = Representation::Smi(); r = Representation::FromType(Type::Smi());
} else if (has_int32_value_) { } else if (has_int32_value_) {
r = Representation::Integer32(); r = Representation::Integer32();
} else if (has_double_value_) { } else if (has_double_value_) {
......
...@@ -8741,7 +8741,7 @@ HInstruction* HOptimizedGraphBuilder::BuildIncrement( ...@@ -8741,7 +8741,7 @@ HInstruction* HOptimizedGraphBuilder::BuildIncrement(
// The input to the count operation is on top of the expression stack. // The input to the count operation is on top of the expression stack.
Representation rep = Representation::FromType(expr->type()); Representation rep = Representation::FromType(expr->type());
if (rep.IsNone() || rep.IsTagged()) { if (rep.IsNone() || rep.IsTagged()) {
rep = Representation::Smi(); rep = Representation::FromType(Type::Smi());
} }
if (returns_original_input) { if (returns_original_input) {
...@@ -8991,14 +8991,8 @@ bool CanBeZero(HValue* right) { ...@@ -8991,14 +8991,8 @@ bool CanBeZero(HValue* right) {
HValue* HGraphBuilder::EnforceNumberType(HValue* number, HValue* HGraphBuilder::EnforceNumberType(HValue* number,
Type* expected) { Type* expected) {
if (expected->Is(Type::Smi())) { return AddUncasted<HForceRepresentation>(
return AddUncasted<HForceRepresentation>(number, Representation::Smi()); number, Representation::FromType(expected));
}
if (expected->Is(Type::Signed32())) {
return AddUncasted<HForceRepresentation>(number,
Representation::Integer32());
}
return number;
} }
......
...@@ -568,7 +568,8 @@ typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Convert( ...@@ -568,7 +568,8 @@ typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Convert(
// TODO(rossberg): this does not belong here. // TODO(rossberg): this does not belong here.
Representation Representation::FromType(Type* type) { Representation Representation::FromType(Type* type) {
if (type->Is(Type::None())) return Representation::None(); if (type->Is(Type::None())) return Representation::None();
if (type->Is(Type::Smi())) return Representation::Smi(); if (type->Is(Type::Smi())) return SmiValuesAre31Bits()
? Representation::Smi() : Representation::Integer32();
if (type->Is(Type::Signed32())) return Representation::Integer32(); if (type->Is(Type::Signed32())) return Representation::Integer32();
if (type->Is(Type::Number())) return Representation::Double(); if (type->Is(Type::Number())) return Representation::Double();
return Representation::Tagged(); return Representation::Tagged();
......
...@@ -21,3 +21,16 @@ crash(); ...@@ -21,3 +21,16 @@ crash();
crash(); crash();
%OptimizeFunctionOnNextCall(crash); %OptimizeFunctionOnNextCall(crash);
crash(); crash();
function f() {
var v1 = 0;
var v2 = -0;
var t = v2++;
v2++;
return Math.max(v2++, v1++);
}
f();
f();
%OptimizeFunctionOnNextCall(f);
f();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment