Commit Graph

254 Commits

Author SHA1 Message Date
zra@google.com 1299ad1485 Allows turning on checked mode on a per-isolate basis
using the embedding API.

R=regis@google.com, srdjan@google.com

Review URL: https://codereview.chromium.org//883263004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43481 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-04 18:32:48 +00:00
fschneider@google.com 75ad2d8253 VM: Improve polymorphic check-class in optimized code.
Sort comparisons by decreasing IC count like we do for polymorphic inlining.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//895603002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43392 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-03 12:30:51 +00:00
zerny@google.com c77ab72c54 Use a typed array for the irregexp stack.
BUG=
R=vegorov@google.com

Review URL: https://codereview.chromium.org//800433004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43039 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-21 15:11:36 +00:00
koda@google.com 33b55e64e4 Isolate/Thread split: Isolate -> Zone for LocationSummary.
The isolate was being passed around, even though only its current zone was used.

Pass that zone directly instead, giving two benefits:
1. helps prepare for the upcoming Isolate/Thread split, where "new(isolate)" must go, and
2. saves a pointer indirection at the allocation sites.

Review URL: https://codereview.chromium.org//855533002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42935 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-15 21:29:57 +00:00
zerny@google.com a557c0048b Support unboxed input to indirect goto instruction.
R=vegorov@google.com
BUG=

Review URL: https://codereview.chromium.org//846553003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42762 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-12 06:09:48 +00:00
koda@google.com 600cd31660 Distinguish between initialization and updates to object fields. Currently only for DEBUG mode verification, but will be needed for deletion barrier.
Split up initialization flag in StoreInstanceFieldInstr for needed more precise semantics.

Zap swept old space with same value as uninitialized new in debug mode.

R=fschneider@google.com

Review URL: https://codereview.chromium.org//836593002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42717 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-08 20:45:39 +00:00
regis@google.com fc919001c5 Improve generated MIPS code for conditional expressions and branches by delaying
emission of comparison code.
Improve instruction tracing in all simulators.

R=zra@google.com

Review URL: https://codereview.chromium.org//817593002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42555 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-22 20:50:15 +00:00
vegorov@google.com 0e1479d2cb Merge RawICData::range_feedback_ field into RawICData::state_bits_.
We were using a lot of bits in state_bits for recording deoptimization reasons, never asked about presence of those bits.

Ultimately optimizer cares only about 3 different deopts, so most all of those bits were wasted.

R=srdjan@google.com, zra@google.com
BUG=

Review URL: https://codereview.chromium.org//807593002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42388 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-16 13:12:35 +00:00
regis@google.com d60c4bc3b6 Pass condition result explicitly. Do not imply the existence of a status
register. MIPS does not have one.
This is in preparation of another cl improving generated code for conditional
expressions and branches on MIPS.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//798643003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42346 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-12 21:12:40 +00:00
hausner@google.com 392db8d312 Implement correct semantics of Boolean Conversion
When converting null to a boolean value, throw an AssertionError
rather than a TypeError.

This is the same change as r42145, with added co19 status updates.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//779253003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42170 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-08 18:51:48 +00:00
hausner@google.com 4cfdf02012 Revert r42145 to fix co19 tests
Review URL: https://codereview.chromium.org//772513003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42148 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-05 21:05:38 +00:00
hausner@google.com ad837a0d9f Implement correct semantics of Boolean Conversion
When converting null to a boolean value, throw an AssertionError
rather than a TypeError.

Fixes issue 21279.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//778063002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42145 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-05 20:36:37 +00:00
regis@google.com 1757888022 Implement mint unboxing on MIPS.
R=zra@google.com

Review URL: https://codereview.chromium.org//777943003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42138 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-05 18:27:37 +00:00
zerny@google.com 4fb54d853d Support use of external strings as inputs to LoadCodeUnitsInstr.
R=vegorov@google.com
BUG=

Review URL: https://codereview.chromium.org//765743003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42099 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-04 09:26:48 +00:00
vegorov@google.com bfa152df59 Support non-deoptimizing version of UnboxInt32 for integer definitions.
If range analysis infered that integer definition is within Int32 range then it is guaranteed to be either Smi or Mint.

BUG=http://dartbug.com/21763
R=fschneider@google.com

Review URL: https://codereview.chromium.org//770303002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42065 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-02 13:19:03 +00:00
zerny@google.com 8e807c8550 Integrate the Irregexp Regular Expression Engine.
BUG=http://dartbug.com/19090
R=fschneider@google.com

