srdjan@google.com
cd92319223
Optimize string length one comparisons by comparing char codes only. Implemented for one byte strings only at the moment. Will add other string types/mixed compares later.
...
R=fschneider@google.com
Review URL: https://codereview.chromium.org//105143011
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31347 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-20 20:11:38 +00:00
fschneider@google.com
e994d8b697
Revert r31326.
...
TBR=johnmccutchan@google.com ,
Review URL: https://codereview.chromium.org//118133004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31332 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-20 12:21:09 +00:00
fschneider@google.com
fe726e1971
Use parallel move resolver for optimized try-catch.
...
This CL has no change in functionality and is purely clean up and
refactoring. Instead of manually generating the moves at throwing
instructions in try-catch, construct a parallel move and use the resolver
to emit the native code. This eliminates a lot of duplicated code
from all platforms.
It will also allow to re-use stack space that is currently allocated
separately for each individual try-catch in a function.
I added a few more unrelated minor changes in various parts of the VM
* Simpilify guard code generation
* Resolve refactoring TODO in deoptimization
* Improve names
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//119213002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31326 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-20 09:41:42 +00:00
fschneider@google.com
21d0b251e0
Update double unboxing heuristic.
...
R=srdjan@google.com
Review URL: https://codereview.chromium.org//119103002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31324 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-20 09:18:40 +00:00
srdjan@google.com
761d4d04cd
Constant propagation in LoadIndexed when inputs are array/string and index constants.
...
R=fschneider@google.com , johnmccutchan@google.com
Review URL: https://codereview.chromium.org//102973007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31230 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-18 16:55:12 +00:00
fschneider@google.com
f7149b05c8
Fix bug in double unboxing.
...
The state bit that record if a field is unboxed or not has to be checked
in unoptimized code as well, since that code does not change when deoptimizing.
I also compacted the kind_bits bit field in the Field class to start from bit 0.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//106623006
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31229 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-18 15:46:39 +00:00
fschneider@google.com
6abd6e326e
Add mutable double boxes for fields.
...
This allows the optimizing compiler to generate unboxed loads/stores
to fields containing double values. The double value is stored
in a reusable double object.
Unboxed loads/stores are generated for optimized code. Unoptimized code
allocates a new double on loads. To avoid performance regressions
for fields that are only written few times (e.g. only in the constructor)
I put a heuristic in place that
compares the usage count of setters and getters. Unboxed operations
are only generated if the setter is invoked a significant amount of
times (threshold is 10% of getter invocations).
The CL is so big because it changes the way LocationSummmary
is allocated: We now have a bit to generate different summaries
for optimized and unoptimized code.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//99573005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31164 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-16 15:11:31 +00:00
ajohnsen@google.com
7d4e2f9ac8
Alternative Timer implementation using simply list-based priority heap.
...
The current implementation is not memory-optimized yet, to make it
easier to review.
BUG=
R=fschneider@google.com , lrn@google.com , sgjesse@google.com
Committed: https://code.google.com/p/dart/source/detail?r=31132
Review URL: https://codereview.chromium.org//99203010
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31158 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-16 12:56:37 +00:00
srdjan@google.com
98a1355ef9
Restoring the remaining CL 104893003. For instance call representing numerical comparisons and binary operations (double and Smi supported for now) that were never visited before optimization occurs, we guess the cids if one of the argument cids is known, e.g. ‘a == 1’ we guess that a is also going to be 1 thus avoiding emitting an IC-call in optimized code and propagating the type accordingly.
...
Remove AssertAssignableInstr::RecomputeType as it may cause incorrect behavior: it changes the type of its value based on input, the graph below will then incorrectly remove CheckSmi.
v27 <- BinaryMintOp:14(..
v28 <- AssertAssignable(v27)
CheckSmi(v28)
v17 <- BinarySmiOp:86(+, v28, v12)
R=fschneider@google.com
Review URL: https://codereview.chromium.org//114543004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31137 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-13 17:15:05 +00:00
srdjan@google.com
d1485f3058
Some cleanups, fixes. Parts of the cid guessing CL that was revrted.
...
R=fschneider@google.com
Review URL: https://codereview.chromium.org//112243002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31085 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-11 22:25:38 +00:00
srdjan@google.com
92c6188860
Revert r31036, because of bit redness.
...
Review URL: https://codereview.chromium.org//101373006
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31039 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-10 21:16:02 +00:00
srdjan@google.com
07775d340e
For instance call representing numerical comparisons and binary operations (double and Smi supported for now) that were never visited before optimization occurs, we guess the cids if one of the argument cids is known, e.g. ‘a == 1’ we guess that a is also going to be 1 thus avoiding emitting an IC-call in optimized code and propagating the type accordingly.
...
R=fschneider@google.com
Review URL: https://codereview.chromium.org//104893003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31036 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-10 19:09:44 +00:00
fschneider@google.com
be4ffc62d6
VM: Generalize using propagated cids for to >1 arguments.
...
When ic-data are missing (optimized code that was not executed yet),
the compiler tries to fill in information calculated with type propagation.
The approach was only used for calls with 1 tested argument. This
enables it for all calls where we want to use propagated type
information if ic-data are missing.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//110703004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31020 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-10 15:23:14 +00:00
srdjan@google.com
b93e8d9267
Removed debuggging printf.
...
Review URL: https://codereview.chromium.org//102213003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30829 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-03 22:07:16 +00:00
srdjan@google.com
a8f549dbc3
Merge sin(a), cos(a) into one instruction. On IA32 use x87 fsincos operation, on x64 call runtime routine whihc merges sin/cos intos sincos.
...
TODO: Implement for ARM and MIPS.
R=fschneider@google.com
Review URL: https://codereview.chromium.org//92433002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30827 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-03 22:00:27 +00:00
fschneider@google.com
8b0b3fde4d
Generalize if-conversion to arbitrary smi comparisons.
...
Until now only == and != comparisons were supported.
Further changes are:
Remove flag FLAG_new_identity_spec: It is not needed anymore.
Invoke Canonicalize another time before branch optimizations.
Fixes support for TestSmiInstr with the branch-simplifier pass.
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//78733002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30622 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-25 12:57:21 +00:00
regis@google.com
d1e945994e
Improve type test and type equality for generics (issue 15148).
...
R=srdjan@google.com
Review URL: https://codereview.chromium.org//81363002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30546 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-21 21:30:51 +00:00
srdjan@google.com
3165e204e3
Merge TRUNCDIV and MOD into one instruction. Icorporated feedback from CL https://codereview.chromium.org/68663003
...
R=fschneider@google.com
Review URL: https://codereview.chromium.org//79653002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30536 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-21 17:56:54 +00:00
regis@google.com
db2cec593d
Distinguish between malformed and malbounded types more efficiently using the
...
recently introduced LanguageError 'kind' field.
R=hausner@google.com
Review URL: https://codereview.chromium.org//75713002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30383 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-18 23:31:12 +00:00
fschneider@google.com
35225e5888
Constant propagation support for type asserts.
...
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//70133004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30232 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-13 15:57:26 +00:00
srdjan@google.com
16f4e5c690
Constant fold strict comparison based on incoming types: different (exact) types means that the result is false. LoadStaticField computes type for final fields. Make a temporary buffer final.
...
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//57703004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30119 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-08 17:42:45 +00:00
srdjan@google.com
b97c8e894c
Inline integer modulo operation.
...
R=zra@google.com
Review URL: https://codereview.chromium.org//61123003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30075 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-07 21:50:26 +00:00
johnmccutchan@google.com
efbf86f30a
Take representation into account in ConstantPropagator::VisitInstanceOfInstr
...
BUG=
R=fschneider@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//25604003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30012 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-06 23:47:54 +00:00
fschneider@google.com
aa789a7b27
Merge (x & y) == 0 pattern to emit a single test instruction.
...
This is based on a previous uncommitted CL by vegorov@
(https://codereview.chromium.org/14251023/ ).
It is rebased and fixes a bug in the MIPS implementation: BranchOnCondition
requires the comparison result in fixed registers CMPRES1/CMPRES2.
Remove register alias TMP1 (=TMP) and CMPRES (=CMPRES1). It is confusing to
have them around and easy to forget that they are actually the same.
R=srdjan@google.com , zra@google.com
Review URL: https://codereview.chromium.org//59613005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29966 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-06 12:13:29 +00:00
zra@google.com
ca82c461a0
Impelments IfThenElse instruction for ARM and MIPS.
...
R=fschneider@google.com
Review URL: https://codereview.chromium.org//58003003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29933 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-05 20:45:25 +00:00
johnmccutchan@google.com
29c01044bc
This is the final breaking change in dart:typed_data needed for Dart 1.0. We need this change because the ECMAScript SIMD specification only includes Int32x4 and Int32x4List and our types must match.
...
R=srdjan@google.com
Review URL: https://codereview.chromium.org//56023004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29849 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-04 21:56:59 +00:00
fschneider@google.com
9031c80c88
Change == into an instance call to allow polymorphic inlining of ==.
...
In unoptimized code equality is now just another instance call.
The optimizer replaces it with a specialized implementation based on static
type information and type feedback.
Many of the manual optimizations of == in the optimizer are now just handled
by the generic inliner, plus polymorphic inlining of == calls is now possible.
This also eliminates the need for a lot of duplicated code in the backend.
I adapted the inlining heuristics to compensate for the slightly larger
inital flow graph size.
Review URL: https://codereview.chromium.org//27307005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29800 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-04 11:32:52 +00:00
johnmccutchan@google.com
5f63715d47
SIMD shuffle API changes
...
R=srdjan@google.com , zra@google.com
Review URL: https://codereview.chromium.org//51373004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29723 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-01 07:09:54 +00:00
fschneider@google.com
ce9573722c
VM: Fix checked mode crash (issue 13831).
...
The AST for static getters differs between parsing the first time, and
subsequent parsings. This leads to a mismatch in deoptimization-ids
between the optimized and the unoptimized code.
This CL avoids creating different ASTs for the same static getters. To allow
better inlining of these getters, the initialization expression is wrapped in a
hidden static initializer-function. As a result the size of such getters is
constant and does not depend on the initializer expression.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//51123003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29680 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-31 16:49:55 +00:00
johnmccutchan@google.com
8a0fd8ce4d
Add Uint32x4List to typed_data
...
R=asiva@google.com , srdjan@google.com , vsm@google.com
Review URL: https://codereview.chromium.org//51333005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29639 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-31 04:57:38 +00:00
srdjan@google.com
cacd63cf7b
Improve indexOf for one byte string receiver to work with other string classes.
...
Optimize access to core class’s class-ids.
R=zra@google.com
Review URL: https://codereview.chromium.org//47073009
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29610 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-30 23:51:42 +00:00
fschneider@google.com
be9875fb2b
VM: Fix bug in polymorphic inlining of recognized methods.
...
The inliner has to insert a redefinition of the receiver to
prevent illegal hoisting of instructions that depend on the
receiver class id.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//47933004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29389 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-28 20:20:11 +00:00
srdjan@google.com
8e7c6a5fae
Move Stringinterpolation constant folding from constant propagator to canonicalizer. StrinIterpolateInstr cannot directlly refer to interpolation arguments but only to the array that holds them, therefore constant propagation cannot be applied.
...
R=fschneider@google.com
Review URL: https://codereview.chromium.org//34523007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29118 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-23 20:37:18 +00:00
fschneider@google.com
4ecceeebb6
Use enums for the index of IL operands.
...
Addressing comments from a previous CL (https://codereview.chromium.org/28633003/ ).
R=srdjan@google.com
Review URL: https://codereview.chromium.org//35893012
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29087 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-23 15:27:09 +00:00
johnmccutchan@google.com
4ebeadba11
This CL enables the polymorphic inliner to inline loads on typed array views.
...
It also contains a small cleanup so that the signatures of BuildByteArrayViewLoad and BuildByteArrayViewStore match.
R=fschneider@google.com
Review URL: https://codereview.chromium.org//26191002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29066 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-23 09:18:52 +00:00
fschneider@google.com
593abec44c
Fix bug with load elimination in checked mode.
...
Definitions that are redefined through AssertAssignable must be
unwrapped to number loads/stores correctly for them.
Fix test expectations for tests that are passing now that the
corresponding co19 test was changed.
BUG=https://code.google.com/p/dart/issues/detail?id=13543
R=srdjan@google.com
Review URL: https://codereview.chromium.org//35093002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29001 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-22 16:03:48 +00:00
fschneider@google.com
369a58132e
Fix bugs in load elimination and type propagation.
...
Load elimination should consider the representation of loads/stores
when numbering places. Different representations result now in different
places so that there can't be mixed representations at phis after
load elimination.
Removed the flag --propagate-types because type propagation is required
for correctness of smi-check hoisting. Therefore, switching it off does not
make sense anymore.
BUG=https://code.google.com/p/dart/issues/detail?id=6663 , https://code.google.com/p/dart/issues/detail?id=14271
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//28633003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28931 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-21 13:59:56 +00:00
fschneider@google.com
8779bc8d7f
Optimize identical-comparisons based on propagated type information.
...
If the propagated type allows, eliminate the check for numbers at
identical operations in optimized code.
The previous optimizaton was done before full type propagation was run
and was therefore not very effective.
* Made flow-graph printing having no side-effects: calling Type() lazily
initializes the type_ and reaching_type_ fields of Value and Definition.
Access fields directly when printing instead.
Also, fixed two random spelling mistakes.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//27727002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28851 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-18 11:13:59 +00:00
srdjan@google.com
14b7cc4b18
Temporary disable string-interpolation constant folding until failures witj --optimization-counter-threshold=5 are resolved.
...
Review URL: https://codereview.chromium.org//27581002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28749 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-16 20:53:03 +00:00
srdjan@google.com
b83bda9e0e
Add new style of string interpolation optimization: new nodes, working constant folding.
...
TODO: partial constant fold of incoming arguments.
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//27192005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28741 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-16 18:12:08 +00:00
regis@google.com
2f900dab13
Cache number of type arguments in class object instead of recalculating it.
...
Reduce size of num_native_fields field in class object.
R=asiva@google.com
Review URL: https://codereview.chromium.org//26682003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28670 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-15 18:31:31 +00:00
srdjan@google.com
2f0a906dbf
Cleanups, refactoring in anticipation of new string interpolation nodes. Removed unnecessary code.
...
R=hausner@google.com
Review URL: https://codereview.chromium.org//27006003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28619 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-14 23:21:52 +00:00
johnmccutchan@google.com
90895e8d39
Forward stores to loads for SIMD arrays
...
R=srdjan@google.com
Review URL: https://codereview.chromium.org//25809002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28467 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-10 17:43:50 +00:00
fschneider@google.com
30e536845d
Fix bug in inlining of []= operators.
...
When inserting the StoreIndexedInstruction, it needs the
environment of the call attached to it.
BUG=https://code.google.com/p/dart/issues/detail?id=13797
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//25991002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28257 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-04 09:51:27 +00:00
fschneider@google.com
2cff01970b
Polymorphic inlining for []= operators.
...
This CL allows the inliner to do polymorphic inlining of recognized
[]= operators. Before, only monomorphic calls were handled in the
optimizer.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//25411004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28202 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-03 09:43:50 +00:00
srdjan@google.com
07366f0524
Disable string interpolation optimization until fixed.
...
Review URL: https://codereview.chromium.org//25417003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28176 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-02 18:48:07 +00:00
srdjan@google.com
008229fa11
Optimize string interpolation by running it at compile time if all inputs are constant. This is done during constant propagation, however, the argument construction instructions must be removed manually. It is unclear how safe it is to modify graph during constant propagation.
...
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//24837002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28175 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-02 17:49:14 +00:00
fschneider@google.com
0b57a04965
Bug fix in load elimination, constant propagation for LoadClassId.
...
Handle LoadClassId in constant propagation. This helps with eliminating
unreachable code after polymorphic inlining. It exposed a bug which is
also fixed in this CL.
Redefinitions of values have to be considered for load/store forwarding:
Loads/stores to an object defined by a RedefinitionInstr (inserted by
polymorphic inlining) must be treated properly as loads/stores to the
original object.
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//25640004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28159 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-02 13:27:55 +00:00
fschneider@google.com
e9f0b93eb1
Revert r28050 due to crashes with --optimization-counter-threshold=5.
...
TBR=kmillikin@google.com
Review URL: https://codereview.chromium.org//25277002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28052 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-30 14:29:44 +00:00
fschneider@google.com
acb389dbf9
Optimize conditional branches that have same true/false targets.
...
Branches that have the same true/false target, or where both
target blocks reach the same common join block via empty blocks
can be replaced by a goto to the common join block.
In code like this
var a = unknown();
var b = null;
if (a == null || b == null) {
...
}
it eliminates the test (a == null) if b is known to be null. Until now,
the compiler could only eliminate the test for b, if a was known.
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//23549020
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28050 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-30 12:41:28 +00:00