Commit Graph

349 Commits

Author SHA1 Message Date
iposva@google.com 50fc824be9 - Remove arguments definition test from the VM.
- Update tests still referring to it.

R=regis@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24539 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-27 18:37:53 +00:00
fschneider@google.com fd3f443181 Fix a bug in allocation sinking and load elimination.
1. Aliasing information was not computed for allocations that
are never used in a LoadField instruction.

2. CanBeAliased was not correct in the case of a StoreVMField.

BUG=https://code.google.com/p/dart/issues/detail?id=11538
TEST=runtime/vm/flow_graph_optimizer.cc
R=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24515 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-27 13:26:23 +00:00
fschneider@google.com 7e71783df6 Support type arguments for allocation sinking in certain conditions.
The type arguments are treated like a normal field that is initialized
with the type arguments passed to the allocation stub. This CL restricts
the optimization to the case where no instantiator is passed
(instantiator == kNoInstantiator). In this case the type arguments are
either a constant or loaded from a field.

Also: improve variable liveness analysis by pruning partially dead
variables from the environment. At the beginning of each block, all 
variables that are _not_ in live-in are replaced with null.

R=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24459 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-26 09:20:46 +00:00
vegorov@google.com 370a99eda4 Refactor load forwarding pass to use a Place abstraction.
Place describes a location that code can load from or store to.

Start forwarding loads through phis.

Previously load forwarding operated directly on load instructions which complicated certain things e.g. implementation of a hash map had to allow looking up a load instruction by store instruction, forwarding through phis might have required introducing synthetic load instructions to be put into the map.

R=kmillikin@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24426 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-25 18:50:26 +00:00
fschneider@google.com b8db2f0aba Inline object constructor already in the method recognizer.
The call is replaced with "return null". This allows us to always
inline calls to "Object." without extra overhead in the generic
flow graph inliner.

R=kmillikin@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24391 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-25 10:56:44 +00:00
fschneider@google.com 0bf7251d1a Reland: Optimizing noSuchMethod invocation with no arguments.
This is the same CL as https://codereview.chromium.org/17315008/ with
one bug fixed:

If a method is invoked with a mismatching number of arguments, we don't
add a no-such-method-dispatcher function since the dispatcher currently
can only invoke noSuchMethod and would not work if the method
is invoked with correct arguments at a later point.

I extended the test to cover that case.

TEST=tests/language/no_such_method_dispatcher_test.dart
R=srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24351 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-24 17:18:51 +00:00
vegorov@google.com 35ce4d245f Ensure that allocation sinking candidates are classified as not-aliased before final load forwarding.
R=fschneider@google.com
BUG=dart:11436

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24325 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-24 12:16:10 +00:00
fschneider@google.com 48555c83ac Back out r24266 to investigate dartium test failure.
TBR=kmillikin@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24284 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-21 11:56:32 +00:00
fschneider@google.com ab1981b421 Optimizing noSuchMethod invocation with no arguments.
On each call that triggers a noSuchMethod invocation we 
attach a custom dispatch function that allocates the 
invocation object and invokes noSuchMethod. This dispatcher
is compiled and optimized like a normal Dart function.

Similar to method-extractors, these implicit dispatchers
do not show up as normal functions.

As a first step this CL only handles invocations of getters
and methods with no like o.foo or o.foo().  This CL gives
a >25x speedup of such noSuchMethod invocations. Calls with
multiple arguments still go through the slow path.

R=srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24266 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-21 07:31:51 +00:00
asiva@google.com 16c945cb88 Minor cleanups to use null_array(), null_object() and null_string() handles.
R=srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24247 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-20 19:49:30 +00:00
srdjan@google.com 47de186e76 Store arguments descriptor in ICData. Remove loading of arguments descriptor at unoptimized call site (the ones using ICData).
R=asiva@google.com, zra@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24239 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-20 16:29:39 +00:00
kmillikin@google.com 0104b48892 Fix a small bug in trace printing for discovered loops.
Loop blocks were printed with their preorder number, which is hard to
correlate to the graph.  Use the block id instead.