Committed: https://code.google.com/p/dart/source/detail?r=41949

Review URL: https://codereview.chromium.org//744853003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41983 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-26 09:32:43 +00:00
zerny@google.com 84a4135901 Revert "Integrate the Irregexp Regular Expression Engine."
This reverts commit https://code.google.com/p/dart/source/detail?r=41949

TBR=fschneider@google.com
BUG=

Review URL: https://codereview.chromium.org//754383002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41950 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-25 13:36:40 +00:00
zerny@google.com 43ac0c6f33 Integrate the Irregexp Regular Expression Engine.
BUG=http://dartbug.com/19090
R=fschneider@google.com

Review URL: https://codereview.chromium.org//744853003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41949 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-25 13:10:21 +00:00
vegorov@google.com e6847ac17c IR refactoring: consolidate all boxing and unboxing instructions.
BUG=
R=fschneider@google.com

Review URL: https://codereview.chromium.org//670263007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41437 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-31 12:17:12 +00:00
fschneider@google.com 876193b31a Make CTX allocatable by the register allocator.
This change makes CTX available by not caching the current
context while in Dart code. Instead the current context
is held in a local variable (:saved_current_context_var) and
is passed as argument in CTX at calls.

This also simplifies a lot of code in the debugger: As a result,
Isolate::top_context is not needed anymore since the current context
can always be extracted from a Dart frame.

R=vegorov@google.com

Review URL: https://codereview.chromium.org//678763004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41422 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-30 15:42:38 +00:00
fschneider@google.com 1dc4e979d9 Remove isolate pointer from context objects.
By moving all stubs that do runtime calls into the isolate
we don't need to cache the current isolate in each context
object.

This saves space on each context at the cost of duplicating stubs
in each isolate. Most stubs are already isolate-specific and the total number
 of stubs is small enough for this to be a good trade-off.

R=vegorov@google.com

Review URL: https://codereview.chromium.org//668193002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41279 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-24 12:19:20 +00:00
vegorov@google.com fb915fe887 IR cleanup: pass deopt id as constructor argument instead of doing deopt_id_ assignment.
This also kills a list of Instruction friends that was growing without bounds.

R=srdjan@google.com
BUG=

Review URL: https://codereview.chromium.org//676743002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41278 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-24 11:27:17 +00:00
fschneider@google.com c6e2650073 VM: Avoid repeated deoptimizations from hoisted array bounds checks.
R=vegorov@google.com

Review URL: https://codereview.chromium.org//662543003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41223 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-21 10:36:52 +00:00
fschneider@google.com 9087108b5f VM: Avoid repeated deoptimization on speculatively hoisted smi-checks.
This adds the same check as we already have for CheckClass for
CheckSmi and CheckEitherNonSmi instructions to avoid repeated
deoptimization after LICM.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//657613004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41133 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-15 15:46:49 +00:00
johnmccutchan@google.com 7bbdfc2e16 - Use UnboxedInt32 and UnboxedUint32 representation for LoadIndexedInstr
- Avoid inserting an check class instruction for Uint32 and Int32 arrays on StoreIndexedInstr
- Implement Int32ToDouble on all architectures
- Add Int32 to double instruction to ARM64 and simulator.
- Add Int32 to double instruction to X64.

R=vegorov@google.com, zra@google.com

Review URL: https://codereview.chromium.org//616873003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41025 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-09 20:49:15 +00:00
vegorov@google.com e6113cc0f5 If bounds check 0 <= index < length is not redundant we attempt to
replace it with a sequence of checks that guarantee

          0 <= LowerBound(index) < UpperBound(index) < length

and hoist all of those checks out of the enclosing loop.

Upper/Lower bounds are symbolic arithmetic expressions with +, -, *
operations and are computed based on discovered simple induction variables.

Simple induction variable is a variable that follows the pattern v1 <- phi(v0, v1 + 1)

BUG=
R=fschneider@google.com

Review URL: https://codereview.chromium.org//619903002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40969 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-07 18:50:29 +00:00
zra@google.com f9b269397c Unrolls array initialization loop for small arrays.
This is similar to what is already done for
object field initializaion, and gives a small
performance improvement on ARM.

R=regis@google.com

Review URL: https://codereview.chromium.org//627103005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40961 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-07 16:26:18 +00:00
zra@google.com 240afa6afa Expands the use of Immediate and Operand wrappers.
Since Register is an enum type, it is automatically
coerced to integer types when passed as a parameter to
functions expecting an integer argument. This change
expands the use of Immediate and Operand wrappers
for Assembler instructions and macros to avoid this
automatic coercion.

