Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: runtime/vm/flow_graph_range_analysis.cc

Issue 539153002: Port and integrate the irregexp engine from V8 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Port remaining V8 regexp tests and fix exposed bugs. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/flow_graph_range_analysis.h" 5 #include "vm/flow_graph_range_analysis.h"
6 6
7 #include "vm/bit_vector.h" 7 #include "vm/bit_vector.h"
8 #include "vm/il_printer.h" 8 #include "vm/il_printer.h"
9 9
10 namespace dart { 10 namespace dart {
(...skipping 1967 matching lines...) Expand 10 before | Expand all | Expand 10 after
1978 *range = Range(RangeBoundary::FromConstant(0), 1978 *range = Range(RangeBoundary::FromConstant(0),
1979 RangeBoundary::FromConstant(0xFFFF)); 1979 RangeBoundary::FromConstant(0xFFFF));
1980 break; 1980 break;
1981 default: 1981 default:
1982 Definition::InferRange(analysis, range); 1982 Definition::InferRange(analysis, range);
1983 break; 1983 break;
1984 } 1984 }
1985 } 1985 }
1986 1986
1987 1987
1988 void LoadCodeUnitsInstr::InferRange(RangeAnalysis* analysis, Range* range) {
1989 ASSERT(class_id() == kOneByteStringCid ||
1990 class_id() == kTwoByteStringCid);
1991 switch (class_id()) {
1992 case kOneByteStringCid:
1993 case kTwoByteStringCid:
1994 *range = Range(RangeBoundary::FromConstant(0),
1995 RangeBoundary::FromConstant(0xFFFFFFFF));
Florian Schneider 2014/10/01 17:04:15 s/0xFFFFFFFF/kMaxUint32/
jgruber1 2014/10/03 18:59:54 Done.
1996 break;
1997 default:
1998 UNREACHABLE();
1999 break;
2000 }
2001 }
2002
2003
1988 void IfThenElseInstr::InferRange(RangeAnalysis* analysis, Range* range) { 2004 void IfThenElseInstr::InferRange(RangeAnalysis* analysis, Range* range) {
1989 const intptr_t min = Utils::Minimum(if_true_, if_false_); 2005 const intptr_t min = Utils::Minimum(if_true_, if_false_);
1990 const intptr_t max = Utils::Maximum(if_true_, if_false_); 2006 const intptr_t max = Utils::Maximum(if_true_, if_false_);
1991 *range = Range(RangeBoundary::FromConstant(min), 2007 *range = Range(RangeBoundary::FromConstant(min),
1992 RangeBoundary::FromConstant(max)); 2008 RangeBoundary::FromConstant(max));
1993 } 2009 }
1994 2010
1995 2011
1996 static RangeBoundary::RangeSize RepresentationToRangeSize(Representation r) { 2012 static RangeBoundary::RangeSize RepresentationToRangeSize(Representation r) {
1997 switch (r) { 2013 switch (r) {
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
2189 } 2205 }
2190 } while (CanonicalizeMaxBoundary(&max) || 2206 } while (CanonicalizeMaxBoundary(&max) ||
2191 CanonicalizeMinBoundary(&canonical_length)); 2207 CanonicalizeMinBoundary(&canonical_length));
2192 2208
2193 // Failed to prove that maximum is bounded with array length. 2209 // Failed to prove that maximum is bounded with array length.
2194 return false; 2210 return false;
2195 } 2211 }
2196 2212
2197 2213
2198 } // namespace dart 2214 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698