[8u40] Request for Approval: 8055186: Backport Nashorn optimistic typing to 8u repository
Seán Coffey
sean.coffey at oracle.com
Tue Aug 19 19:16:48 UTC 2014
Large list alright. I do think it makes sense to mention these in the
commit log for bug record purposes. It's a shame that individual
changesets aren't pulled in but maybe logistics didn't allow that.
Please make sure your latest code changes are reviewed by a peer.
Approved for jdk8u-dev.
regards,
Sean.
On 19/08/2014 16:02, Attila Szegedi wrote:
> On Aug 19, 2014, at 4:52 PM, Seán Coffey <sean.coffey at oracle.com> wrote:
>
>> One more request from my end Attila,
>>
>> can you list the bug IDs you intend to specify in your commit message (for records purposes)
> Absolutely, here they are:
>
> 8027043: Turn global accesses into MethodHandle.constant, with one chance of reassignment, e.g. x = value occuring once in the global scope is ok, twice is not.
> 8027958: NASHORN TEST: Create tests to test markdown javascript engine work with Nashorn
> 8028345: Remove nashorn repo \"bin\" scripts to avoid confusion with JDK bin launcher programs
> 8029090: Developers should be able to pass nashorn properties and enable/disable JFR from command line
> 8030169: Need regression test for bug JDK-8010731
> 8033105: Make sure Nashorn test harness can run zlib benchmark
> 8033334: Make sure that scope depth information is maintained in the RecompilableScriptFunctionDatas, to avoid unnecessary slow proto linkage when doing on demand compilation
> 8034206: Make parts of code pipeline reusable in order to facilitate faster warmup and faster lazy compilation.
> 8035820: Optimistic recompilation
> 8035836: Array performance improvements
> 8036127: Prototype filter needs to be applied to getter guard as well, not just getter
> 8036986: Test should check that correctly type is returned running with optimistic. If optimistic assumption was wrong we should get the right one.
> 8037086: Check that deoptimizing recompilations are correct
> 8037177: -Dnashorn.optimistic should be enabled by default, meaning that it has to be explicitly set to false to run with the jdk 8 style conservative types
> 8037534: Use scope types to determine optimistic types
> 8037572: Add more test cases to check static types
> 8037967: Broke the build, by commiting without saving the last review comment
> 8038223: Symbol trace debug output takes time
> 8038396: fix for the compiler expression evaluator to be more inquisitive about types
> 8038398: OptimisticRecompilationTest fails on staging repo nashorn/jdk9/nashorn due to test framework
> 8038406: Testability: as a first step of moving loggers away from the process global space, the Debug object now supports logging POJOs from log entries as an event queue, which can be introspected from test scripts. This is way better than screen scraping brittle and subject-to-change log output.
> 8038413: NPE in unboxInteger
> 8038416: Access to undefined scoped variables deoptimized too much
> 8038426: Move all loggers from process wide scope into Global scope
> 8038799: Guard and unbox boxed primitives types on setting them in Properties to avoid megamorphisism
> 8038945: Simplify strict undefined checks
> 8039044: Expand undefined intrinsics for all commutative combinators of scrict undefined checks
> 8039746: Transform applies to calls wherever possible, for ScriptFunctions and JSObjects.
> 8040024: BranchOptimizer produces bad code for NaN FP comparison
> 8040089: Apply to call transform was incomplete. Now passes all tests and performance is back
> 8040093: Make sure that optimistic splitting works in optimistic types
> 8040102: Remove all references to Unsafe and definition of anonymous clases from the code
> 8040655: When processing a RewriteException debug object, the return value has already been reset to null. We need to catch this value before that.
> 8041434: Add synchronization to the common global constants structure
> 8041625: AccessorProperty currentType must only by Object.class when non-primitive, and scoping followup problem for lazily generated with bodies
> 8041905: Fix apply2call bug that prevented avatar.js unit tests from running correctly
> 8041995: Problems when loading tree expressions with several optimistic program points when optimistically initializing ObjectNodes
> 8042118: Separate types from symbols
> 8043002: Improve performance of Nashorn equality operators
> 8043003: Use strongly referenced generic invokers
> 8043004: Reduce variability at JavaAdapter call sites
> 8043132: Nashorn : all tests failed with java.security.AccessControlException
> 8043133: Fix corner cases of JDK-8041995
> 8043137: Collapse long sequences of NOP in Nashorn bytecode output
> 8043232: Index selection of overloaded java new constructors
> 8043235: Type-based optimizations interfere with continuation methods
> 8043431: Fix yet another corner case of JDK-8041995
> 8043504: Octane test harness was missing argument to print_always at one callsite, causing erroneous logging
> 8043605: Enable history for empty property maps
> 8043608: Make equality tests inline better
> 8043611: Move timing dependent benchmark for apply2call specialization to currently_failing. It is dependent that nothing takes machine time when doing the two runs, causing spurious assertions. Suggest running octane.raytrace manually instead to verify that this works, or incorporating it in the nightly test suite
> 8043632: Parallelize class installation and various script fixes.
> 8043633: In order to remove global state outside of contexts, make sure Timing class is an instance and not a static global collection of data. Move into Context. Move -Dnashorn.timing to an official logging option.
> 8043956: Make code caching work with optimistic typing and lazy compilation
> 8044012: Integrate the latest best known performance flags int ant octane jobs, and make sure that it's easy to compare 'ant octane-nashorn' and 'ant octane-v8' at the push of a button. (or rather; the entry of a command line)
> 8044102: Ensure bechmark exclude list for Octane benchmarks is in only one place, project.properties, and fix benchmark harness
> 8044154: Nashorn : all tests failed with java.security.AccessControlException
> 8044171: Make optimistic exception handlers smaller
> 8044502: Get rid of global optimistic flag
> 8044518: Ensure exceptions related to optimistic recompilation are not serializable
> 8044533: Deoptimizing negation produces wrong result for zero
> 8044534: Constant folding for unary + should produce int for boolean literals
> 8044760: Avoid PropertyMap duplicate for global instances
> 8044786: Some tests fail with non-optimistic compilation
> 8044803: Unnecessary restOf check
> 8044816: On-demand compiled top-level program doesn't need :createProgramFunction
> 8044851: nashorn properties leak memory
> 8046013: TypeError: Cannot apply \"with\" to non script object
> 8046014: MultiGlobalCompiledScript should cache :createProgramFunction handle
> 8046025: AccessorProperty.getGetter is not threadsafe
> 8046026: CompiledFunction.relinkComposableInvoker assert is being hit
> 8046201: Avoid repeated flattening of nested ConsStrings
> 8046215: Running uncompilable scripts throws NullPointerException
> 8046898: Make sure that lazy compilation is the default, remove redundant \"enable lazy compilation\" flags, added warning message if compile logging is enabled and lazy is switched off. Verified existing test suite code coverage equivalence between lazy and eager.
> 8046905: apply on apply is broken
> 8046921: Deoptimization type information peristence
> 8047035: (function() \"hello\")() crashes in Lexer with jdk9
> 8047057: Add a regression test for the passing test cases from JDK-8042304
> 8047067: all eval arguments need to be copied in Lower
> 8047078: Fuzzing bug discovered when ArrayLiteralNodes weren't immutable
> 8047166: 'do with({}) break ; while(0);' crashes in CodeGenerator
> 8047331: Assertion in CompiledFunction when running earley-boyer after Merge
> 8047357: More precise synthetic return + unreachable throw
> 8047359: large string size RangeError should be thrown rather than reporting negative length
> 8047369: Add regression tests for passing test cases of JDK-8024971
> 8047371: local variable declaration in TypeEvaluator should use ScriptObject.addOwnProperty instead of .set
> 8047728: (function(x){var o={x:0}; with(o){delete x} return o.x})() evaluates to 0 instead of undefined
> 8047959: bindings created for declarations in eval code are not mutable
> 8048009: Type info caching accidentally defeated
> 8048071: eval within 'with' statement does not use correct scope if with scope expression has a copy of eval
> 8048079: Persistent code store is broken after optimistic types merge
> 8048505: ScriptingFunctions.readFully couldn't handle file names represented as ConsStrings
> 8048586: String concatenation with optimistic types is slow
> 8048718: JSON.parse('{\"0\":0, \"64\":0}') throws ArrayindexOutOfBoundsException
> 8048869: Reduce compile time by about 5% by removing the Class.casts from the AST nodes
> 8049086: Minor API convenience functions on \"Java\" object
> 8049222: JSType class exposes public mutable arrays
> 8049223: RewriteException class exposes public mutable arrays
> 8049242: Explicit constructor overload selection should work with StaticClass as well
> 8049318: Test hideLocationProperties.js fails on Window due to backslash in path
> 8049524: Global object initialization via javax.script API should be minimal
> 8050432: javax.script.filename variable should not be enumerable with nashorn engine's ENGINE_SCOPE bindings
> 8050964: OptimisticTypesPersistence.java should use java.util.Date instead of java.sql.Date
> 8051019: Separate src and test execution sandbox directories
> 8051346: Test262 tests for ECMAScript 5 now in branch \"es5-tests\"
> 8051439: Wrong type calculated for ADD operator with undefined operand
> 8051839: GuardedInvocation needs to clone an argument
> 8053908: jdeps is not PATH on Mac, results in ant clean test failure on Mac
> 8053910: ScriptObjectMirror causing havoc with Invocation interface
> 8053913: Auto format caused warning in CompositeTypeBasedGuardingDynamicLinker
> 8054223: Nashorn: AssertionError when use __DIR__ and ScriptEngine.eval()
> 8054411: Add nashorn.args.prepend system property
> 8054503: test/script/external/test262/test/suite/ch12/12.6/12.6.4/12.6.4-2.js fails with tip
> 8054651: Global.initConstructor and ScriptFunction.getPrototype(Object) can have stricter types
> 8054898: Avoid creation of empty type info files
> 8054993: type info cache may be disabled for test262 and tests explicitly changing that property should use @fork
> 8055034: jjs exits interactive mode if exception was thrown when trying to print value of last evaluated expression
> 8055042: Compile-time expression evaluator was missing variables
> 8055107: Extension directives to turn on callsite profiling, tracing, AST print and other debug features locally
> 8055139: test/script/trusted/JDK-8055107.js fails with access control exception
>
> Regards,
> Attila.
>
>> regards,
>> Sean.
>>
>> On 19/08/2014 14:45, Attila Szegedi wrote:
>>> On Aug 19, 2014, at 3:13 PM, Seán Coffey <sean.coffey at oracle.com> wrote:
>>>
>>>> Attila,
>>>>
>>>> quite a sizeable change!
>>> Indeed it is. That's a consequence of JEP 196 "Nahorn Optimistic Typing" being worked on in the JDK9 tree for long period of time before it being greenlighted for inclusion in 8u40, as well as of the fact that optimistic typing itself ended up being a fairly big architectural change for Nashorn.
>>>
>>>> Pushing the changes under one umbrella ID will mean that nashorn bug fixes in both JDK 8u and 9 will only "appear" to be fixed in JDK 9 only from JBS records. Ideally - I think a backport of the individual changesets is more the normal approach.
>>>>
>>>> Could you use your current changeset and mention all bug IDs fixed in the commit comment (one per line) ? That should improve matters. I'll leave it up to the nashorn team and yourself to decide if your current approach is the best one possible.
>>> Sure; we discussed the approach with the team before I embarked on preparing the changeset – as I mentioned, I also took the opportunity while in Santa Clara for the JVM Language Summit to also ask several long-serving OpenJDK reviewers' advice on how to proceed with this backport. I have collected the IDs (everything in 9 not in 8) – there is 120 of them. (I was assured by Joe Darcy that "our jcheck regex will hold".)
>>>
>>>> The tests also contain code that is unsuitable for OpenJDK and some copyrights are missing. Would be good to get these issues fixed up before approval.
>>> We have identified some unnecessary scripts used as auxiliary development tools in the bin directory that are no longer needed, and I have removed them. (They are the ones without copyrights.) Additionally, I have removed non-OpenJDK suitable content from the remaining scripts, the differences to the original changeset can be seen in <http://cr.openjdk.java.net/~attila/8055186/webrev.01>
>>>
>>> Finally, test/examples/apply_to_call_benchmark.js didn't have a copyright; I fixed that too. That is all we could discover that needed additional fixing.
>>>
>>> Thank you,
>>> Attila.
>>>
>>>> regards,
>>>> Sean.
>>>>
>>>> On 19/08/2014 08:58, Attila Szegedi wrote:
>>>>> Folks,
>>>>>
>>>>> I'm looking to backport JEP 196 (Nashorn Optimistic Typing) from the OpenJDK 9 repository to the 8u repository for 8u40 release. Since the implementation in the 9 repo is contained across many changesets (not even linearizable - there are merges), I created a separate JIRA issue for the backporting work (this approach was suggested to me by both Stuart Marks and Joe Darcy), and prepared a single backport changeset. It is basically a diff between current 9 and 8 tip (modulo version number strings), as there is nothing in Nashorn's 9 repo at the moment that is above and beyond of what should go in the 8 repo.
>>>>>
>>>>> The diff contains a large number of new tests too that were added in the 9 repo as part of every individual changeset, and they all pass when backported.
>>>>>
>>>>> The diff was prepared before JEP 201 Modular Source Code was pushed to 9 and as such is still valid to backport to 8 as-is (also, the JEP 201 push only affected a single file in Nashorn source tree, namely make/BuildNashorn.gmk, which is not affected by this backport at all).
>>>>>
>>>>> JIRA issue: https://bugs.openjdk.java.net/browse/JDK-8055186
>>>>> Webrev: http://cr.openjdk.java.net/~attila/8055186/webrev.00
>>>>> Review: http://mail.openjdk.java.net/pipermail/nashorn-dev/2014-August/003264.html
>>>>>
>>>>> Thank you,
>>>>> Attila.
More information about the jdk8u-dev
mailing list