fschneider@google.com
f7a97fa4d4
VM: Fix slow-path deoptimization environment.
...
The number of pushed arguments needs to be accounted for.
BUG=dartbug.com/22331
R=vegorov@google.com
Review URL: https://codereview.chromium.org//914133002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43681 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-11 13:34:15 +00:00
srdjan@google.com
81d8099650
Redesign inlining interval computation.
...
Review URL: https://codereview.chromium.org//904763003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43622 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-09 23:11:05 +00:00
johnmccutchan@google.com
635ba4bbd9
Port flow_graph*, disassembler to ISL_Print
...
BUG=
R=srdjan@google.com
Review URL: https://codereview.chromium.org//907093002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43609 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-09 20:49:32 +00:00
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
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
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
5c04899198
Define a lower threshold for optimizing irregexp generated functions.
...
The threshold is given by the flag --regexp_optimization_count_threshold
and has a default value of 1000.
R=fschneider@google.com
BUG=
Review URL: https://codereview.chromium.org//836703003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42632 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-06 13:56:21 +00:00
srdjan@google.com
4c8545557a
Add inlining ranges/intervals to code objects so that we can map a pc to the inlined stack. The mapping is not fast, used only for disassembly.
...
Copied from other CL: https://codereview.chromium.org/790213004/
Review URL: https://codereview.chromium.org//817823002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42522 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-19 20:03:27 +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
fschneider@google.com
9fad07f46e
Enable inlining inside try-blocks in the VM's optimizing compiler.
...
R=vegorov@google.com
Review URL: https://codereview.chromium.org//773183002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42103 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-04 12:29:28 +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
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
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
fschneider@google.com
e6ef4b16bf
Fix captured parameters and optimized try-catch.
...
The stack slots of captured parameters must be skipped when
generating sync code in optimized try-catch. Since those parameters
are initially copied into the context, their values are not recorded
in the environment.
Store-to-load forwarding may though use the original initial value
from the stack and therefore it must not be overwritten by try-sync
code that predeeds every call inside optimized try-blocks.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//653073002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41099 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-14 14:48:32 +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
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
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
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
fschneider@google.com
0469c12072
VM: Remove unused IsClosureCall bit from IC data.
...
Since closure calls are now implemented in terms of instance calls
(via .call and a dispatcher method), there is no need for a bit in
the IC data tracking if a IC call may be a closure call.
R=vegorov@google.com
Review URL: https://codereview.chromium.org//551043002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39979 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-08 17:10:59 +00:00
fschneider@google.com
6b4c05766f
Fix xcode build for real.
...
R=vegorov@google.com
Review URL: https://codereview.chromium.org//540303002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39909 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-05 11:30:38 +00:00
fschneider@google.com
36c0b7b0e8
Attempt to fix xcode build.
...
tbr=vegorov@google.com
Review URL: https://codereview.chromium.org//546673003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39906 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-05 10:48:17 +00:00
fschneider@google.com
08b9e1fb2d
Fixes for ARM/ARM64/MIPS parallel move resolver.
...
The parallel move resolve has to block reserved registers like
TMP, TMP2, PP, CTX so that they are not used as scratch registers.
Use allocated scratch register instead of IP because IP may be
used for large stack slot offsets.
This CL also generalizes stack-slot locations to address
stack lots relative to FP or SP.
R=zra@google.com
Review URL: https://codereview.chromium.org//539073002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39905 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-05 09:49:53 +00:00
ajohnsen@google.com
ff1b4190c1
Scale invocation count by the number of BBs in the flow-graph of a method.
...
BUG=
R=vegorov@google.com
Review URL: https://codereview.chromium.org//501553005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39698 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-29 12:51:09 +00:00
srdjan@google.com
2a3c2ad058
Add loop printing to block comments.
...
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//515913003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39673 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-28 19:52:47 +00:00
srdjan@google.com
85af0719ef
Faster IC stubs by specializing them for two-argument Smi operations (implemented only a few for now)
...
R=zra@google.com
Review URL: https://codereview.chromium.org//436643002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39471 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-21 20:08:40 +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
srdjan@google.com
00891583b0
Minor cleanup: remove unnecessary argument.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//422893003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38758 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-30 22:50:38 +00:00
vegorov@google.com
36cddbd749
Use shorter TryAllocate instruction sequence on ARM/ARM64/MIPS.
...
On these architectures it's preferable to load Scavenger address into the register and then access top/end fields through this register instead of loading addresses of those fields as immediates --- which takes either two instructions or a memory load through a pool pointer.
Cleanup boxing slow-paths in the optimizing compiler. We had tons of duplicated code that was essentially doing the same thing.
BUG=
R=johnmccutchan@google.com , regis@google.com
Review URL: https://codereview.chromium.org//410333003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38539 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-24 12:04:21 +00:00
koda@google.com
aca839c54f
Allocate fewer empty arrays.
...
Use VM isolate's canonical, untyped, empty array when possible.
Takes Dart2JS benchmark from ~9000 empty arrays to ~200.
R=asiva@google.com
Review URL: https://codereview.chromium.org//381483002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38435 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-21 16:41:05 +00:00
asiva@google.com
f85f986bda
Make isolate specific stub code accessors instance methods instead
...
of static. This allows use of isolate without having to call
Isolate::Current() when using these accessors.
R=johnmccutchan@google.com , srdjan@google.com , zra@google.com
Review URL: https://codereview.chromium.org//365983002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38040 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-07 21:25:00 +00:00
srdjan@google.com
2bb77cd8d5
Iterate over PcDescriptors only via iterators, not via an index. (preparation for more compression of PcDescriptors).
...
R=asiva@google.com
Review URL: https://codereview.chromium.org//356923006
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38032 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-07 18:25:45 +00:00
regis@google.com
32f3e11d99
Cleanup of error and warning reporting.
...
R=hausner@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//340203003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37468 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-18 22:30:34 +00:00
srdjan@google.com
8f2dc961d0
Save ICData of unoptimized code in the function, thus preserving it across repated unoptimized compilations.
...
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//335173002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37378 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-16 22:24:05 +00:00
ngeoffray@google.com
4936f84613
Fix a bug in ParallelMoveResolver::AllocateScratchRegister, where we end up allocating PC on ARM.
...
1) Iterate from first_free_register to last_free_register to ensure we're not using protected registers.
2) Break when finding an ok register.
2) fixes allocating PC on ARM by itself, but we could need 1) for another architecture.
The reason this has not been exposed yet, is because we call this method for a memory <-> memory
swap, which almost never happens on ARM.
R=vegorov@google.com
Review URL: https://codereview.chromium.org//337503003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37304 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-13 08:02:23 +00:00
fschneider@google.com
37d2d57532
VM: Reduce the number of edge counters in generated code.
...
This CL avoids edge counters for the incoming edge of blocks that
have one predecessor and one succesor block. The incoming count is
always equal to the outgoing count (modulo exceptional exit by throwing).
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//311993007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37170 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-10 10:27:45 +00:00
regis@google.com
3617cf8077
Share ic data between unoptimized and optimized static calls.
...
This prevents duplicated javascript compatibility warnings.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//322633002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37103 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-06 21:47:51 +00:00
regis@google.com
139187ae5f
Add javascript compatibility warnings for strings that are not identical, but
...
equal. The vm does not canonicalize all strings as javascript does.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//312693008
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37013 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-04 20:47:54 +00:00
fschneider@google.com
559e6410e2
First step in reducing the size of PC descriptors.
...
The descriptors used for patching just contain a pc offset
and can be stored with the code object instead of allocating
a full descriptor and linearly searching the list to retrieve
this information.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//315583002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@36989 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-04 11:02:34 +00:00
vegorov@google.com
4e286b316f
Split GuardField into GuardFieldType and GuardFieldLength instructions.
...
Record expected length offset that matches guarded_cid.
This greatly simplifies code generation and control flow inside these guards.
Fixes the bug that was causing unoptimized code to call into runtime even when guard did not fail.
Add --trace-field-guards flags to trace updates to the state of guarded fields' properties.
BUG=http://dartbug.com/19003
R=fschneider@google.com , johnmccutchan@google.com , zra@google.com
Review URL: https://codereview.chromium.org//304703002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@36872 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-02 13:53:53 +00:00
zra@google.com
6143dd9bad
Adds more ARM64 SIMD instructions.
...
Also, enables simd inlining for arm64.
R=regis@google.com
Review URL: https://codereview.chromium.org//307523002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@36694 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-27 16:29:15 +00:00
iposva@google.com
d36cd610cb
- Use isolate where it is appropriate.
...
- Do not emit an name for ExternalLabel.
R=johnmccutchan@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//306483005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@36662 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-27 10:15:50 +00:00
srdjan@google.com
45692c1248
More reduction of accessing TLS by caching/passing isolate value.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//299263005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@36598 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-23 23:26:48 +00:00