R=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24184 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-19 13:56:48 +00:00
srdjan@google.com b9b689d20a Split LoadStatic into two instructions: load static field, load value from static field. This allows to canonicalize loads, thus reducing the number of inlined constants. Has large benefit on x64 (DeltaBlue). Note different register allocation spec for ia32, otherwise large regression in DeltaBlue is introduced.
R=fschneider@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24044 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-14 18:15:49 +00:00
fschneider@google.com 3208230580 Revert r23330 and r23136 because of a bug with loop invariant code motion.
This CL temporarily remove deoptimzation history which was put in to prevent
repeated deoptimization caused by loop invariant code motion. It caused
illegal code motion under certain conditions.

BUG=https://code.google.com/p/dart/issues/detail?id=11245
TEST=tests/language/licm3_test.dart

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23989 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-13 15:52:33 +00:00
fschneider@google.com a43bddcbaf Fix bug in constant propagation with double-equality.
Don't optimize x == x and x != x if x is a double:
x == x is not true, if x == NaN.

TEST=tests/language/arithmetic_test.dart
R=kmillikin@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23955 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-13 09:08:05 +00:00
srdjan@google.com 5543ce104c When canonicalize instances check if all fields are canonical. If a field is a non-canonical number or strings, canonicalize it. Otherwise report an error if a field is not canonical.
R=hausner@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23934 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-12 21:27:37 +00:00
fschneider@google.com 732163dfcd Make constant propagation to fold x == x and re-run type propagation for better range analysis.
1. When comparing numbers, or strict-comparing objects, this can be folded into
true/false.  Since this often occurs after inlining and store-to-load forwarding,
constant propagation is repeated after these phases. The pattern looks like:

o.x = o.y;
if (o.x == o.y) { ... }

2. Load elimination may introduce new phis that may have smi-type. In order to
get range information for these phis, I added a second phase of type propagation after
load elimination.

R=kmillikin@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23901 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-12 10:27:13 +00:00
fschneider@google.com 9c386a80df Improve array bounds check elimination for growable lists.
Previously we could not eliminate bounds checks for
growable lists, even though the length is not modified.

This CL removes obsolete restrictions and enables elimination
of checks as long as the length does not change.

This restriction were there originally because the CheckArrayBounds
instruction loaded the length from the array itself. Now, the length-load
and the  actual check are split into separate instructions.
Tracking side-effects for normal loads determines can now determine if
the length-load is invariant.

R=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23688 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-06 14:41:58 +00:00
vegorov@google.com 59da9de8c7 Ensure that all phis inserted by load optimizer have consistent representation.
Revert r23619.

R=srdjan@google.com
BUG=dart:11048

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23634 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-05 15:37:23 +00:00
vegorov@google.com 98e2f04473 IfConverted should unuse inputs of the join it removes.
R=srdjan@google.com
BUG=dart:11087

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23631 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-05 14:26:25 +00:00
fschneider@google.com 9a6657cd4d Eliminate temporary locals for some expressions
This CL affects a subset of expressions that use temporary locals: constructor
calls, array literals and and instance getter postfix-ops.

For expressions that are de-sugared in the parser I added LetNode.
It creates a scoped temporary local bound to an initializing expression.

For expressions where we need a temporary local at graph-building time,
I added a helper class TempLocalScope to easily create a single temporary
local in the graph builder since this is a frequently recurring pattern.

This simplifies code in the parser and the graph builder and also fixes a
bug with indexed-super invocation and NoSuchMethod.

BUG=dart:8918
R=kmillikin@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23401 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-30 12:19:21 +00:00
hausner@google.com 2ec6f419c3 Allow breakpoints on strict equal
The compiler turns equality checks with null into
strict equal comparisons. Make the compiler backend
create a pc descriptor for the runtime call so that
the debugger can break on x == null and x != null.

R=regis@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23153 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-24 16:26:42 +00:00
fschneider@google.com c1a33f3ea6 Add deoptimization history to optimized functions.
Each function that is optimized or inlined into an optimized
functions keeps an array of deoptimization ids.

This history is used to avoid repeated deoptimization caused by
speculative hoisting of check instructions.

R=kmillikin@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23136 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-24 12:03:40 +00:00
srdjan@google.com 816053cb7c Improve constant propagation for Mint and Smi.
R=kmillikin@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23020 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-22 15:20:55 +00:00
kmillikin@google.com 1248115680 Remove the IC data array from the isolate.
Thread it as an argument rather than storing it in a global variable.  This
means the programmer does not have to implement a shadow stack to save and
restore the data array, and there is no special handling needed for GC.

