Index: src/hydrogen-instructions.cc |
diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc |
index 11cc901b38ccfccf7a3607f99e1088b47b7f4ac9..b353cdb2cc514acd7f31bc1752c92faff3f10ff7 100644 |
--- a/src/hydrogen-instructions.cc |
+++ b/src/hydrogen-instructions.cc |
@@ -829,9 +829,8 @@ void HBoundsCheck::InferRepresentation(HInferRepresentation* h_infer) { |
!length()->representation().IsTagged()) { |
r = Representation::Integer32(); |
} else if (index()->representation().IsTagged() || |
- (index()->IsConstant() && |
- HConstant::cast(index())->HasInteger32Value() && |
- Smi::IsValid(HConstant::cast(index())->Integer32Value()))) { |
+ (index()->ActualValue()->IsConstant() && |
+ HConstant::cast(index()->ActualValue())->HasSmiValue())) { |
// If the index is tagged, or a constant that holds a Smi, allow the length |
// to be tagged, since it is usually already tagged from loading it out of |
// the length field of a JSArray. This allows for direct comparison without |
@@ -2392,6 +2391,14 @@ HType HCheckSmi::CalculateInferredType() { |
} |
+void HCheckSmiOrInt32::InferRepresentation(HInferRepresentation* h_infer) { |
+ ASSERT(CheckFlag(kFlexibleRepresentation)); |
+ Representation r = value()->representation().IsTagged() |
+ ? Representation::Tagged() : Representation::Integer32(); |
+ UpdateRepresentation(r, h_infer, "checksmiorint32"); |
+} |
+ |
+ |
HType HPhi::CalculateInferredType() { |
HType result = HType::Uninitialized(); |
for (int i = 0; i < OperandCount(); ++i) { |