- 17 May, 2016 2 commits
-
-
yangguo authored
R=bmeurer@chromium.org BUG=v8:5010 Review-Url: https://codereview.chromium.org/1980463002 Cr-Commit-Position: refs/heads/master@{#36276}
-
bmeurer authored
This adds back the instanceof operator support in the backends and introduces a @@hasInstance protector cell on the isolate that guards the fast path for the InstanceOfStub. This way we recover the ~10% regression on Octane EarleyBoyer in Crankshaft and greatly improve TurboFan and Ignition performance of instanceof. R=ishell@chromium.org TBR=hpayer@chromium.org,rossberg@chromium.org BUG=chromium:597249, v8:4447 LOG=n Review-Url: https://codereview.chromium.org/1980483003 Cr-Commit-Position: refs/heads/master@{#36275}
-
- 13 May, 2016 1 commit
-
-
mstarzinger authored
This makes the profiler reconstruct inlined function frames at eager deopt points from the deoptimization data. The main goal of this is to remove the last side-channel where Crankshaft communicates directly to the profiler. This is the last preparatory step towards deprecating the side-channel in question. R=yangguo@chromium.org Review-Url: https://codereview.chromium.org/1973993002 Cr-Commit-Position: refs/heads/master@{#36229}
-
- 11 May, 2016 2 commits
-
-
mstarzinger authored
This passes the inlining_id of deoptimization points via the relocation info instead of via a side-channel to the CPU profiler. This is one step towards deprecating the side-channel in question and avoid the need for performing a lookup of the return address of the deopt point. R=jarin@chromium.org Review-Url: https://codereview.chromium.org/1956693002 Cr-Commit-Position: refs/heads/master@{#36177}
-
hpayer authored
BUG=chromium:580959 LOG=n Review-Url: https://codereview.chromium.org/1972553002 Cr-Commit-Position: refs/heads/master@{#36163}
-
- 10 May, 2016 1 commit
-
-
hpayer authored
The new allocation folding implementation avoids fragmentation between folded allocation. As a consequence, our heap will always be iterable i.e. we do not have to perform a garbage collection before iterating the heap. BUG=chromium:580959 LOG=n Review-Url: https://codereview.chromium.org/1899813003 Cr-Commit-Position: refs/heads/master@{#36133}
-
- 06 May, 2016 2 commits
-
-
ishell authored
Deoptimizer is now able to reconstruct topmost accessor and constructor frames. BUG=chromium:608278, v8:4698 LOG=N TBR=bmeurer@chromium.org Review-Url: https://codereview.chromium.org/1936043002 Cr-Commit-Position: refs/heads/master@{#36075}
-
mstarzinger authored
This moves all the machinery for tracing inlined function that is specific to Crankshaft into the appropriate component. Only the old side-channel via a list of InlinedFunctionInfo structs remained within the CompilationInfo for now. In the long run we will reconstruct that information from the deoptimization data on the code objects. R=bmeurer@chromium.org Review-Url: https://codereview.chromium.org/1944323002 Cr-Commit-Position: refs/heads/master@{#36068}
-
- 04 May, 2016 1 commit
-
-
mstarzinger authored
The language mode is no longer constant accross a compilation unit. For example the extends clause of a class literal can be in strict mode even though the surrounding function is in sloppy mode. This makes any global language mode predicate that reasons over an entire function inherently dangerous. Instead one should use the appropriate predicate on scopes or literals directly. R=bmeurer@chromium.org Review-Url: https://codereview.chromium.org/1949013002 Cr-Commit-Position: refs/heads/master@{#36010}
-
- 26 Apr, 2016 1 commit
-
-
mlippautz authored
Default (and only way) is now to retrieve a tagged object. BUG=chromium:606711 LOG=N Review URL: https://codereview.chromium.org/1922553002 Cr-Commit-Position: refs/heads/master@{#35792}
-
- 07 Apr, 2016 1 commit
-
-
mstarzinger authored
Now that we no longer compile stubs from JavaScript source, but have other means of generating stubs using our optimizing compilers, we can assume that scope analysis has happened whenever prologues are being assembled. R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/1863333004 Cr-Commit-Position: refs/heads/master@{#35329}
-
- 01 Apr, 2016 1 commit
-
-
ishell authored
This CL ensures that we build environments/frame states so that tail caller frame will never become topmost. BUG=chromium:598998, v8:4698 LOG=N Review URL: https://codereview.chromium.org/1849503002 Cr-Commit-Position: refs/heads/master@{#35188}
-
- 30 Mar, 2016 1 commit
-
-
jarin authored
Context is always available through deopt data, so there should be no need to store the context back to the frame every time. (Turbofan already does not store back to the frame.) Review URL: https://codereview.chromium.org/1845553002 Cr-Commit-Position: refs/heads/master@{#35125}
-
- 29 Mar, 2016 1 commit
-
-
bmeurer authored
Fix and re-enable the flexible representation for Math.floor (which is used to implement Math.ceil) and Math.round, which allows Math.floor and Math.round to return double results instead of int32, and therefore allows values outside the int32 range, especially -0 is now a valid result, which doesn't deopt. Also port this feature to x64 and ia32 when the CPU supports the SSE4.1 extension. This addresses all the known deoptimization loops related to Math.round in the Kraken benchmark suite, and seems to also address most of the deoptimization loops related to Math.floor in the Oort Online benchmark. Drive-by-fix: Import the regression tests for the broken HMathFloorOfDiv optimization that caused the initial revert of the feature (for arm64 only back then). BUG=chromium:476477,v8:2890,v8:4059 R=jarin@chromium.org LOG=n Review URL: https://codereview.chromium.org/1841513003 Cr-Commit-Position: refs/heads/master@{#35094}
-
- 22 Mar, 2016 3 commits
-
-
ishell authored
BUG=v8:4698 LOG=N TBR=bmeurer@chromium.org Review URL: https://codereview.chromium.org/1782743003 Cr-Commit-Position: refs/heads/master@{#34992}
-
verwaest authored
This roughly doubles performance for generic Array.prototype.push. BUG= Review URL: https://codereview.chromium.org/1816553002 Cr-Commit-Position: refs/heads/master@{#34987}
-
ishell authored
... because Debugger could still require them to inspect optimized frames. BUG=chromium:596473, v8:4698 LOG=N Review URL: https://codereview.chromium.org/1816113002 Cr-Commit-Position: refs/heads/master@{#34979}
-
- 21 Mar, 2016 2 commits
-
-
jkummerow authored
Bounds check hoisting was known to be buggy and has never been turned on. Since Crankshaft is deprecated, nobody is going to spend time fixing it, so let's just get rid of it. BUG=v8:4155,v8:4849 LOG=n R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/1823623002 Cr-Commit-Position: refs/heads/master@{#34948}
-
ishell authored
In case when F inlined normal call to G which tail calls H we should not write translation for G for the tail call site. Otherwise we will see G in a stack trace inside H. This CL also enables all existing tests related to ES6 tail call elimination and adds more combinations. TBR=bmeurer@chromium.org BUG=v8:4698 LOG=N Committed: https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91 Cr-Commit-Position: refs/heads/master@{#34830} Review URL: https://codereview.chromium.org/1780043004 Cr-Commit-Position: refs/heads/master@{#34920}
-
- 16 Mar, 2016 3 commits
-
-
machenbach authored
Revert of [crankshaft] Fixing ES6 tail call elimination. (patchset #7 id:200001 of https://codereview.chromium.org/1780043004/ ) Reason for revert: [Sheriff] Leads to mac gc stress crashes: https://build.chromium.org/p/client.v8/builders/V8%20Mac%20GC%20Stress/builds/4975 Original issue's description: > [crankshaft] Fixing ES6 tail call elimination. > > In case when F inlined normal call to G which tail calls H we should not write translation for G for the tail call site. > Otherwise we will see G in a stack trace inside H. > > This CL also enables all existing tests related to ES6 tail call elimination. > > TBR=bmeurer@chromium.org > BUG=v8:4698 > LOG=N > > Committed: https://crrev.com/689980f7d4dfd4c29492f616d7b616b86ec9af91 > Cr-Commit-Position: refs/heads/master@{#34830} TBR=mstarzinger@chromium.org,ishell@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=v8:4698 Review URL: https://codereview.chromium.org/1814433002 Cr-Commit-Position: refs/heads/master@{#34835}
-
ishell authored
In case when F inlined normal call to G which tail calls H we should not write translation for G for the tail call site. Otherwise we will see G in a stack trace inside H. This CL also enables all existing tests related to ES6 tail call elimination. TBR=bmeurer@chromium.org BUG=v8:4698 LOG=N Review URL: https://codereview.chromium.org/1780043004 Cr-Commit-Position: refs/heads/master@{#34830}
-
ishell authored
This fix removes unnecessary nops from function prolog and seems to recover performance regression on some of SunSpider benchmarks. TBR=bmeurer@chromium.org BUG=chromium:531369 LOG=N Review URL: https://codereview.chromium.org/1800233003 Cr-Commit-Position: refs/heads/master@{#34810}
-
- 09 Mar, 2016 1 commit
-
-
ishell authored
TBR=bmeurer@chromium.org BUG=v8:4698 LOG=N Review URL: https://codereview.chromium.org/1773173005 Cr-Commit-Position: refs/heads/master@{#34613}
-
- 08 Mar, 2016 2 commits
-
-
verwaest authored
This mechanism was used to ensure that functions ended up as constants on the map of prototypes defined using object literals, e.g.,: function.prototype = { method: function() { ... } } Nowadays we treat prototypes specially, and make all their functions constants when an object turns prototype. Hence this special custom code isn't necessary anymore. This also affects boilerplates that do not become prototypes. Their functions will not be constants but fields instead. Calling their methods will slow down. However, multiple instances of the same boilerplate will stay monomorphic. We'll have to see what the impact is for such objects, but preliminary benchmarks do not show this as an important regression. BUG=chromium:593008 LOG=n Review URL: https://codereview.chromium.org/1772423002 Cr-Commit-Position: refs/heads/master@{#34602}
-
danno authored
Before this CL, various code stubs used different techniques for marking their frames to enable stack-crawling and other access to data in the frame. All of them were based on a abuse of the "standard" frame representation, e.g. storing the a context pointer immediately below the frame's fp, and a function pointer after that. Although functional, this approach tends to make stubs and builtins do an awkward, unnecessary dance to appear like standard frames, even if they have nothing to do with JavaScript execution. This CL attempts to improve this by: * Ensuring that there are only two fundamentally different types of frames, a "standard" frame and a "typed" frame. Standard frames, as before, contain both a context and function pointer. Typed frames contain only a minimum of a smi marker in the position immediately below the fp where the context is in standard frames. * Only interpreted, full codegen, and optimized Crankshaft and TurboFan JavaScript frames use the "standard" format. All other frames use the type frame format with an explicit marker. * Typed frames can contain one or more values below the type marker. There is new magic macro machinery in frames.h that simplifies defining the offsets of these fields in typed frames. * A new flag in the CallDescriptor enables specifying whether a frame is a standard frame or a typed frame. Secondary register location spilling is now only enabled for standard frames. * A zillion places in the code have been updated to deal with the fact that most code stubs and internal frames use the typed frame format. This includes changes in the deoptimizer, debugger, and liveedit. * StandardFrameConstants::kMarkerOffset is deprecated, (CommonFrameConstants::kContextOrFrameTypeOffset and StandardFrameConstants::kFrameOffset are now used in its stead). LOG=N Review URL: https://codereview.chromium.org/1696043002 Cr-Commit-Position: refs/heads/master@{#34571}
-
- 07 Mar, 2016 1 commit
-
-
ishell authored
HInvokeFunction and HApplyArguments instructions now support tail calling. Inlining of calls at tail position is not supported yet and therefore still disabled. The tail-call-megatest was modified so that the usages of "arguments" object do not disable Crankshaft. TBR=bmeurer@chromium.org BUG=v8:4698 LOG=N Review URL: https://codereview.chromium.org/1760253003 Cr-Commit-Position: refs/heads/master@{#34542}
-
- 04 Mar, 2016 1 commit
-
-
bmeurer authored
Add StringLessThanStub, StringLessThanOrEqualStub, StringGreaterThanStub and StringGreaterThanOrEqualStub, based on the CodeStubAssembler, and hook them up with TurboFan (and Ignition). The stubs are currently essentially comparable with the StringCompareStub, which is now obsolete. We can later extend these stubs to cover more interesting cases (i.e. two byte sequential string comparisons, etc.). R=epertoso@chromium.org Review URL: https://codereview.chromium.org/1765823002 Cr-Commit-Position: refs/heads/master@{#34485}
-
- 03 Mar, 2016 1 commit
-
-
bmeurer authored
These new stubs perform exactly the same job as the string equality case for the CompareIC, but are platform independent and usable outside of fullcodegen and Crankshaft. We use them in the StrictEqualStub and the StrictNotEqualStub instead of falling back to the runtime immediately for String comparisons, and we also use them in TurboFan to perform String equality or inequality comparisons. These stubs currently handle only internalized and one byte strings w/o going to C++, but it should be easy to add support for more string cases later, i.e. utilizing already flattened cons strings or comparing two byte strings as well. Review URL: https://codereview.chromium.org/1761823002 Cr-Commit-Position: refs/heads/master@{#34459}
-
- 29 Feb, 2016 1 commit
-
-
bmeurer authored
Rename the existing (patching) ToBooleanStub to ToBooleanICStub to match our naming convention, and add a new TurboFan-powered ToBooleanStub, which just does the ToBoolean conversion without any runtime call or code patching, so we can use it for Ignition (and TurboFan). Drive-by-fix: Add an Oddball::to_boolean field similar to the ones we already have for to_string and to_number, so we don't need to actually dispatch on the concrete Oddball at all. R=epertoso@chromium.org, rmcilroy@chromium.org, yangguo@chromium.org Review URL: https://codereview.chromium.org/1744163002 Cr-Commit-Position: refs/heads/master@{#34361}
-
- 26 Feb, 2016 1 commit
-
-
ishell authored
Everything that HCallJSFunction does can be easily done using more general HInvokeFunction, so there's no need to have this dedicated instruction around. Review URL: https://codereview.chromium.org/1728423002 Cr-Commit-Position: refs/heads/master@{#34320}
-
- 24 Feb, 2016 1 commit
-
-
ishell authored
Everything that HCallFunction does can be easily done using more general HCallWithDescriptor, so there's no need to have this dedicated instruction around. Review URL: https://codereview.chromium.org/1731303002 Cr-Commit-Position: refs/heads/master@{#34257}
-
- 18 Feb, 2016 1 commit
-
-
danno authored
Frame slots indexes numbers are used more consistently for computation in both TurboFan and Crankshaft. Specifically, Crankshaft now uses frame slot indexes in LChunk, removing the need for some special-case maths when building the deoptimization translation table. LOG=N R=mstarzinger@chromium.org Committed: https://crrev.com/81423b84dbb2eaf7e1a57b0f6029fc8e643b4755 Cr-Commit-Position: refs/heads/master@{#34078} Review URL: https://codereview.chromium.org/1702593002 Cr-Commit-Position: refs/heads/master@{#34114}
-
- 17 Feb, 2016 5 commits
-
-
machenbach authored
Revert of More simplification and unification of frame handling (patchset #5 id:80001 of https://codereview.chromium.org/1702593002/ ) Reason for revert: [Sheriff] Breaks nosnap debug: https://build.chromium.org/p/client.v8/builders/V8%20Linux%20-%20nosnap%20-%20debug/builds/5329 Original issue's description: > More simplification and unification of frame handling > > Frame slots indexes numbers are used more consistently for > computation in both TurboFan and Crankshaft. Specifically, > Crankshaft now uses frame slot indexes in LChunk, removing > the need for some special-case maths when building the > deoptimization translation table. > > LOG=N > R=mstarzinger@chromium.org > > Committed: https://crrev.com/81423b84dbb2eaf7e1a57b0f6029fc8e643b4755 > Cr-Commit-Position: refs/heads/master@{#34078} TBR=mstarzinger@chromium.org,jarin@chromium.org,danno@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Review URL: https://codereview.chromium.org/1708583002 Cr-Commit-Position: refs/heads/master@{#34082}
-
danno authored
Frame slots indexes numbers are used more consistently for computation in both TurboFan and Crankshaft. Specifically, Crankshaft now uses frame slot indexes in LChunk, removing the need for some special-case maths when building the deoptimization translation table. LOG=N R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/1702593002 Cr-Commit-Position: refs/heads/master@{#34078}
-
bmeurer authored
It's dead^Wa runtime call Jim! R=jarin@chromium.org Review URL: https://codereview.chromium.org/1702313002 Cr-Commit-Position: refs/heads/master@{#34077}
-
bmeurer authored
Everything that HCallStub does can easily be done using the more general HCallWithDescriptor, so there's no need to have this dedicated instruction around. R=jarin@chromium.org Review URL: https://codereview.chromium.org/1705633004 Cr-Commit-Position: refs/heads/master@{#34072}
-
mstarzinger authored
R=rossberg@chromium.org,bmeurer@chromium.org,verwaest@chromium.org BUG=v8:3956 LOG=n Review URL: https://codereview.chromium.org/1700993002 Cr-Commit-Position: refs/heads/master@{#34067}
-
- 16 Feb, 2016 1 commit
-
-
mstarzinger authored
R=bmeurer@chromium.org BUG=v8:3956 LOG=n Review URL: https://codereview.chromium.org/1693833002 Cr-Commit-Position: refs/heads/master@{#34036}
-
- 11 Feb, 2016 1 commit
-
-
ishell authored
This CL also removes tail call support made so far from Crankshaft. BUG=v8:4698 LOG=N Review URL: https://codereview.chromium.org/1683793004 Cr-Commit-Position: refs/heads/master@{#33885}
-
- 10 Feb, 2016 1 commit
-
-
verwaest authored
Mark null and undefined as undetectable, and use it to handle abstract equality comparison in the generic compare ic Marking as undetectable makes abstract equality of null, undefined, and other undetectable objects easier. Supporting it in the generic compare IC significantly speeds up dynamic comparison between those values and JSReceivers by not falling back to the runtime. MIPS port contributed by Balazs Kilvady <balazs.kilvady@imgtec.com> Review URL: https://codereview.chromium.org/1683643002 Cr-Commit-Position: refs/heads/master@{#33858}
-