Commit Graph

537 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
srdjan@google.com 12c5e2bbaf Cleanup: use const reference for ParsedFunction where possible.
R=rmacnak@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43226 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-28 00:41:09 +00:00
srdjan@google.com 110a74f954 Cleanups: parsed_function()->function() => function()
R=johnmccutchan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43213 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-27 22:09:31 +00:00
fschneider@google.com e081d375e4 Fix 64-bit bug in optimized class-check instructions.
The mask is machine-word wide, so the computation of the mask
must not use a 32-bit shift operation.

BUG=dartbug.com/22104
TEST=tests/language/vm/optimized_check_class_test.dart
R=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43014 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-20 16:00:43 +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
vegorov@google.com cc33fcab6b Handle LoadClassId(obj) === cid during type propagation.
R=fschneider@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42779 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-12 17:25:22 +00:00
zerny@google.com 786485b43b Use a fixed-size typed array for the dispatch offsets table.
R=fschneider@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42686 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-08 11:21:29 +00:00
fschneider@google.com 009eb5d33c Move ConstantPropagator from flow_graph_optimizer.cc/.h into separate files.
flow_graph_optimizer.cc is becoming unnecessarily large, so
I'm  moving self-contained optimization passes into
separate files.

In a separate CL I'll also move load/store optimization into
separate files.

R=srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42567 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-29 14:41:27 +00:00
srdjan@google.com f116c94dfc Cleanup access to Instruction's fields (especially deopt_id_).
R=johnmccutchan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42405 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-16 18:27:24 +00:00
vegorov@google.com 9fcfaa8468 Support remaping of pair location inside materializations for slow paths.
Move remaping logic into Location::RemapForSlowPath to ensure that it is shared and will not get out of sync again.

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

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42396 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-16 15:18:51 +00:00
vegorov@google.com aa48bd4759 Range feedback for arithmetic operations.
In addition to tracking input and output ranges in the IC-stubs with a Smi fastpath (SmiAdd and SmiSub, currently) this CL also introduces two IC stubs that have no fast-path by still track ranges and update the range feedback.

We are able to distinguish between the following ranges (encoding of the lattice is shown in the parens):

- u-smi  (0000)
- smi    (0001)
- uint31 (0010)
- int32  (0011)
- uint32 (0100)
- int64  (1xxx) and (x1x1)

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

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42370 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-15 18:48:15 +00:00
vegorov@google.com 4b0428dd83 Partially revert r42319 to pacify tests.
I will reconcile UnboxIntConverterInstr::CanDeoptimize and UnboxInt32::CanDeoptimize in a follow up CL.

BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42322 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-12 16:05:48 +00:00
vegorov@google.com a1b54bb96f When canonicalizing UnboxInt32([tr], BoxInt64()) make sure to mark resulting converter truncating.
We regressed this logic in r41736 when we started to  checking whether current UnboxInt32 can deoptimize, instead of whether it is truncating or not. This was too aggressive.

Additionally fix CanDeoptimize for UnboxInt32([tr], BoxInt64()). It was always returning true because CompileType is not smart enough to encode that Boxing returns either Smi or Mint, which is enough to guarantee that truncating UnboxInt32 won't deoptimize.

R=fschneider@google.com, fscheider@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42319 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-12 13:54:23 +00:00
vegorov@google.com a34c19ccca Adjust environments we attach to the block entries.
There were two bugs in the code:

- we did not ensure proper outer environment on block entries after inlining;

- we did not correct the 'after' environment for eager deopt

There is one bug still with the infrastructure: our deoptimization stub does *not* support eager deoptimization to the after deoptimization point.

I am leaving it like this for now, because we don't actually ever perform such deoptimization (i.e. even though we diligently attach these environments we don't actually use them in the instruction that can deopt).

R=fschneider@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42257 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-10 18:32:15 +00:00
fschneider@google.com e8f27c722a Better constant folding of length-loads in checked mode.
Handle redefinitions (Redefinition/AssertAssignable) when
checking for known constant length.

R=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42132 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-05 14:02:40 +00:00
srdjan@google.com bad6a61899 Cleanups.
R=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42069 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-02 18:48:12 +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
fschneider@google.com abde3a9699 Merge chains of straight-line blocks.
R=zerny@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42038 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-01 12:40:55 +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
fschneider@google.com d28319f4ae Undo changes to type propagation and canonicalization from my previous CL.
They triggered a bug with missing deoptimization environments in unboxing
of int32.

TBR=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41900 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-21 13:31:37 +00:00
fschneider@google.com 735e8fd6cd Reland and fix bug: Don't store redundant compile-type at values.
R=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41898 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-21 12:04:05 +00:00
vegorov@google.com 8f7f26c0a4 Reland "Suppress canonicalization of Unbox() instruction that can deoptimize."
This relands commit r41693 with additional fixes in canonicalization pass.

