- 21 Oct, 2015 1 commit
-
-
jarin authored
The newly introduced root makes sure that we do not flush the optimized code while the function is being compiled. BUG=v8:4493 LOG=n Review URL: https://codereview.chromium.org/1415133002 Cr-Commit-Position: refs/heads/master@{#31444}
-
- 19 Oct, 2015 3 commits
-
-
mstarzinger authored
This is exactly what it looks like. A temporary hack that ensures we can make forward progress with the JSInliner despite other components have a hard time picking the correct zone. This hack is a hack! R=bmeurer@chromium.org,jarin@chromium.org Review URL: https://codereview.chromium.org/1410963003 Cr-Commit-Position: refs/heads/master@{#31380}
-
bmeurer authored
R=jarin@chromium.org BUG=v8:4470 LOG=n Review URL: https://codereview.chromium.org/1410353002 Cr-Commit-Position: refs/heads/master@{#31356}
-
bmeurer authored
Native context specialization now lowers monomorphic and polymorphic accesses to data and constant data properties on object and/or prototype chain. We don't deal with accessors yet, and we also completely ignore proxies (which is compatible with what Crankshaft does). The code is more or less the straightforward implementation. We will need to refactor that and extract common patterns once the remaining bits for full load/store support is in. CQ_INCLUDE_TRYBOTS=tryserver.v8:v8_linux_nosnap_rel R=jarin@chromium.org BUG=v8:4470 LOG=n Committed: https://crrev.com/3a0bf860b7177f7abef01ff308a53603389d958e Cr-Commit-Position: refs/heads/master@{#31340} Review URL: https://codereview.chromium.org/1396333010 Cr-Commit-Position: refs/heads/master@{#31352}
-
- 16 Oct, 2015 3 commits
-
-
jarin authored
Revert of [turbofan] Initial support for monomorphic/polymorphic property loads. (patchset #3 id:100001 of https://codereview.chromium.org/1396333010/ ) Reason for revert: Waterfall redness. Original issue's description: > [turbofan] Initial support for monomorphic/polymorphic property loads. > > Native context specialization now lowers monomorphic and > polymorphic accesses to data and constant data properties on > object and/or prototype chain. We don't deal with accessors > yet, and we also completely ignore proxies (which is compatible > with what Crankshaft does). > > The code is more or less the straightforward implementation. We > will need to refactor that and extract common patterns once the > remaining bits for full load/store support is in. > > CQ_INCLUDE_TRYBOTS=tryserver.v8:v8_linux_nosnap_rel > R=jarin@chromium.org > BUG=v8:4470 > LOG=n > > Committed: https://crrev.com/3a0bf860b7177f7abef01ff308a53603389d958e > Cr-Commit-Position: refs/heads/master@{#31340} TBR=bmeurer@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=v8:4470 Review URL: https://codereview.chromium.org/1408123002 Cr-Commit-Position: refs/heads/master@{#31341}
-
bmeurer authored
Native context specialization now lowers monomorphic and polymorphic accesses to data and constant data properties on object and/or prototype chain. We don't deal with accessors yet, and we also completely ignore proxies (which is compatible with what Crankshaft does). The code is more or less the straightforward implementation. We will need to refactor that and extract common patterns once the remaining bits for full load/store support is in. CQ_INCLUDE_TRYBOTS=tryserver.v8:v8_linux_nosnap_rel R=jarin@chromium.org BUG=v8:4470 LOG=n Review URL: https://codereview.chromium.org/1396333010 Cr-Commit-Position: refs/heads/master@{#31340}
-
mstarzinger authored
This fixes the lifetime of nodes created by JSGlobalSpecialization that contain a simplified operator. In the case where this reducer runs as part of the inliner, the SimplifiedOperatorBuilder was instantiated with the wrong zone. This led to use-after-free of simplified operators. To avoid such situations in the future, we decided to move this operator builder into the JSGraph and make the situation uniform with all other operator builders. R=bmeurer@chromium.org BUG=chromium:543528 LOG=n Review URL: https://codereview.chromium.org/1409993002 Cr-Commit-Position: refs/heads/master@{#31334}
-
- 15 Oct, 2015 2 commits
-
-
mstarzinger authored
This is in preparation to enabling --turbo-inlining by default, fixing various issues when general purpose inlining is running against our entire test suite. R=bmeurer@chromium.org BUG=v8:4493 LOG=n Review URL: https://codereview.chromium.org/1407533004 Cr-Commit-Position: refs/heads/master@{#31294}
-
bmeurer authored
Also refactor the JSGlobalSpecialization somewhat to reduce the amount of duplicated code somewhat. R=jarin@chromium.org BUG=v8:4470 LOG=n Review URL: https://codereview.chromium.org/1403223003 Cr-Commit-Position: refs/heads/master@{#31286}
-
- 14 Oct, 2015 2 commits
-
-
rmcilroy authored
It is used by AstGraphBuilder (TF) and BytecodeGenerator (Ignition), so is no longer a full-codegen datastructure. Removes full-codegen.h dependency from compiler/ and interpreter/ Review URL: https://codereview.chromium.org/1393393003 Cr-Commit-Position: refs/heads/master@{#31256}
-
bmeurer authored
Perform native context specialization immediately after graph construction (also after inlinee graph construction). This way we can do unified inlining before we go to typing and typed lowering. And we will get better typing due to constants and (checked) type feedback. R=mstarzinger@chromium.org BUG=v8:4470 LOG=n Review URL: https://codereview.chromium.org/1404123002 Cr-Commit-Position: refs/heads/master@{#31255}
-
- 07 Oct, 2015 2 commits
-
-
mstarzinger authored
This separates the core machinery and the heuristics involved with inlining functions calls. So far the heuristic only respects our %SetForceInlineFlag hint, but it will the place where general inlining heuristics can live without impeding clarity of the core machinery. R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/1391903002 Cr-Commit-Position: refs/heads/master@{#31150}
-
bmeurer authored
R=mstarzinger@chromium.org BUG=chromium:540593 LOG=n Review URL: https://codereview.chromium.org/1395453002 Cr-Commit-Position: refs/heads/master@{#31145}
-
- 24 Sep, 2015 1 commit
-
-
mstarzinger authored
This introduces the NodeProperties::ChangeOp helper which guards node operator changes so that additional checking can be done without any additional dependencies being pulled into the Node class. For now only the input count is checked, but additional checking might follow. R=jarin@chromium.org Review URL: https://codereview.chromium.org/1366753003 Cr-Commit-Position: refs/heads/master@{#30916}
-
- 16 Sep, 2015 1 commit
-
-
mstarzinger authored
This makes sure that the arguments object materialization in the method prologue is composable with respect to inlining. The generic runtime functions materializing those objects now respect the deoptimization information when reconstructing the original arguments. R=mvstanton@chromium.org Review URL: https://codereview.chromium.org/1340313003 Cr-Commit-Position: refs/heads/master@{#30766}
-
- 15 Sep, 2015 1 commit
-
-
mstarzinger authored
The assumption that every function body produces a value does not hold for functions that e.g. unconditionally throw or endlessly loop. This fixes the inlining logic to handle such cases. R=bmeurer@chromium.org TEST=mjsunit/regress/regress-crbug-530598 BUG=chromium:530598 LOG=n Review URL: https://codereview.chromium.org/1333193005 Cr-Commit-Position: refs/heads/master@{#30738}
-
- 09 Sep, 2015 1 commit
-
-
mstarzinger authored
R=bmeurer@chromium.org BUG=chromium:527364 LOG=n Review URL: https://codereview.chromium.org/1322203005 Cr-Commit-Position: refs/heads/master@{#30651}
-
- 01 Sep, 2015 1 commit
-
-
mstarzinger authored
Now that it is no longer needed, this also removes the invalid inclusion of "object-inl.h" within the "unique.h" header file. Note that this change still leaves 2 violations of that rule in the code, checked with the "tools/check-inline-includes.sh" tool. R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/1321223002 Cr-Commit-Position: refs/heads/master@{#30503}
-
- 31 Aug, 2015 1 commit
-
-
mstarzinger authored
The usage of Unique<T> throughout the TurboFan IR does not have any advantage. There is no single point in time when they are initialized and most use-sites looked through to the underlying Handle<T> anyways. Also there already was a mixture of Handle<T> versus Unique<T> in the graph and this unifies the situation to use Handle<T> everywhere. R=bmeurer@chromium.org,titzer@chromium.org Review URL: https://codereview.chromium.org/1314473007 Cr-Commit-Position: refs/heads/master@{#30458}
-
- 24 Jul, 2015 1 commit
-
-
yangguo authored
R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/1248443003 Cr-Commit-Position: refs/heads/master@{#29840}
-
- 20 Jul, 2015 2 commits
-
-
danno authored
In many cases, the context that TurboFan's ASTGraphBuilder or subsequent reduction operations attaches to nodes does not need to be that exact context, but rather only needs to be one with the same native context, because it is used internally only to fetch the native context, e.g. for creating and throwing exceptions. This reducer recognizes common cases where the context that is specified for a node can be relaxed to a canonical, less specific one. This relaxed context can either be the enclosing function's context or a specific Module or Script context that is explicitly created within the function. This optimization is especially important for TurboFan-generated code stubs which use context specialization and inlining to generate optimal code. Without context relaxation, many extraneous moves are generated to pass exactly the right context to internal functions like ToNumber and AllocateHeapNumber, which only need the native context. By turning context relaxation on, these moves disappear because all these common internal context uses are unified to the context passed into the stub function, which is typically already in the correct context register and remains there for short stubs. It also eliminates the explicit use of a specialized context constant in the code stub in these cases, which could cause memory leaks. Review URL: https://codereview.chromium.org/1244583003 Cr-Commit-Position: refs/heads/master@{#29763}
-
yangguo authored
Prior to this patch, we enter a global debug mode whenever a break point is set. By entering this mode, all code is deoptimized and activated frames are recompiled and redirected to newly compiled debug code. After this patch, we only deoptimize/redirect for functions we want to debug. Trigger for this is Debug::EnsureDebugInfo, and having DebugInfo object attached to the SFI prevents optimization/inlining. The result is that we can have optimized code for functions without break points alongside functions that do have break points, which are not optimized. R=mstarzinger@chromium.org, ulan@chromium.org BUG=v8:4132 LOG=Y Review URL: https://codereview.chromium.org/1233073005 Cr-Commit-Position: refs/heads/master@{#29758}
-
- 06 Jul, 2015 1 commit
-
-
bmeurer authored
Remove the context specialization hack from the AstGraphBuilder, and properly specialize to the function context in the context specialization. And replace the correct context in the JSInliner. R=mstarzinger@chromium.org BUG=v8:4273 LOG=n Review URL: https://codereview.chromium.org/1218873005 Cr-Commit-Position: refs/heads/master@{#29493}
-
- 30 Jun, 2015 3 commits
-
-
bmeurer authored
R=jarin@chromium.org Review URL: https://codereview.chromium.org/1213383002 Cr-Commit-Position: refs/heads/master@{#29376}
-
bmeurer authored
The deoptimizer (and probably various other places) cannot deal properly with recursive function inlining, so we disallow it in TurboFan as well. We might want to reconsider that decision at some point in the future. R=jarin@chromium.org Review URL: https://codereview.chromium.org/1211243007 Cr-Commit-Position: refs/heads/master@{#29374}
-
bmeurer authored
Ideally inliner itself should not deal with context specialization at all, since this is all handled in the pipeline instead (actually inlining already runs together with context specialization), and the inlining logic should not care about the specialization mode. R=jarin@chromium.org Review URL: https://codereview.chromium.org/1217973003 Cr-Commit-Position: refs/heads/master@{#29366}
-
- 23 Jun, 2015 1 commit
-
-
jarin authored
This also threads through the parameter count and local count to the instruction selector. This will be later used to allow merging of various StateValues vector (and prepare for differential encoding which will not distinguish between parameters, locals and expression stack). BUG= Review URL: https://codereview.chromium.org/1191243003 Cr-Commit-Position: refs/heads/master@{#29214}
-
- 19 Jun, 2015 2 commits
-
-
bmeurer authored
BUG=v8:3809 LOG=n R=svenpanne@chromium.org Review URL: https://codereview.chromium.org/1196623002 Cr-Commit-Position: refs/heads/master@{#29147}
-
bmeurer authored
The three different concerns that the ControlReducer used to deal with are now properly separated into a.) DeadCodeElimination, which is a regular AdvancedReducer, that propagates Dead via control edges, b.) CommonOperatorReducer, which does strength reduction on common operators (i.e. Branch, Phi, and friends), and c.) GraphTrimming, which removes dead->live edges from the graph. This will make it possible to run the DeadCodeElimination together with other passes that actually introduce Dead nodes, i.e. typed lowering; and it opens the door for general inlining without two stage fix point iteration. To make the DeadCodeElimination easier and more uniform, we basically reverted the introduction of DeadValue and DeadEffect, and changed the Dead operator to produce control, value and effect. Note however that this is not a requirement, but merely a way to make dead propagation easier and more uniform. We could always go back and decide to have different Dead operators if some other change requires that. Note that there are several additional opportunities for cleanup now, i.e. OSR deconstruction could be a regular reducer now, and we don't need to use TheHole as dead value marker in the GraphReducer. And we can actually run the dead code elimination together with the other passes instead of using separate passes over the graph. We will do this in follow up CLs. R=jarin@chromium.org, mstarzinger@chromium.org Review URL: https://codereview.chromium.org/1193833002 Cr-Commit-Position: refs/heads/master@{#29146}
-
- 18 Jun, 2015 1 commit
-
-
mstarzinger authored
R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/1186033006 Cr-Commit-Position: refs/heads/master@{#29104}
-
- 11 Jun, 2015 3 commits
-
-
bmeurer authored
Previously we only recorded the SharedFunctionInfo of inlined functions that had at least one (lazy) deopt point left at code generation time. R=mstarzinger@chromium.org Committed: https://chromium.googlesource.com/v8/v8/+/ffa0b4007cd7de0cfd6d37079ef360e3beeb5686 Review URL: https://codereview.chromium.org/1175953002 Cr-Commit-Position: refs/heads/master@{#28922}
-
bmeurer authored
Revert of [turbofan] Record the SharedFunctionInfo of ALL inlined functions. (patchset #2 id:20001 of https://codereview.chromium.org/1175953002/) Reason for revert: Breaks Windows debug. Original issue's description: > [turbofan] Record the SharedFunctionInfo of ALL inlined functions. > > Previously we only recorded the SharedFunctionInfo of inlined functions > that had at least one (lazy) deopt point left at code generation time. > > R=mstarzinger@chromium.org > > Committed: https://chromium.googlesource.com/v8/v8/+/ffa0b4007cd7de0cfd6d37079ef360e3beeb5686 TBR=mstarzinger@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Review URL: https://codereview.chromium.org/1178683004 Cr-Commit-Position: refs/heads/master@{#28920}
-
Benedikt Meurer authored
Previously we only recorded the SharedFunctionInfo of inlined functions that had at least one (lazy) deopt point left at code generation time. R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/1175953002. Cr-Commit-Position: refs/heads/master@{#28919}
-
- 10 Jun, 2015 1 commit
-
-
bmeurer authored
Up until now we can only inline based on JSFunction, because of the way the deoptimization works. With this change we will be able to inline based on the SharedFunctionInfo and materialize the JSFunction from a literal or a stack slot when necessary. R=jarin@chromium.org Review URL: https://codereview.chromium.org/1169103004 Cr-Commit-Position: refs/heads/master@{#28906}
-
- 08 Jun, 2015 1 commit
-
-
mstarzinger authored
This in turn allows usage of AdvancedReducer::ReplaceWithValue which has access to the underlying graph reducer. R=titzer@chromium.org Review URL: https://codereview.chromium.org/1162903006 Cr-Commit-Position: refs/heads/master@{#28838}
-
- 05 Jun, 2015 1 commit
-
-
mstarzinger authored
This allows any AdvancedReducer to remove exception projections from graphs. This is the common case when JS-operators are being replaced with pure values. The old NodeProperties::ReplaceWithValue is being deprecated in favor of AdvancedReducer::ReplaceWithValue. R=titzer@chromium.org TEST=unittests/AdvancedReducerTest Review URL: https://codereview.chromium.org/1168693002 Cr-Commit-Position: refs/heads/master@{#28810}
-
- 27 May, 2015 1 commit
-
-
bmeurer authored
This simplifies inlining, in that we only need to update uses of Start and inputs of End instead of walking the whole inlinee to update all outer frame states. R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/1146403008 Cr-Commit-Position: refs/heads/master@{#28649}
-
- 26 May, 2015 2 commits
-
-
bmeurer authored
This way we don't need to connect (potentially) non-terminating loops later during control reduction, which saves one forward pass over the control graph. Long term we will move the trimming functionality of the control reducer to the GraphReducer, and get rid of the Finish method again. As a bonus, this change also properly rewires Terminate, Throw and Deoptimize during inlining. R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/1155683004 Cr-Commit-Position: refs/heads/master@{#28625}
-
bmeurer authored
This simplifies the handling of the End node. Based on this CL we will finally fix terminating every loop from the beginning (via Terminate nodes) and fix inlining of Throw, Deoptimize and Terminate. R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/1157023002 Cr-Commit-Position: refs/heads/master@{#28620}
-
- 21 May, 2015 1 commit
-
-
bmeurer authored
The inliner previously assumed that there will only be returns reaching the end node, but that's not true. This refactoring will make it possible to also hook up Deoptimize, Throw and Terminate nodes reaching end properly. R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/1146393002 Cr-Commit-Position: refs/heads/master@{#28550}
-