From 7175dc09ef7a204bd25109969a0a6e8a72a3fd25 Mon Sep 17 00:00:00 2001 From: "whesse@chromium.org" Date: Thu, 10 Mar 2011 13:34:56 +0000 Subject: [PATCH] Crankshaft: Fix error in range analysis of compare operations. Review URL: http://codereview.chromium.org/6658035 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7130 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/hydrogen.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/hydrogen.cc b/src/hydrogen.cc index e47712eb75..25a6db3ac1 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -900,13 +900,15 @@ void HRangeAnalysis::InferControlFlowRange(HTest* test, HBasicBlock* dest) { 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()); } }