R=fschneider@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41736 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-14 11:19:42 +00:00
vegorov@google.com 97c3268f51 Revert "Suppress canonicalization of Unbox() instruction that can deoptimize."
This reverts commit r41693 due to checked mode test failures.

TBR=fschneider@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41695 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-12 18:57:31 +00:00
vegorov@google.com 94e896d963 Suppress canonicalization of Unbox() instruction that can deoptimize.
Suppress canonicalization of instructions that have unsatisfied input representations.

BUG=
R=fschneider@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41693 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-12 17:23:55 +00:00
vegorov@google.com 0a8e45ae35 Improve precision of range analysis by allowing it to track ranges across all int typed phis.
Even when range of the integer definition is unknown we can optimistically assign full int64-range to it even though tagged integer definition can contain instance of the Bigint. This is based on the following observation: we only use ranges when working with unboxed arithmetic in the optimized code, but the widest possible unboxed arithmetic is 64-bit (mint) one and corresponding unboxing operations will deoptimize if they get Bigint as an input. This makes it safe to assume that any integer definition fits into 64-bit range *once unboxed*.

Additional small fixes:

- Fix ranges assigned to loads from Int32/Uint32 arrays on 64-bit platform - it was overly conservative;

- Add UnboxUint32 range inference to ensure that range is not lost when it passes through box-unbox pair;

- When canonicalizing Binary/Unary Integer operations ensure that we unwrap UnboxUint32(Constant(C)) -> C.

BUG=
R=fschneider@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41640 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-10 17:16:14 +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
vegorov@google.com acee3f390f Revert "Revert "IR refactoring: reduce duplication related to MayThrow/AllowsCSE.""
This relands commit r41281.

TBR=fschneider@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41312 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-27 12:13:37 +00:00
vegorov@google.com ad57bec275 Revert "IR refactoring: reduce duplication related to MayThrow/AllowsCSE."
This reverts commit r41281.

Old Mac OS X bots are unhappy (GCC frontend used on those bots can't correctly resolve reference to the base constructor unless all template parameters are specified).

R=fschneider@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41284 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-24 16:05:59 +00:00
vegorov@google.com 6b4677a431 IR refactoring: reduce duplication related to MayThrow/AllowsCSE.
Fold those things into TemplateInstruction/TemplateDefinition.

R=fschneider@google.com, zerny@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41281 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-24 15:10:11 +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
vegorov@google.com dde7963d36 Ignore redundant parallel moves when checking if a block is empty.
Single predecessor blocks containing nothing but redundant parallel moves can be compacted away.

R=zerny@google.com
BUG=http://dartbug.com/21302

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41187 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-20 11:29:19 +00:00
jgruber@google.com bdfcd15bd5 Iterative graph traversal in FlowGraph::DiscoverBlocks()
The motivation behind this change is that very large functions could
cause stack overflows in the (previously recursive) DiscoverBlocks
function. This commit introduces replaces recursive traversal by
iterative algorithms. Postorder traversal had to be removed from
DiscoverBlocks and is now done in a separate pass.

BUG=21109
R=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41016 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-09 15:35:13 +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
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
srdjan@google.com 054eeb87a6 Reduce number of times a deopt-id is computed.
R=iposva@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40716 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-26 16:42:50 +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
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
lrn@google.com 351ed89892 Instead of special casing one-element interpolations, just generate a static call to _interpolateSingle directly in the IL.
R=fschneider@google.com

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

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40369 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-17 09:32:07 +00:00
lrn@google.com f9abaeb2e1 Revert r40367.
Crashes in debug-mode.

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40368 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-17 08:44:51 +00:00
lrn@google.com d420110fb4 Instead of special casing one-element interpolations, just generate a static call to _interpolateSingle directly in the IL.
R=fschneider@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40367 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-17 07:38:30 +00:00
asiva@google.com 48134f487d Fix compiler warning:
[209/7854] CXX obj/dart/runtime/vm/libdart_vm.intermediate_language.o

../../dart/runtime/vm/intermediate_language.cc:1777:45: warning: implicit conversion of NULL constant to 'intptr_t' (aka 'long') [-Wnull-conversion]

        to() == kUnboxedInt32 ? deopt_id_ : NULL);

R=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40355 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-16 22:50:46 +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
lrn@google.com 54ffc4f000 Call special VM interpolate for single element interpolation.
Fixed at the intermediate language level.

R=fschneider@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40232 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-15 07:19:23 +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
regis@google.com 0220e41d72 New bigint implementation in the vm.
R=srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40061 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-09 21:47:44 +00:00