I've also added dummy constructors to Address and
FieldAddress classes to address the same problem,
but in a way that does not increase verbosity,
since Address and FieldAddress are much more
prevalent in the code.

A cleaner solution would involve making Register
no longer coercable to integer types, but this
would likely require many changes to the Assemblers.

R=regis@google.com

Review URL: https://codereview.chromium.org//593363003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40905 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-03 19:46:24 +00:00
fschneider@google.com c09da4c344 VM: Improve generated code for loading the current context.
Instead of emitting a move instruction, specify CTX as result
register.

R=vegorov@google.com

Review URL: https://codereview.chromium.org//626523002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40884 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-02 16:02:15 +00:00
johnmccutchan@google.com 5b05c23c9f Revert r40848
BUG=

Review URL: https://codereview.chromium.org//618353002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40850 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-01 18:27:09 +00:00
johnmccutchan@google.com 0c61e7eff2 Make LoadIndexedInstr for Uint32List use kUnboxedUint32 representation
BUG=
R=vegorov@google.com

Review URL: https://codereview.chromium.org//612553002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40848 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-01 17:46:46 +00:00
koda@google.com 60b12996ec Track references to allocation stubs via static_calls_table, instead of keeping two referencers alive.
(Verbatim copy of srdjan's https://codereview.chromium.org/609893002/ )

TBR=srdjan@google.com

Review URL: https://codereview.chromium.org//608913002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40738 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-26 20:17:53 +00:00
iposva@google.com cc13627fc8 - Remove Isolate::CurrentAddress().
- Remove use of INFINITY and -INFINITY.

R=rmacnak@google.com, srdjan@google.com

Review URL: https://codereview.chromium.org//609593002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40700 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-25 23:39:30 +00:00
koda@google.com a3b31e3364 Make AllocateArray stub patchable, like instance allocation stubs.
R=srdjan@google.com

Review URL: https://codereview.chromium.org//600243002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40699 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-25 23:31:08 +00:00
johnmccutchan@google.com fa189495a5 * Fixes ICData collection on Double.fromInteger factory constructor (for both smi and mint).
* Inlines instance calls to toDouble on mint.
* Adds fast path mint -> double for IA32.

R=fschneider@google.com

Review URL: https://codereview.chromium.org//562203005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40501 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-19 16:23:38 +00:00
fschneider@google.com 4747a7a3ee VM: Remove unreachable code from the code generator.
In the case of zero checks, the optimizer does not specialize
an instance call when visiting (FlowGraphOptimizer::VisitInstanceCall).
There is no need to have code for this case in the code generator.

R=vegorov@google.com

Review URL: https://codereview.chromium.org//559313004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40434 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-18 13:05:49 +00:00
vegorov@google.com d61a330d7c Initial steps towards cleaning up integer arithmetic IR.
Introduce base classes for binary and unary integer operations and move all shared logic (e.g. canonicalization) into these classes.

Start removing special cases dispatch from instructions patterns - it goes into Canonicalization pass.

Start removing duplication between instruction patterns where meaningful and possible.

Cleanup the notion of truncation in the operations: is_truncating implies !can_overflow, not the other way around.

BUG=
R=johnmccutchan@google.com, srdjan@google.com

Review URL: https://codereview.chromium.org//564843002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40375 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-17 13:31:13 +00:00
fschneider@google.com bdd6b29fd8 Revert r40306 because of crash.
TBR=vegorov@google.com

Review URL: https://codereview.chromium.org//572913002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40312 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-16 12:14:33 +00:00
fschneider@google.com cd78dbe709 Refactor generating lazy deoptimization descriptors.
Instead of having special handling for closure calls, pass
the number of input operands down so that the correct lazy
deoptimization environment is generated at calls.

There is no functional change here - this is to simplify
having calls with pushed arguments and input operands
(like closure calls).

Runtime calls still do not have a correct lazy deoptimization environment
the environment should only be used for creating stack traces
from optimized code.

Fix a bug with --trace-deoptimization-verbose printing: We
cannot call ToCString on objects when the slots have not
been filled in yet. (e.g. Closures)

R=vegorov@google.com

Review URL: https://codereview.chromium.org//575443002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40306 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-16 10:31:47 +00:00
fschneider@google.com 2731828467 Refactor emitting of deoptimization descriptors for calls.
Instead of emitting the descriptor in EmitNativeCode, the
instruction prologue now emits the descriptor automatically.
To do that all instructions that need such a descriptor have
CanBecomeDeoptimizationTarget set to true.

I moved the duplicated for TargetEntryInstr::EmitNativeCode
to intermediate_language.cc.

R=vegorov@google.com

Review URL: https://codereview.chromium.org//565643002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40150 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-11 13:54:20 +00:00
vegorov@google.com 183abe7207 Fix StoreIndexedInstr input representation requirements for Int32/Uint32 arrays.
Previous implementation changed input representation depending on the propagated type of the value which violated assumptions made by SelectRepresentations phase.

Instead of using tagged/mint input require unboxed Int32/Uint32 input and insert explicit truncating unboxing when building StoreIndexed operation in the optimizer. This also leads to strictly better code and opens possibilities for further optimizations.

Implement Int32/Uint32 representation support on all platforms. This includes boxing, unboxing and unboxed converter operations.

Merge BoxInt32/BoxUint32 and UnboxInt32/UnboxUint32 instruction sequences to minimize duplication.

Improve instruction sequences by utilizing CARRY flag set by smi untagging where possible (ARM, ia32, x86).

Enable all tests that were disabled by r40078, r40079.

BUG=http://dartbug.com/20875
R=fschneider@google.com, johnmccutchan@google.com, srdjan@google.com, zra@google.com

Review URL: https://codereview.chromium.org//552303005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40143 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-11 12:32:54 +00:00
fschneider@google.com da0fb6bbe2 More intrinsics in IR.
R=srdjan@google.com, vegorov@google.com, zra@google.com

Review URL: https://codereview.chromium.org//513213002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40088 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-10 13:34:58 +00:00
vegorov@google.com 2d9907c88c Ensure that BoxInt32 input is correctly preserved on the slow-path.
Register allocator is unable to preserve writable registers automatically because they behave like temps: have no fixed represenation or usage inside the instruction template.

This means writable registers have to be manually added with the right representation to the live_register set when necessary.

Add verification that checks this and fix existing misuses.

R=fschneider@google.com
BUG=

Review URL: https://codereview.chromium.org//517343002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39703 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-29 15:19:51 +00:00
vegorov@google.com c8e5382693 Address review comments for r39595.
R=srdjan@google.com, srdjan@googe.com
BUG=

Review URL: https://codereview.chromium.org//516013003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39697 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-29 11:36:11 +00:00
vegorov@google.com 9f9e250e92 Support Int32 representation for selected binary operations.
BUG=
R=fschneider@google.com

Review URL: https://codereview.chromium.org//504143003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39595 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-27 14:49:19 +00:00
hausner@google.com 0bbf6c5b16 Runtime support for evaluation of static field initializer expressions
Eliminates the generation of field initializer functions by the parser.
Adds a runtime call that creates a one-shot function to evaluate the
initializer of a static field. The runtime function gets called from
the implicit static getter function for the field.

R=srdjan@google.com, zra@google.com

Review URL: https://codereview.chromium.org//471283002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39387 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-19 21:53:44 +00:00
johnmccutchan@google.com e182b3b5a9 Fix build by adding missing methods for MIPS
BUG=

Review URL: https://codereview.chromium.org//470303002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39261 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-14 18:35:24 +00:00
zra@google.com f82d4e2b7f Fixes typo in mips causing test failures.
Review URL: https://codereview.chromium.org//475503002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39216 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-13 19:36:18 +00:00
fschneider@google.com 36c848d1d7 VM: Optimized context allocation on all platforms.
This change generate inline code for context allocation and makes
the stores to initialize the parent pointer and the context variables
explicit in the optimized flow graph. This allows dead store elimination
to eliminate those stores.

Before, we only had inlined context allocation for ia32.

Furthermore:
* Added an assertion that the exit label of slow-path code
is bound when emitting deferred code. This used to cause random crashes
if forgotten.

* Fixed a bug in allocation stats on ARM.

BUG=dartbug.com/17238
R=srdjan@google.com

Review URL: https://codereview.chromium.org//346823003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39202 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-13 15:49:01 +00:00
fschneider@google.com f917ffe213 VM: Micro-optimization of inline array allocation code.
The loop initializing a newly allocated array now has only
one branch, instead of two per iteration.

Removed some dead code from flowgraph.cc/.h.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//447793003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39092 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-11 15:59:00 +00:00