R=fschneider@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22982 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-22 06:21:57 +00:00
iposva@google.com 2aeb172512 - Correctly handle negative constant indices when
constant propagation has not eliminated range checks.
- Add test to verify the optimizer does not
  allow negative constant indices when eliminating
  array bounds checks.

R=srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22705 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-14 20:33:04 +00:00
srdjan@google.com 7797d39362 Added Object._cid getter, optimized it. Added to (some) classes a static final _clCid. Use those to test for exact type in VM's libraries.
R=iposva@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22695 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-14 18:16:44 +00:00
johnmccutchan@google.com 5c4ea76632 Unbox phis with Float32x4 or Uint32x4 type
R=vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22683 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-14 15:52:40 +00:00
vegorov@google.com b755c8fef7 Basic support for LICM of fully invariant loads.
BUG=
R=fschneider@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22665 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-14 10:28:31 +00:00
srdjan@google.com 428dea19dc Fix crash with --no-use-cha: the optimizer expects a concrete type for array creation, not dynamic as is the result because we cannot determine without CHA if a class is guaranteed to have no sublcasses and has not been implemented. Regardless of use_cha, always rely on known information for internal classes that are not subtype or implemented by other clases.
R=asiva@google.com, vegorov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22655 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-13 23:19:20 +00:00
johnmccutchan@google.com cd7c5236a2 Inline Uint32x4 operations
R=srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22649 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-13 20:22:06 +00:00
fschneider@google.com 8ad125f607 Optimize functions containing try-catch.
This is a first step towards fully optimizing try-catch-finally.

At a catch entry, all local variables and parameters are
expected at a fixed stack location. There is a list of
initial definitions at the catch entry block, similar to
the initial definitions at graph entry.

Inside every try-block there is a special prologue code before each
call (instruction that may throw) inside the try-block. This prologue
is similar to a parallel move instruction: It moves all locals+parameters
to the locations expected by the catch-entry block. The stack frame
is extended with the corresponding number of fixed slots right below
the normal spill slots.

Every function containing try-catch has additional compiler-
generated local variables to pass the context, the exception and
the stack trace.

Variable liveness analysis is adapted to treat locals inside try{} blocks
specially: Every call has an implicit LoadLocal of every local variable.
This CL uses a safe approximiation of liveness which can be optimized further.

Current restrictions which are planned for future CLs:
 * No inlining inside try-blocks.
 * No inlining of functions containing try-catch.
 * No try-finally yet.

R=kmillikin@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22615 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-13 10:33:24 +00:00
srdjan@google.com 0acfcf21e7 A load static of an initialized static final field can be converted to its value, as long as it is in old space or Smi, and can therefore be a literal node.
Add special objects to mark non_constant and unknown_constant in constant propagator so that there is no confusion with sentinels used in the graph.

R=asiva@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22600 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-10 21:33:14 +00:00
srdjan@google.com ddc9d23610 Inline _OneByteString._setAt. The key knowledge is that _setAt is an internal method that has to be called with correct arguments, therefore no checks are needed.
R=fschneider@google.com, zra@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22528 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-08 20:03:33 +00:00
vegorov@google.com 2565ca222f Implement a variation of scalar replacement for non-escaping allocations.
AllocationSinking pass discovers non-escaping allocations that have no input uses other than uses in the stores into its own fields.

Every environment use of such allocation is replaced by a state snapshot (MaterializeObject instruction) that describes the state of each initialized field in the object. State snapshots are computed through an additional round of load-forwarding.

Once snapshots are computed allocations are removed from the graph.

MaterializeObject instructions are not compiled into native code but produce deoptimization instructions instead that describe how object should be materialized at deoptimization.

Deoptimization instructions now follow the following format:

[mat obj #1]...[mat obj #N][ret addr][... mat arguments ...][... real frames ...]

- the prefix describes each object to materialize on deopt via kMaterializeObject instruction;
- actual values that are needed for materialization are emited as a part of bottom-most stack frame. This is done to simplify implementation: they need to be discoverable by a GC during materialization phase. At the end of deoptimization they will be removed from the stack;
- normal stack slots can refer to materialized objects via kMaterializedObjectRef instruction.

Additionally this change contains fixes in load-forwarding that are needed to guarantee that all artificial LoadField instructions inserted during AllocationSinking are correctly replaced with actual values.

Limitations of the current implementation:

- can't eliminate allocations that flow into phis but otherwise don't actually escape;
- can't sink allocations out of loops;
- allocation with type arguments are not handled.

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

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22485 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-07 23:40:42 +00:00
kmillikin@google.com 5868a6bffa Use the constant pool for all constants, not just null.
Remove constants from the instruction stream in optimized code at SSA
construction time.  Modify the range analysis pass to analyze values in the
constant pool.

R=fschneider@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22458 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-07 12:50:37 +00:00
kmillikin@google.com 7e31a88a0a Initial support for polymorphic inlining.
Consider each polymorphic variant separately for inlining in frequency
order.  Share inlined bodies for shared targets.

Insert an SSA redefinition of the receiver in each inlined variant to
prevent hoisting.  Hoisting code specialized to the receiver (e.g.,
direct access to internal fields of typed data arrays) out of the
inlined body is not safe.

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

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22434 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-06 17:22:18 +00:00
vegorov@google.com f005802733 Improve load forwarding:
- stores/loads that access different fields can't alias each other;
- if result of the AllocateObject does not escape then stores/loads to it does not alias stores/loads to other objects.

Other:
- rename LoadFieldInstr's value to instance to better convey meaning and match StoreInstanceFieldInstr;
- slightly bump inlining_size_threshold;
- canonicalize UnboxDouble(BoxDouble(v)) and BoxDouble(UnboxDouble(v)) patterns;

R=srdjan@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22340 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-02 21:20:49 +00:00
johnmccutchan@google.com aa1d4b4062 Inline remaining Float32x4 operations.
BUG=
R=srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22277 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-01 20:40:24 +00:00
johnmccutchan@google.com 10c4dcba45 Inline Float32x4 min,max,sqrt,reciprocal,reciprocalSqrt, and scale
R=srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22185 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-30 17:26:42 +00:00
vegorov@google.com 34d41f9c80 Track side-effect free paths in the graph to allow CSE and LICM for instructions that depend on some side-effects.
Right now only a single side-effect is important for CSE/LICM purposes: externalization.

But abstractions are in place to introduce others if needed.

R=fschneider@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22180 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-30 14:25:16 +00:00
fschneider@google.com 23cf7f0260 Fix compiler warning about bool conversion.
R=iposva@google.com, srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22167 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-30 08:20:48 +00:00
regis@google.com 0e030b6f5c Further improve type optimization reusing the type argument vector of the
instantiator of generic objects (fixes issue 10149).
This optimization considers the generic type argument vector of the instance
being allocated as well as the generic type argument vector of the compile
time type of the instantiator.
If the instance vector is a prefix of the instantiator vector, the instantiator
vector can be shared by the new instance.

R=srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22155 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-29 23:39:46 +00:00
johnmccutchan@google.com 26c86b504e Inline Float32x4 comparison.
R=srdjan@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22144 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-29 19:17:38 +00:00
vegorov@google.com f934e1929d Cleanup implementation of SmiToDouble to use unboxed double result.
Allow CSE to eliminate redundant SmiToDouble, DoubleToDouble, InvokeMathCFunction instructions.

R=srdjan@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22078 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-26 18:10:59 +00:00
regis@google.com 2de2e615e6 Improve type optimization reusing the type argument vector of the instantiator
of generic objects:
Do not require anymore that the vector be of the same length. A longer vector
with a compatible prefix is acceptable. This saves a class id check and length
check.
We still require that the uninstantiated type argument vector be the identity
vector, i.e. consisting only of type parameters with consecutive indices
starting at zero. We will relax this requirement in a later change.

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22062 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-26 00:04:13 +00:00
johnmccutchan@google.com df712e164e Inline Float32x4 constructors
Review URL: https://codereview.chromium.org//13936009

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22055 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-25 22:03:05 +00:00
johnmccutchan@google.com 08c99e80e6 Inline Float32x4 Getters
Review URL: https://codereview.chromium.org//13872020

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@21897 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-23 17:52:10 +00:00
vegorov@google.com 207d8eb43a Optimize static field and context load/stores as part of CSE pass.
This change also introduces basic abstractions for aliasing.

R=srdjan@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@21866 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-23 11:09:14 +00:00
vegorov@google.com 1162595313 Convert EqualityCompare to StrictCompare if reciever is either null or guaranteed to have default equality operator.
R=srdjan@google.com
BUG=

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@21696 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-18 19:52:26 +00:00