From 83c7c699ebcecaf27156beaba2d33ed612d8e8bf Mon Sep 17 00:00:00 2001 From: "fschneider@chromium.org" Date: Wed, 5 Jan 2011 11:25:42 +0000 Subject: [PATCH] Do not transform a/b into a * (1/b) in the parser for integer constants. Strength reduction should be performed at a later stage. This change avoid going to a double representation the case of integer division. Review URL: http://codereview.chromium.org/6044010 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@6174 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/parser.cc | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/src/parser.cc b/src/parser.cc index 55269339ab..ddb13003af 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -2323,26 +2323,6 @@ Expression* Parser::ParseBinaryExpression(int prec, bool accept_IN, bool* ok) { } } - // Convert constant divisions to multiplications for speed. - if (op == Token::DIV && - y && y->AsLiteral() && y->AsLiteral()->handle()->IsNumber()) { - double y_val = y->AsLiteral()->handle()->Number(); - int64_t y_int = static_cast(y_val); - // There are rounding issues with this optimization, but they don't - // apply if the number to be divided with has a reciprocal that can be - // precisely represented as a floating point number. This is the case - // if the number is an integer power of 2. Negative integer powers of - // 2 work too, but for -2, -1, 1 and 2 we don't do the strength - // reduction because the inlined optimistic idiv has a reasonable - // chance of succeeding by producing a Smi answer with no remainder. - if (static_cast(y_int) == y_val && - (IsPowerOf2(y_int) || IsPowerOf2(-y_int)) && - (y_int > 2 || y_int < -2)) { - y = NewNumberLiteral(1 / y_val); - op = Token::MUL; - } - } - // For now we distinguish between comparisons and other binary // operations. (We could combine the two and get rid of this // code and AST node eventually.)