kmillikin@google.com
94ca56a774
Fix a bug in block reordering/block compaction.
...
The compiler assumes (a) the graph entry is followed in the block order by
its normal entry, and (b) the normal entry block is non-empty. There is not
necessarily true, so stop assuming it.
BUG=https://code.google.com/p/dart/issues/detail?id=13101
R=fschneider@google.com
Review URL: https://codereview.chromium.org//23766021
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27377 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-11 12:32:58 +00:00
johnmccutchan@google.com
0c0bb73f35
Fix large performance regression in Box2D, MD5, and SHA1 benchmarks caused by https://codereview.chromium.org/22915008/
...
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//23684036
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27288 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-09 12:39:52 +00:00
johnmccutchan@google.com
e571ecdf87
Tests for GuardField length check along with bug fixes
...
R=regis@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//22915008
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27279 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-08 21:44:42 +00:00
srdjan@google.com
aa8b03e7d7
For trigonometric functions call to C-libraries: they are faster than x87 operations (3% on Box2D). This also enables quicker trigonometrics on ARM and MIPS. TODO: Make InvokeMathCFunction more flexible so that it can handle both static and instance calls
...
R=zra@google.com
Review URL: https://codereview.chromium.org//22853009
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27256 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-06 18:14:53 +00:00
fschneider@google.com
40013fe1c0
Simplify compilation of relational operators.
...
Instead of having a separate IL instructions relational comparisons
are built as normal instance calls initially. When optimized, we replace
the instance call with a smi/double/mint comparison instruction.
This enables generic inlining of relational operator calls and simplifies
code generation, too.
Merging comparisons with branches is done in the optimizing compiler's
branch simplification phase.
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//23757016
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27058 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-03 14:02:53 +00:00
fschneider@google.com
e174a4c18e
Fix a compiler bug caused by Utils::IsPowerOfTwo treating zero as a power of two.
...
The IsPowerOfTwo function is used together with ShiftForPowerOfTwo. Both function
do not work with zero. This caused the optimizing compiler to generate invalid code
for the expression
x ? 0 : 0
where it assumed that if one of the constants is a power-of-two, it can
be computed by (1 << n). We check for 0 in a number of places, but instead
I decided to fix Utils::IsPowerOfTwo itself and remove unnecessary checks
for the zero case.
TEST=tests/language/vm/if_conversion_vm_test.dart, runtime/vm/utils_test.cc
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//23604024
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27033 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-03 09:28:34 +00:00
srdjan@google.com
97891ce193
If a rethrow is encountered in the catch block, then its handler must be marked that it needs stacktrace. Fix issue r12584.
...
R=iposva@google.com
Review URL: https://codereview.chromium.org//23691024
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26963 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-31 00:26:47 +00:00
regis@google.com
8171570100
Fix the previously ineffective assert checking the number of arguments passed to
...
a runtime entry in the VM.
R=asiva@google.com
Review URL: https://codereview.chromium.org//23672011
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26826 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-28 23:07:14 +00:00
srdjan@google.com
e06ea63b60
Mark exception handlers if they have a stacktrace specified. Do not build a stacktrace if the handler has no stacktrace.
...
R=asiva@google.com , hausner@google.com
Review URL: https://codereview.chromium.org//23445012
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26823 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-28 22:42:21 +00:00
kmillikin@google.com
00f20f3ffc
Collect edge count profiling data and reorder basic blocks.
...
In unoptimized code, collect edge counts for all edges. Use the counts
to reorder basic blocks in optimized code. Basic blocks are reordered
by using Pettis and Hansen's "Profile Guided Code Positioning" bottom-up
algorithm.
R=fschneider@google.com , regis@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//18111006
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26773 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-28 09:17:07 +00:00
kmillikin@google.com
4f80ef09df
Change Bool::Get to return a handle instead of a pointer to a raw object.
...
Replace occurrences of 'expr ? Bool::True() : Bool::False()' with simply
'Bool::Get(expr)' and analogously for its negation. The pointer to the raw
object can still be extracted with 'Bool::Get(expr).raw()'.
R=iposva@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//23480005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26770 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-28 08:38:56 +00:00
srdjan@google.com
255a28369c
Fix corner cases for double pow operation.
...
R=regis@google.com , zra@google.com
Review URL: https://codereview.chromium.org//23072044
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26662 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-26 17:38:51 +00:00
zra@google.com
d816dd325f
Adds Uint32x4 add/sub for ARM.
...
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//23366003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26544 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-22 18:24:20 +00:00
srdjan@google.com
03111ecbeb
Fix performance regression on Tracer: recognize _doublePow in Math.
...
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//23068020
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26470 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-21 20:36:08 +00:00
johnmccutchan@google.com
c8b370ab50
Initial support for length guards on final fields.
...
R=regis@google.com , srdjan@google.com , zra@google.com
Review URL: https://codereview.chromium.org//22851003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26433 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-21 15:32:45 +00:00
johnmccutchan@google.com
6d11a8fa15
Add signMask getter to Float32x4
...
R=srdjan@google.com , zra@google.com
Review URL: https://codereview.chromium.org//22947006
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26394 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-20 21:35:53 +00:00
johnmccutchan@google.com
7c1e9d8298
Add add and subtract operations to Uint32x4
...
R=srdjan@google.com
Review URL: https://codereview.chromium.org//23018009
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26358 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-20 14:34:06 +00:00
srdjan@google.com
266b9cb305
Add double unary operation (negate). This is a replica of the destrpyed CL https://chromiumcodereview.appspot.com/23219002/
...
Review URL: https://codereview.chromium.org//22999011
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26169 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-14 23:45:13 +00:00
fschneider@google.com
2793f7ad63
Fix bug with optimized try-catch on ARM/MIPS.
...
The constant pool pointer must be restored before any parallel
moves at the catch-entry block.
In addition, this CL removes CatchEntryInstr and folds its
functionality into CatchBlockEntryInstr. Until now every catch-block
started with CatchBlockEntryInstr followed by a CatchEntryInstr.
This simplifies a lot of code in the compiler and avoids issues
with allocator-move code inserted between the two instructions.
BUG=https://code.google.com/p/dart/issues/detail?id=12291
TEST=tests/language/try_catch4_test.dart
R=regis@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//22590002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25918 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-08 08:20:10 +00:00
srdjan@google.com
1b12859a7e
Implement IsNullCheck for CheckClassInstr. If input is nullable expected type, then check for null only.
...
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//22580005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25907 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-07 23:01:43 +00:00
asiva@google.com
b4d9e0d620
Auto create ApiLocalScope before calling native functions, this ensures that
...
native functions do not have to call Dart_EnterScope/Dart_ExitScope
when they callback into the VM.
Remove Dart_EnterScope/Dart_ExitScope calls around native functions in 'bin'
directory.
R=regis@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//22303002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25827 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-06 19:27:48 +00:00
srdjan@google.com
bd74c66970
Inline fsin/fcos. Huge speedup on Box2D.
...
R=iposva@google.com
Review URL: https://codereview.chromium.org//22266005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25816 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-06 15:46:28 +00:00
regis@google.com
09bcdc6d6d
Fix VM implementation of CastError not to extend TypeError (issue 5280).
...
Remove non-compliant fields in various Error classes (issue 10144).
Remove implicit constructor when patching in a constructor (issue 12217).
Patch corelib Error classes instead of declaring subclasses.
Update tests and status files.
R=asiva@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//21832003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25782 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-05 18:35:04 +00:00
fschneider@google.com
ee0aaf0453
Enable allocation sinking for non-implicit closures.
...
In optimized code we can eliminate the allocation of closures that are not
escaping and where all calls are inlined.
Closures are currently allocated with a special IL instruction (CreateClosure).
This CL changes this for non-implicit closures and allocates them
like normal objects. The fields for the function and the context are
initialized like instance fields. This way object allocation sinking can
handle closures like any other objects.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//19370003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25706 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-01 12:03:21 +00:00
zra@google.com
8f3e8783f8
Implements the two argument shuffle SIMD instruction for ARM.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//21004011
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25638 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-30 20:49:22 +00:00
johnmccutchan@google.com
10969ab342
Inline two argument shuffle operations on IA32 and X64.
...
R=vegorov@google.com
Review URL: https://codereview.chromium.org//20467004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25580 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-29 18:57:35 +00:00
srdjan@google.com
3d6b2fc18e
Allow equality operation on mixed double/smi arguments.
...
Fix a bug in relational operations in 64 bit mode: if ICData specifies double and Smi as possible arguments, we generate code for double and unbox or convert to double the inputs. These works only if smi can fit into the double. Current solution for 64-bit architecture is to disallow two smi-s as input to a polymorphic comparison instruction (equality, relational).
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//20468002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25522 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-26 16:48:46 +00:00
srdjan@google.com
5651a2cf78
Optimize double min/max by reducing the code size (reusing left register as result removes the need to copy left into result). Add code for two Smi arguments.
...
R=regis@google.com , zra@google.com
Review URL: https://codereview.chromium.org//19695007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25367 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-23 20:40:31 +00:00
zra@google.com
22c342637c
Implements Float32x4 and Uint32x4 instructions for ARM.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//19978004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25358 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-23 20:02:12 +00:00
zra@google.com
af23dfc5b2
Increases the number of ARM floating-point registers.
...
This is to be consistent with VFPv3_D32. Later, we'll detect
VFPv3_D16 at runtime.
R=regis@google.com
Review URL: https://codereview.chromium.org//19806005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25352 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-23 18:25:44 +00:00
srdjan@google.com
17bc0e19c4
Fix math min/max for -0.0 case. Enable min_max_test to run in optimizing compiler as well.
...
R=regis@google.com , zra@google.com
Review URL: https://codereview.chromium.org//19482023
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25306 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-22 21:37:43 +00:00
srdjan@google.com
7e313fa96a
Recognize Math's min and max function for doubles and inline the operation.
...
R=regis@google.com , zra@google.com
Review URL: https://codereview.chromium.org//19792007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25287 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-22 17:27:45 +00:00
johnmccutchan@google.com
522a7ef504
Add all 256 shuffle methods to Float32x4
...
R=srdjan@google.com
Review URL: https://codereview.chromium.org//19564014
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25227 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-19 17:03:09 +00:00
zra@google.com
31fa41a784
Enables more SIMD tests for ARM.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//19779006
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25219 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-19 15:28:53 +00:00
fschneider@google.com
e317ca8fe0
Replace ChainContextInstr with existing IL instructions.
...
v0 <- AllocateContext(...)
ChainContext(v0)
is changed into
v1 <- CurrentContext
StoreField(v0.parent = v1)
StoreContext(v0)
Since v0 is used twice, I used a TempLocalScope in
the graph builder to store the allocated context.
As a result ChainContextInstr can be completely removed
from the compiler.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//19569002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25200 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-19 09:15:28 +00:00
zra@google.com
d886c10f6e
Enables a SIMD test for ARM.
...
Required adding the veorq, vmovq, and vdup instructions.
R=regis@google.com
Review URL: https://codereview.chromium.org//19776007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25165 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-18 18:40:27 +00:00
zra@google.com
351aaec2c3
Replaces Location::ToStackSlotAddress() with Location::ToStackSlotOffset()
...
This way, Location no longer mentions the architecture specific Address class.
R=regis@google.com
Review URL: https://codereview.chromium.org//19464002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25122 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-17 20:54:34 +00:00
zra@google.com
3cebda38e6
Merges ARM load/store type enums into one enum.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//19256021
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25064 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-16 18:32:40 +00:00
zra@google.com
f219f81b14
Begins implementation of ARM neon instructions.
...
Just adds the vadd instruction, but also changes the
arm assembler to expose the Q registers rather than the
D registers. Q0 = D1:D0 = S3:S2:S1:S0. This is similar
to how ia32 and x64 use only the xmm registers for
floating point.
R=regis@google.com
Review URL: https://codereview.chromium.org//18684008
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24982 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-12 23:22:50 +00:00
zra@google.com
c2652c8bc4
Fixes bug in double to int conversion on arm.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//18295007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24960 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-12 16:56:38 +00:00
zra@google.com
20dcf8afaa
Implements OSR for arm and mips.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//19017007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24896 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-10 23:45:18 +00:00
regis@google.com
e8a722870b
Support type parameters and classes as expression in the vm.
...
Turn many compile-time errors into runtime errors per latest spec.
Triage affected tests.
R=hausner@google.com
Review URL: https://codereview.chromium.org//18801007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24861 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-09 19:35:56 +00:00
zra@google.com
f86d2ec1b4
Adds support for integer division for ARM chips without the sdiv instruction.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//18331006
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24635 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-01 17:44:09 +00:00
srdjan@google.com
74c379d01b
Equality can be converted to a strict equality with checks. If the number of checks exceeds the threshold (--max_equality_polymorphic_checks=32) use megamorphic dispatch instead.
...
R=kmillikin@google.com
Review URL: https://codereview.chromium.org//18053010
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24592 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-28 16:15:50 +00:00
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
zra@google.com
60392c70fd
Implements external array access for mips.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//17907005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24524 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-27 16:42:39 +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
regis@google.com
68041e2d0d
Fix more register allocation bugs in optimized code on ARM.
...
R=zra@google.com
Review URL: https://codereview.chromium.org//17176004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24191 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-19 16:21:27 +00:00
regis@google.com
8ea9116067
Fix register allocation bug in optimized code on ARM.
...
R=zra@google.com
Review URL: https://codereview.chromium.org//17348005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24172 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-19 08:28:32 +00:00