Reviewers: fschneider,
Description:
Crankshaft: Fix error in range analysis of compare operations.
Please review this at http://codereview.chromium.org/6658035/
SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/
Affected files:
M src/hydrogen.cc
Index: src/hydrogen.cc
===================================================================
--- src/hydrogen.cc (revision 7127)
+++ src/hydrogen.cc (working copy)
@@ -900,13 +900,15 @@
ASSERT((test->FirstSuccessor() == dest) == (test->SecondSuccessor() !=
dest));
if (test->value()->IsCompare()) {
HCompare* compare = HCompare::cast(test->value());
- Token::Value op = compare->token();
- if (test->SecondSuccessor() == dest) {
- op = Token::NegateCompareOp(op);
+ if (compare->GetInputRepresentation().IsInteger32()) {
+ Token::Value op = compare->token();
+ if (test->SecondSuccessor() == dest) {
+ op = Token::NegateCompareOp(op);
+ }
+ Token::Value inverted_op = Token::InvertCompareOp(op);
+ InferControlFlowRange(op, compare->left(), compare->right());
+ InferControlFlowRange(inverted_op, compare->right(),
compare->left());
}
- Token::Value inverted_op = Token::InvertCompareOp(op);
- InferControlFlowRange(op, compare->left(), compare->right());
- InferControlFlowRange(inverted_op, compare->right(), compare->left());
}
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev