.
>
> + *
> + *
> + * Discussion of private access:
>
> Same here.
>
> + * Security manager interactions
>
> And here.
Wow; I don't know where HTML5 fits in the javadoc story. That might be nice to upgrade, but I'm not gonna go first:
--------
fgrep ' On Oct 2, 2013, at 1:15 PM, Vladimir Ivanov wrote:
>
>> http://cr.openjdk.java.net/~vlivanov/8024943/webrev.00/
>> 15 lines changed: 11 ins; 0 del; 4 mod
>>
>> In some situations VM fails to dump compiler replay file (produces empty replay_pid%p.log). The reason is that ciEnv::dump_replay_data tries to do thread state transition to VM unconditionally and acquire Compile_lock. It doesn't always work in context of VM error reporter.
>>
>> The fix is to provide new method specifically for VM error reporter (ciEnv::dump_replay_data_unsafe) which doesn't perform aforementioned actions.
>>
>> Testing: manual (checked that a valid dump is produced for a crash during safepointing).
>
> Is is possible that you've pushed a bug further into the CI code? I would like you to take a look at this (if you haven't already) and either make code adjustments or describe current assumptions in comments, for the next maintainer.
>
> What I mean about "pushed a bug" is that the CI is (generally speaking) sensitive to the thread state. (Note the GUARDED_VM_ENTRY macros everywhere.) The dump_replay_data function calls a bunch of dump_replay_data subroutines on lots of little data structures in the CI. Are any of them also sensitive to thread state? If so, perhaps you want to have your
>
> Also, the ciEnv::current() call returns something to the error reporter, and if that something is non-null, it is assumed to be (up to high probability, of course) a valid ciEnv structure. Are there any places where the ciEnv guy is in an inconsistent state but still published by ciEnv::current()? Probably not, but it might be worth a comment noting the appropriate conditions. My specific worry is that the call to remove_symbols in ~ciEnv might leave a space where the dumper would not see valid state.
>
> This crash dumper stuff cannot be nailed down 100%, of course, but this might be a good moment to make sure we've at least stomped on it a bit.
>
> Reviewed, pending resolution of the above.
>
> Thanks,
> ? John
>
From christian.thalinger at oracle.com Wed Oct 2 16:04:01 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Wed, 2 Oct 2013 16:04:01 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because of
recursive inlining of lambda form methods
Message-ID: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
https://bugs.openjdk.java.net/browse/JDK-8011138
http://cr.openjdk.java.net/~twisti/8011138
8011138: C2: stack overflow in compiler thread because of recursive inlining of lambda form methods
Reviewed-by:
The fix is to walk the JVM states when inlining compiled lambda forms and try to figure out if the "receiver" of the same inlinee (static method in the compiled lambda form) is the same as the current one. If that's the case we have a recursion.
I was tempted to remove the InlineTree::_caller_jvms completely but that might be too intrusive for now.
Tested with the failing test case and Octane on Nashorn to verify that I didn't break anything.
From christian.thalinger at oracle.com Wed Oct 2 20:17:16 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Wed, 2 Oct 2013 20:17:16 -0700
Subject: RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1
String.valueOf method
Message-ID:
https://bugs.openjdk.java.net/browse/JDK-8025566
http://cr.openjdk.java.net/~twisti/8025566
8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
Reviewed-by:
The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
From john.r.rose at oracle.com Wed Oct 2 23:38:03 2013
From: john.r.rose at oracle.com (John Rose)
Date: Wed, 2 Oct 2013 23:38:03 -0700
Subject: RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1
String.valueOf method
In-Reply-To:
References:
Message-ID: <985B4B9F-9E00-4930-9062-9979C005CDF6@oracle.com>
Reviewed.
On Oct 2, 2013, at 8:17 PM, Christian Thalinger wrote:
> https://bugs.openjdk.java.net/browse/JDK-8025566
> http://cr.openjdk.java.net/~twisti/8025566
>
> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
> Reviewed-by:
>
> The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
>
> I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
>
From roland.westrelin at oracle.com Thu Oct 3 01:07:36 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Thu, 3 Oct 2013 10:07:36 +0200
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <524C6C12.9050200@oracle.com>
References: <524C6C12.9050200@oracle.com>
Message-ID: <870DA6EA-495F-4C56-BC0D-4807FEF275F7@oracle.com>
> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
That looks good to me.
Roland.
From roland.westrelin at oracle.com Thu Oct 3 01:40:58 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Thu, 3 Oct 2013 10:40:58 +0200
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
Message-ID: <3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
> I was tempted to remove the InlineTree::_caller_jvms completely but that might be too intrusive for now.
Why do you need to pass a jvms rather than use caller_jvms()?
Does a lambda form always have a receiver?
You should probably use:
caller_argument0->uncast() == callee_argument0->uncast()
Roland.
From vladimir.x.ivanov at oracle.com Thu Oct 3 02:52:38 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Thu, 03 Oct 2013 13:52:38 +0400
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <870DA6EA-495F-4C56-BC0D-4807FEF275F7@oracle.com>
References: <524C6C12.9050200@oracle.com>
<870DA6EA-495F-4C56-BC0D-4807FEF275F7@oracle.com>
Message-ID: <524D3E66.4070108@oracle.com>
Thank you, Roland.
Best regards,
Vladimir Ivanov
On 10/3/13 12:07 PM, Roland Westrelin wrote:
>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
>
> That looks good to me.
>
> Roland.
>
From albert.noll at oracle.com Thu Oct 3 05:59:30 2013
From: albert.noll at oracle.com (Albert Noll)
Date: Thu, 03 Oct 2013 14:59:30 +0200
Subject: RFR(M): 8023014:
closed/com/oracle/jfr/compiler/CodeSweeperSweepNoFlushTest.java
fails with HS crash
In-Reply-To: <524C4EA8.1020109@oracle.com>
References: <52434207.2080804@oracle.com> <52436843.6010008@oracle.com> <52445202.7010303@oracle.com> <524471E4.6060508@oracle.com> <524A797F.2010006@oracle.com>
<524AF59C.3040908@oracle.com> <524BEBC2.4030202@oracle.com>
<524C4EA8.1020109@oracle.com>
Message-ID: <524D6A32.5080003@oracle.com>
Hi Vladimir,
thanks for looking at the patch. See comments inline.
Here is the updated webrev:
http://cr.openjdk.java.net/~anoll/8023014/webrev.04/
On 02.10.2013 18:49, Vladimir Kozlov wrote:
> Albert,
>
> In disable_compilation_forever() the comment does not correspond to code.
>
I removed the comment.
> In should_perform_shutdown() the _compiler_state could be changed
> before other threads reach "if (comp->is_state_failed())" check in
> init_compiler_runtime().
True. I added a function should_exit(), which returns true if the state
if failed, or shutting down.
> Yes, decrementing with lock is fine, you are right.
>
> The message should say why we do shutdown (no space to initialize
> compiler runtime):
> warning("Shutting down compiler
>
The warning messages are now:
- "Shutting down compiler %s (no space to run compiler)" or
- "Initialization of %s thread failed (no space to run compiler thread)"
if a C1 compiler thread fails to allocate memory.
> Please, explain what references:
>
> + // We could delete compiler runtimes also. However,
> + // there are references to the compiler runtime(s)
> + // (e.g., by nmethods) which then fail. This can be
>
Done.
> It would be nice to have regression test for this.
I added a regression test, which checks that compiler threads exit, if
there is not sufficient free code cache
to init all threads. Testing a failing initialization of C2 is tricky,
since a C2 initialization failure depends on the
scheduling of the compiler threads.
Thanks again,
Albert
>
> Thanks,
> Vladimir
>
> On 10/2/13 2:47 AM, Albert Noll wrote:
>> Hi Vladimir,
>>
>> thanks again for the feedback. I tested the patch as you proposed,
>> i.e., make sure that
>> the patch works if the C1 and/or C2 compiler fails to initialize. I
>> tested with up to 256 compiler
>> threads.
>>
>> To make sure that all compiler threads exit, I had to do additional
>> modifications in CompileQueue::get()
>> and the caller of this method. With these changes, one can also exit
>> compiler threads if -XX:-UseCodeCacheFlushing
>> is set, which is also contained in this webrev.
>>
>> Here is the updated webrev:
>> http://cr.openjdk.java.net/~anoll/8023014/webrev.03/
>>
>>
>> See more comments inline:
>>
>>
>> On 01.10.2013 18:17, Vladimir Kozlov wrote:
>>> Albert,
>>>
>>> In general it looks good. Please, test it extensively with Tiered
>>> with codecache size enough to initialize one
>>> compiler but not an other to verify your code.
>>>
>> Done.
>>> I think you need to swap lock and decrement otherwise it will deadlock:
>>>
>>> +bool AbstractCompiler::should_perform_shutdown() {
>>> + MutexLocker only_one(CompileThread_lock);
>>> + _num_compiler_threads--;
>>>
>> I simplified this function. In fact it is fine if the last thread
>> (i.e., if _num_compiler_threads == 0)
>> does the shutdown. The while() statement is really not necessary.
>> However, we have to decrement
>> _num_compiler_threads when we hold the lock. Otherwise we are not
>> guaranteed to reach 0
>> (-- is not atomic).
>>
>>> comp->set_shut_down(); and delete _compilers[0]; should be done by
>>> one thread I think.
>> Done.
>>
>>>
>>> Small note, you accidentally removed nl in c2compiler.cpp:
>>>
>>> - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All
>>> rights reserved.
>>> +/* * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All
>>> rights reserved.
>>>
>>>
>> Fixed.
>>
>> Thanks again,
>> Albert
>>
>>> Thanks,
>>> Vladimir
>>>
>>> On 10/1/13 12:27 AM, Albert Noll wrote:
>>>> Hi Vladimir,
>>>>
>>>> thanks again for looking at the patch. See comments inline:
>>>> webrev: http://cr.openjdk.java.net/~anoll/8023014/webrev.02/
>>>>
>>>>
>>>> On 26.09.2013 19:41, Vladimir Kozlov wrote:
>>>>> Albert,
>>>>>
>>>>> There is small window between check and set_state where state can
>>>>> became initialized or still be uninitialized:
>>>>> + if (!is_initialized()) {
>>>>> + set_state(failed);
>>>>>
>>>>> so you may hit assert in set_state().
>>>>>
>>>>> I think you need to call set_state(failed) only when C1 runtime is
>>>>> initialized after lock:
>>>>>
>>>>> if (should_perform_init()) {
>>>>> if (buffer_blob == NULL) {
>>>>> set_state(failed);
>>>>> } else {
>>>>> init_c1_runtime();
>>>>> set_state(initialized);
>>>>> }
>>>>> }
>>>>>
>>>> You are right. I adapted the patch according to your suggestion.
>>>>
>>>>> In this case it will match behavior for C2 which means that you
>>>>> need to shutdown compilation since you was not able to
>>>>> initialize compilation runtime. It will require more code to do
>>>>> proper shutdown not just exiting thread (free
>>>>> compilation queues, resetting flags). An it will be more
>>>>> complicated for Tiered case (I think we can use simple
>>>>> approach to shutdown all compilations even if only one Compiler is
>>>>> not initialized since it is rare case).
>>>>>
>>>> I added code to shut-down compilation. If compiler runtime
>>>> initialization fails, a flag is set which disables
>>>> compilation forever. In the current
>>>> version, all compilers are disabled if C1 and/or C2 runtime
>>>> initialization fails (also in case of tiered compilation). I
>>>> think this solution is fine for
>>>> now, since a compiler runtime initialization failure should not
>>>> happen in practice. If it ever turns out to be a
>>>> problem, i.e., it is required that we
>>>> we use one compiler if the other compiler failed to initialize, I
>>>> suggest we fix this in another bug. The current bug
>>>> appears only due to an artificial
>>>> setting of the code cache size.
>>>>
>>>> Compiler shut-down is performed by one thread. This thread waits
>>>> until all compiler threads have exited to compiler
>>>> loop. The thread then
>>>> deletes all tasks from the compile queue, deletes the compiler
>>>> objects, and sets the objects to NULL.
>>>>
>>>> Please let me know if you think this solution is fine, or if there
>>>> are other things that need to be considered.
>>>> The current version passed jprt.
>>>>
>>>> Many thanks again,
>>>> Albert
>>>>
>>>>> If C1 runtime was initialized but we was not able to allocate
>>>>> buffer for some threads your current code in
>>>>> compileBroker.cpp will handle such case. So you don't need to set
>>>>> state to 'failed'.
>>>>>
>>>>> thanks,
>>>>> Vladimir
>>>>>
>>>>> On 9/26/13 8:25 AM, Albert Noll wrote:
>>>>>> Hi Vladimir,
>>>>>>
>>>>>> thanks for looking at the patch.
>>>>>> Here is the new webrev:
>>>>>> http://cr.openjdk.java.net/~anoll/8023014/webrev.01/
>>>>>>
>>>>>>
>>>>>> See comments inline:
>>>>>>
>>>>>> On 26.09.2013 00:48, Vladimir Kozlov wrote:
>>>>>>> Thank you, Albert
>>>>>>>
>>>>>>> I would suggest to do TieredStartAtLevel changes separately, it
>>>>>>> is not
>>>>>>> related to this bug.
>>>>>>>
>>>>>> Done.
>>>>>>> Second, how we can guard the initialization with a field
>>>>>>> (_compiler_state and original _is_initialized) which is not static?
>>>>>>>
>>>>>>> You don't need separate local do_init in C*_Compiler.cpp since
>>>>>>> it is
>>>>>>> used only once:
>>>>>>>
>>>>>> Done.
>>>>>>> + if (should_perform_init()) {
>>>>>>>
>>>>>>> abstractCompiler.cpp:
>>>>>>> You removed ThreadInVMfromNative and ResetNoHandleMark from
>>>>>>> should_perform_init() and set_state(). Why? There is assert in
>>>>>>> check_prelock_state() called from Monitor::lock():
>>>>>>>
>>>>>>> assert((!thread->is_Java_thread() || ((JavaThread
>>>>>>> *)thread)->thread_state() == _thread_in_vm)
>>>>>>> || rank() == Mutex::special, "wrong thread state for using
>>>>>>> locks");
>>>>>>>
>>>>>>> Compiler threads are Java threads, so you should be in VM state
>>>>>>> when
>>>>>>> lock. How you did not hit this assert?
>>>>>>>
>>>>>> The state transition from native to VM (and ResetNoHandleMark) is
>>>>>> now in
>>>>>> compileBroker.cpp:1543.
>>>>>>>
>>>>>>> Typo in abstractCompiler.hpp 'methos':
>>>>>>>
>>>>>>> + // This method returns true for the first compiler thread that
>>>>>>> reaches that methos.
>>>>>>>
>>>>>>> It is not 'compiler object', it is 'compiler runtime' (yes it was
>>>>>>> before but it was not accurate, it could be mistaking for Compile
>>>>>>> object created for each compilation):
>>>>>>>
>>>>>>> + // This thread will initialize the compiler object.
>>>>>>>
>>>>>>> Swap lines (and use 'runtime' in the comment):
>>>>>>>
>>>>>>> ! bool is_initialized () { return _compiler_state ==
>>>>>>> initialized; }
>>>>>>> ! // Get/set state of compiler objects
>>>>>>>
>>>>>>>
>>>>>>> c2compiler.cpp:
>>>>>>>
>>>>>>> C2Compiler:: is not needed:
>>>>>>>
>>>>>>> + bool successful = C2Compiler::init_c2_runtime();
>>>>>>>
>>>>>>>
>>>>>> Fixed the issues above.
>>>>>>> Should we exit Compiler thread which failed local buffer allocation
>>>>>>> instead parking? Why keep resources allocated for it?
>>>>>>>
>>>>>> You are right, there is no reason the keep these threads around.
>>>>>> Compiler threads wo are not initialized correctly
>>>>>> now exit the VM.
>>>>>>
>>>>>> The patch is currently in west queue.
>>>>>>
>>>>>> Many thanks again,
>>>>>> Albert
>>>>>>
>>>>>>> Thanks,
>>>>>>> Vladimir
>>>>>>>
>>>>>>> On 9/25/13 1:05 PM, Albert Noll wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> could I have a review for this patch?
>>>>>>>>
>>>>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8023014
>>>>>>>> webrev: http://cr.openjdk.java.net/~anoll/8023014/webrev.00/
>>>>>>>>
>>>>>>>>
>>>>>>>> Problem: C1/C2 compiler initialization can fail if there is not
>>>>>>>> enough
>>>>>>>> memory in the code cache to generate all stubs.
>>>>>>>> This problem occurs only with a small code cache size.
>>>>>>>>
>>>>>>>> Solution: Check correctness of (parts of) C1/C2 initialization and
>>>>>>>> disable compiler (C1 and/or C2) if the compiler / thread
>>>>>>>> was not initialized correctly.
>>>>>>>>
>>>>>>>> Testing: jprt, test case, benchmarks
>>>>>>>>
>>>>>>>> This patch also contains a refactored version of compiler
>>>>>>>> object/thread
>>>>>>>> initialization. In the new version, a compiler object/thread is
>>>>>>>> initialized prior entering the main compiler loop. In the old
>>>>>>>> version,
>>>>>>>> the check if the compiler/thread is initialized was
>>>>>>>> done in the main compiler loop (and hence before every
>>>>>>>> compilation).
>>>>>>>>
>>>>>>>> To continue execution with a limited code cache size, the code
>>>>>>>> types
>>>>>>>> 'AdapterBlob' and 'MethodHandlesAdapterBlob' must
>>>>>>>> be 'critical' allocations in the code cache, i.e., they must
>>>>>>>> use space
>>>>>>>> reserved by CodeCacheMinimumFreeSpace.
>>>>>>>>
>>>>>>>> In addition I removed some unued code.
>>>>>>>>
>>>>>>>> Many thanks in advance for reviewing.
>>>>>>>>
>>>>>>>> Best,
>>>>>>>> Albert
>>>>>>
>>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131003/3b0b38d4/attachment-0001.html
From vladimir.x.ivanov at oracle.com Thu Oct 3 07:30:30 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Thu, 03 Oct 2013 18:30:30 +0400
Subject: RFR (S): 8024943: ciReplay: fails to dump replay data during
safepointing
In-Reply-To:
References: <524C7ECF.80004@oracle.com>
Message-ID: <524D7F86.4080003@oracle.com>
Updated webrev:
http://cr.openjdk.java.net/~vlivanov/8024943/webrev.01/
Verified that replay data is dumped correctly in the following combinations:
- thread_in_native
- thread_in_vm
- thread_in_vm + Compile_lock
Regarding ciEnv in invalid state (leaving aside the cases when the
instance is corrupted), the only case when it is possible is when the VM
crashed in ~ciEnv(). Don't know whether fixing it is worth the effort -
in both cases we don't get valid replay data file.
Best regards,
Vladimir Ivanov
On 10/3/13 12:57 AM, John Rose wrote:
> On Oct 2, 2013, at 1:15 PM, Vladimir Ivanov wrote:
>
>> http://cr.openjdk.java.net/~vlivanov/8024943/webrev.00/
>> 15 lines changed: 11 ins; 0 del; 4 mod
>>
>> In some situations VM fails to dump compiler replay file (produces empty replay_pid%p.log). The reason is that ciEnv::dump_replay_data tries to do thread state transition to VM unconditionally and acquire Compile_lock. It doesn't always work in context of VM error reporter.
>>
>> The fix is to provide new method specifically for VM error reporter (ciEnv::dump_replay_data_unsafe) which doesn't perform aforementioned actions.
>>
>> Testing: manual (checked that a valid dump is produced for a crash during safepointing).
>
> Is is possible that you've pushed a bug further into the CI code? I would like you to take a look at this (if you haven't already) and either make code adjustments or describe current assumptions in comments, for the next maintainer.
>
> What I mean about "pushed a bug" is that the CI is (generally speaking) sensitive to the thread state. (Note the GUARDED_VM_ENTRY macros everywhere.) The dump_replay_data function calls a bunch of dump_replay_data subroutines on lots of little data structures in the CI. Are any of them also sensitive to thread state? If so, perhaps you want to have your
>
> Also, the ciEnv::current() call returns something to the error reporter, and if that something is non-null, it is assumed to be (up to high probability, of course) a valid ciEnv structure. Are there any places where the ciEnv guy is in an inconsistent state but still published by ciEnv::current()? Probably not, but it might be worth a comment noting the appropriate conditions. My specific worry is that the call to remove_symbols in ~ciEnv might leave a space where the dumper would not see valid state.
>
> This crash dumper stuff cannot be nailed down 100%, of course, but this might be a good moment to make sure we've at least stomped on it a bit.
>
> Reviewed, pending resolution of the above.
>
> Thanks,
> ? John
>
From vladimir.kozlov at oracle.com Thu Oct 3 09:57:10 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Thu, 03 Oct 2013 09:57:10 -0700
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <524C6C12.9050200@oracle.com>
References: <524C6C12.9050200@oracle.com>
Message-ID: <524DA1E6.1050903@oracle.com>
I don't think it is right. You need to have check before the loop's body execution.
Also what about case r->lo() == MIN_INT? (j - lowval) will underflow.
I think we should use int64 type for these expressions as in other lines of this method.
Thanks,
Vladimir
On 10/2/13 11:55 AM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
> 7 lines changed: 4 ins; 0 del; 3 mod
>
> If hi->hi() == MAX_INT then, after (j == r->hi() && r == hi), j++ overflows and j <= r->hi() succeeds again (leading to
> extra iterations and infinite loop in the product).
>
> The fix is to check whether upper limit is reached (j >= r->hi()) and stop iterating, if necessary.
>
> Also, did a small cleanup: eliminated unused parameter from SwitchRange::print.
>
> Testing: failing test case.
>
> Reviewed-by: iveresov, ?
>
> Best regards,
> Vladimir Ivanov
From vladimir.kozlov at oracle.com Thu Oct 3 10:03:34 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Thu, 03 Oct 2013 10:03:34 -0700
Subject: RFR (S): 8024943: ciReplay: fails to dump replay data during
safepointing
In-Reply-To: <524D7F86.4080003@oracle.com>
References: <524C7ECF.80004@oracle.com>
<524D7F86.4080003@oracle.com>
Message-ID: <524DA366.9030903@oracle.com>
Looks good to me. I will need old method with state transition for my changes to dump replay per request.
Thanks,
Vladimir
On 10/3/13 7:30 AM, Vladimir Ivanov wrote:
> Updated webrev:
> http://cr.openjdk.java.net/~vlivanov/8024943/webrev.01/
>
> Verified that replay data is dumped correctly in the following combinations:
> - thread_in_native
> - thread_in_vm
> - thread_in_vm + Compile_lock
>
> Regarding ciEnv in invalid state (leaving aside the cases when the instance is corrupted), the only case when it is
> possible is when the VM crashed in ~ciEnv(). Don't know whether fixing it is worth the effort - in both cases we don't
> get valid replay data file.
>
> Best regards,
> Vladimir Ivanov
>
> On 10/3/13 12:57 AM, John Rose wrote:
>> On Oct 2, 2013, at 1:15 PM, Vladimir Ivanov wrote:
>>
>>> http://cr.openjdk.java.net/~vlivanov/8024943/webrev.00/
>>> 15 lines changed: 11 ins; 0 del; 4 mod
>>>
>>> In some situations VM fails to dump compiler replay file (produces empty replay_pid%p.log). The reason is that
>>> ciEnv::dump_replay_data tries to do thread state transition to VM unconditionally and acquire Compile_lock. It
>>> doesn't always work in context of VM error reporter.
>>>
>>> The fix is to provide new method specifically for VM error reporter (ciEnv::dump_replay_data_unsafe) which doesn't
>>> perform aforementioned actions.
>>>
>>> Testing: manual (checked that a valid dump is produced for a crash during safepointing).
>>
>> Is is possible that you've pushed a bug further into the CI code? I would like you to take a look at this (if you
>> haven't already) and either make code adjustments or describe current assumptions in comments, for the next maintainer.
>>
>> What I mean about "pushed a bug" is that the CI is (generally speaking) sensitive to the thread state. (Note the
>> GUARDED_VM_ENTRY macros everywhere.) The dump_replay_data function calls a bunch of dump_replay_data subroutines on
>> lots of little data structures in the CI. Are any of them also sensitive to thread state? If so, perhaps you want to
>> have your
>>
>> Also, the ciEnv::current() call returns something to the error reporter, and if that something is non-null, it is
>> assumed to be (up to high probability, of course) a valid ciEnv structure. Are there any places where the ciEnv guy
>> is in an inconsistent state but still published by ciEnv::current()? Probably not, but it might be worth a comment
>> noting the appropriate conditions. My specific worry is that the call to remove_symbols in ~ciEnv might leave a space
>> where the dumper would not see valid state.
>>
>> This crash dumper stuff cannot be nailed down 100%, of course, but this might be a good moment to make sure we've at
>> least stomped on it a bit.
>>
>> Reviewed, pending resolution of the above.
>>
>> Thanks,
>> ? John
>>
From christian.thalinger at oracle.com Thu Oct 3 10:18:53 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 10:18:53 -0700
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <524DA1E6.1050903@oracle.com>
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
Message-ID: <0F35D9CC-DBFB-4A1B-A257-D00126F6A146@oracle.com>
I agree with Vladimir here. The code looks even more fragile after the fix.
On Oct 3, 2013, at 9:57 AM, Vladimir Kozlov wrote:
> I don't think it is right. You need to have check before the loop's body execution.
> Also what about case r->lo() == MIN_INT? (j - lowval) will underflow.
> I think we should use int64 type for these expressions as in other lines of this method.
>
> Thanks,
> Vladimir
>
> On 10/2/13 11:55 AM, Vladimir Ivanov wrote:
>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
>> 7 lines changed: 4 ins; 0 del; 3 mod
>>
>> If hi->hi() == MAX_INT then, after (j == r->hi() && r == hi), j++ overflows and j <= r->hi() succeeds again (leading to
>> extra iterations and infinite loop in the product).
>>
>> The fix is to check whether upper limit is reached (j >= r->hi()) and stop iterating, if necessary.
>>
>> Also, did a small cleanup: eliminated unused parameter from SwitchRange::print.
>>
>> Testing: failing test case.
>>
>> Reviewed-by: iveresov, ?
>>
>> Best regards,
>> Vladimir Ivanov
From christian.thalinger at oracle.com Thu Oct 3 10:40:39 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 10:40:39 -0700
Subject: RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1
String.valueOf method
In-Reply-To: <985B4B9F-9E00-4930-9062-9979C005CDF6@oracle.com>
References:
<985B4B9F-9E00-4930-9062-9979C005CDF6@oracle.com>
Message-ID: <559B327A-C586-434D-84F4-34AF1BA9AF99@oracle.com>
Thank you, John.
On Oct 2, 2013, at 11:38 PM, John Rose wrote:
> Reviewed.
>
> On Oct 2, 2013, at 8:17 PM, Christian Thalinger wrote:
>
>> https://bugs.openjdk.java.net/browse/JDK-8025566
>> http://cr.openjdk.java.net/~twisti/8025566
>>
>> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
>> Reviewed-by:
>>
>> The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
>>
>> I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
>>
>
From vladimir.x.ivanov at oracle.com Thu Oct 3 11:04:27 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Thu, 03 Oct 2013 22:04:27 +0400
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <524DA1E6.1050903@oracle.com>
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
Message-ID: <524DB1AB.8060406@oracle.com>
Vladimir,
I like the idea to convert j to int64. It looks much cleaner now.
Here's updated webrev:
http://cr.openjdk.java.net/~vlivanov/8024774/webrev.01
Best regards,
Vladimir Ivanov
On 10/3/13 8:57 PM, Vladimir Kozlov wrote:
> I don't think it is right. You need to have check before the loop's body
> execution.
> Also what about case r->lo() == MIN_INT? (j - lowval) will underflow.
> I think we should use int64 type for these expressions as in other lines
> of this method.
>
> Thanks,
> Vladimir
>
> On 10/2/13 11:55 AM, Vladimir Ivanov wrote:
>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
>> 7 lines changed: 4 ins; 0 del; 3 mod
>>
>> If hi->hi() == MAX_INT then, after (j == r->hi() && r == hi), j++
>> overflows and j <= r->hi() succeeds again (leading to
>> extra iterations and infinite loop in the product).
>>
>> The fix is to check whether upper limit is reached (j >= r->hi()) and
>> stop iterating, if necessary.
>>
>> Also, did a small cleanup: eliminated unused parameter from
>> SwitchRange::print.
>>
>> Testing: failing test case.
>>
>> Reviewed-by: iveresov, ?
>>
>> Best regards,
>> Vladimir Ivanov
From albert.noll at oracle.com Thu Oct 3 11:17:26 2013
From: albert.noll at oracle.com (Albert Noll)
Date: Thu, 03 Oct 2013 20:17:26 +0200
Subject: RFR(XS): 8024008: Nashorn V8 (Crypto) benchmark crashes with
small CodeCache size
In-Reply-To: <522FA629.10509@oracle.com>
References: <522DD453.4010809@oracle.com> <522E09C4.1070700@oracle.com>
<522EC44F.2060005@oracle.com> <522F1612.4030606@oracle.com>
<522FA629.10509@oracle.com>
Message-ID: <524DB4B6.7040201@oracle.com>
Hi,
I think I found the reason for the crash. Please forget the previous
suggestions.
See the following webrev:
Problem:
http://cr.openjdk.java.net/~anoll/8024008/webrev.02/
If the code cache gets full, this code in compileBroker.cpp is not
executed.
1318 (void) AdapterHandlerLibrary::create_native_wrapper(method, compile_id);
As a result, we get the following error "i2c adapter must return to
an interpreter frame"
if the JVM is called with "-XX:+UnlockDiagnosticVMOptions
-XX:+VerifyAdapterCalls"
I do not yet fully understand why that's the case, so please if you
know let me know.
Solution:
Move the code cache is full-check after line 1318.
Many thanks,
Albert
Am 11.09.2013 01:07, schrieb Vladimir Kozlov:
> Albert,
>
> I would suggest to run as many tests as possible to verify correctness
> of changes because this code is very important.
>
> Thanks,
> Vladimir
>
> On 9/10/13 5:52 AM, Albert Noll wrote:
>> Hi,
>>
>> the current version causes a serious performance regression.
>> I have to figure out what's wrong.
>>
>> Best,
>> Albert
>>
>> On 10.09.2013 09:03, Albert Noll wrote:
>>> Hi Vladimir,
>>>
>>> thanks for looking at this. I checked all call sites of
>>> 'make_not_entrant()' and 'make_zombie()'. I do not see any problems.
>>> The worst thing that can happen is that an nmethod for which the call
>>> returns fals gets removed later than expected.
>>>
>>> I updated the comment and did some minor code refactoring.
>>>
>>> Also I think that it is worth considering to backport this change,
>>> since the bug can appear any time
>>> the code cache fills up. If that bug appears, it is extremely hard to
>>> reproduce and debug.
>>>
>>> Here is the updated webrev.
>>> http://cr.openjdk.java.net/~anoll/8024008/webrev.01/
>>>
>>>
>>> Best,
>>> Albert
>>>
>>>
>>>
>>> On 09.09.2013 19:47, Vladimir Kozlov wrote:
>>>> Several places in sources do not check returned result of
>>>> make_not_entrant_or_zombie(). And they may assume that method marked
>>>> as non-entrant, for example, because before we returned 'false' only
>>>> when an other thread already changed the state to one we need.
>>>>
>>>> Can you check all call sites to make sure they work correctly with
>>>> this change?
>>>>
>>>> Thanks,
>>>> Vladimir
>>>>
>>>> On 9/9/13 6:59 AM, Albert Noll wrote:
>>>>> Hi,
>>>>>
>>>>> thanks for reviewing this patch.
>>>>>
>>>>> https://bugs.openjdk.java.net/browse/JDK-8024008
>>>>> http://cr.openjdk.java.net/~anoll/8024008/webrev.00/
>>>>>
>>>>>
>>>>> Many thanks in advance,
>>>>> Albert
>>>>>
>>>>> Problem:
>>>>> The state of nmethods that are currently locked by the VM must not
>>>>> change.
>>>>> Some operations such as setting ICs (e.g.,
>>>>> SharedRuntime::resolve_sub_helper())
>>>>> rely on this fact. 'nmethod::make_not_entrant_or_zombie does not
>>>>> make this
>>>>> check.
>>>>>
>>>>> Solution:
>>>>> Do method state unchanged of nmethod is locked by the VM.
>>>>>
>>>>> Testing: Run Octane benchmarks on top of Nashorn with small code
>>>>> cache size (16m).
>>>>>
>>>
>>
From christian.thalinger at oracle.com Thu Oct 3 11:21:50 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 11:21:50 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
Message-ID: <3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
On Oct 3, 2013, at 1:40 AM, Roland Westrelin wrote:
>> I was tempted to remove the InlineTree::_caller_jvms completely but that might be too intrusive for now.
>
> Why do you need to pass a jvms rather than use caller_jvms()?
InlineTree::_caller_jvms is not a deep clone of the JVMS and thus has no map; it's just used as a container for method and bci. In fact, as I mentioned in my original email, we should remove InlineTree::_caller_jvms since it's not of much use but that's for another bug.
> Does a lambda form always have a receiver?
"receiver", yes. The methods are static but the first argument is always a MethodHandle.
> You should probably use:
> caller_argument0->uncast() == callee_argument0->uncast()
I can but it's probably not necessary. If it's truly a recursive call even the CheckCastPP node should be the same, right?
>
> Roland.
From christian.thalinger at oracle.com Thu Oct 3 11:24:00 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 11:24:00 -0700
Subject: RFR (S): 8025656: compiler/8013496/Test8013496.sh fails on assert
In-Reply-To: <524BF9B1.3060602@oracle.com>
References: <524ABA6B.3040701@oracle.com> <524B0757.8010101@oracle.com>
<524BF9B1.3060602@oracle.com>
Message-ID:
Looks good.
On Oct 2, 2013, at 3:47 AM, Albert Noll wrote:
> Hi Valdimir,
>
> thanks for your feedback. See comments inline.
> Here is the new webrev: http://cr.openjdk.java.net/~anoll/8025656/webrev.01/
>
> On 01.10.2013 19:33, Vladimir Kozlov wrote:
>> Albert,
>>
>> I think the only problem is call to handle_full_code_cache() in C1 Compiler::get_buffer_blob(). Please verify that. There are calls during adapters generation and I don't see which state at that time.
> Yes, I think that this is the only call that causes the assertion to fail. I checked the state of the thread in
> AdapterHandlerLibrary::create_native_wrapper() and AdapterHandlerLibrary::get_adapter and in both
> functions the thread is in state '_thread_in_vm'.
>
>> If the problem only in get_buffer_blob() it will be solved when you remove the call in 8023014.
> Yes, it will be removed.
>> On other hand it will not hurt to have transition here.
> I agree that's why I would keep it. It could help to fix JDK-8022968 more easily.
>> You need to fix comment:
>>
>> "This ensures that handle_full_code_cache()" should be "This ensures that possibly_sweep()"
>> Fixing the test is fine.
>>
> Done.
>
> Thanks again,
> Albert
>
> Thanks,
>> Vladimir
>>
>> On 10/1/13 5:04 AM, Albert Noll wrote:
>>> Hi,
>>>
>>> could I have a review for this small patch?
>>>
>>> bug: https://bugs.openjdk.java.net/browse/JDK-8025656
>>> webrev: http://cr.openjdk.java.net/~anoll/8025656/webrev.00/
>>>
>>> Problem: handle_full_code_cache is called when the calling thread is in a wrong state.
>>>
>>> Solution: Switch to the right thread state before calling sweeper.
>>>
>>> I also re-wrote the corresponding test. In the new version, the arguments take a larger InitialCodeCacheSize
>>> and ReservedCodeCacheSize. Too small code cache sizes can fail the compiler runtime initialization and hence
>>> the test. Checking proper compiler runtime initialization is checked by 8023014.
>>>
>>> Many thanks in advance,
>>> Albert
>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131003/e581dde1/attachment.html
From vladimir.kozlov at oracle.com Thu Oct 3 11:24:53 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Thu, 03 Oct 2013 11:24:53 -0700
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <524DB1AB.8060406@oracle.com>
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
<524DB1AB.8060406@oracle.com>
Message-ID: <524DB675.6090101@oracle.com>
You need to add cast (int)(j - lowval) since argument type is int. Some
C++ compiler will complain if no cast.
Thanks,
Vladimir K
On 10/3/13 11:04 AM, Vladimir Ivanov wrote:
> Vladimir,
>
> I like the idea to convert j to int64. It looks much cleaner now.
>
> Here's updated webrev:
> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.01
>
> Best regards,
> Vladimir Ivanov
>
> On 10/3/13 8:57 PM, Vladimir Kozlov wrote:
>> I don't think it is right. You need to have check before the loop's body
>> execution.
>> Also what about case r->lo() == MIN_INT? (j - lowval) will underflow.
>> I think we should use int64 type for these expressions as in other lines
>> of this method.
>>
>> Thanks,
>> Vladimir
>>
>> On 10/2/13 11:55 AM, Vladimir Ivanov wrote:
>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
>>> 7 lines changed: 4 ins; 0 del; 3 mod
>>>
>>> If hi->hi() == MAX_INT then, after (j == r->hi() && r == hi), j++
>>> overflows and j <= r->hi() succeeds again (leading to
>>> extra iterations and infinite loop in the product).
>>>
>>> The fix is to check whether upper limit is reached (j >= r->hi()) and
>>> stop iterating, if necessary.
>>>
>>> Also, did a small cleanup: eliminated unused parameter from
>>> SwitchRange::print.
>>>
>>> Testing: failing test case.
>>>
>>> Reviewed-by: iveresov, ?
>>>
>>> Best regards,
>>> Vladimir Ivanov
From john.coomes at oracle.com Thu Oct 3 11:25:20 2013
From: john.coomes at oracle.com (john.coomes at oracle.com)
Date: Thu, 03 Oct 2013 18:25:20 +0000
Subject: hg: hsx/hotspot-comp: 5 new changesets
Message-ID: <20131003182521.753CD62D17@hg.openjdk.java.net>
Changeset: 5ec3c4948863
Author: ksrini
Date: 2013-09-27 16:27 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/rev/5ec3c4948863
8023495: [infra] create 64-bit solaris bits with symlinks
Reviewed-by: ihse, tbell, erikj
! common/makefiles/Jprt.gmk
! common/makefiles/Main.gmk
Changeset: 72c2495c86c9
Author: katleman
Date: 2013-10-01 12:43 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/rev/72c2495c86c9
Merge
Changeset: 0f704e36bc5d
Author: ihse
Date: 2013-10-01 10:58 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/rev/0f704e36bc5d
8006661: Use LC_ALL=C instead of LANG=C compare.sh
Reviewed-by: tbell
! common/bin/compare.sh
Changeset: 4faa09c7fe55
Author: erikj
Date: 2013-10-02 15:08 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/rev/4faa09c7fe55
Merge
Changeset: 669e3e3d4459
Author: katleman
Date: 2013-10-02 13:26 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/rev/669e3e3d4459
Added tag jdk8-b110 for changeset 4faa09c7fe55
! .hgtags
From john.coomes at oracle.com Thu Oct 3 11:25:58 2013
From: john.coomes at oracle.com (john.coomes at oracle.com)
Date: Thu, 03 Oct 2013 18:25:58 +0000
Subject: hg: hsx/hotspot-comp/corba: Added tag jdk8-b110 for changeset
3d2b7ce93c5c
Message-ID: <20131003182601.C0B7862D18@hg.openjdk.java.net>
Changeset: 85c1c94e7235
Author: katleman
Date: 2013-10-02 13:26 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/corba/rev/85c1c94e7235
Added tag jdk8-b110 for changeset 3d2b7ce93c5c
! .hgtags
From john.coomes at oracle.com Thu Oct 3 11:26:23 2013
From: john.coomes at oracle.com (john.coomes at oracle.com)
Date: Thu, 03 Oct 2013 18:26:23 +0000
Subject: hg: hsx/hotspot-comp/jaxp: Added tag jdk8-b110 for changeset
4c84c5b447b0
Message-ID: <20131003182643.1321962D19@hg.openjdk.java.net>
Changeset: 17ee0d3e97fd
Author: katleman
Date: 2013-10-02 13:26 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jaxp/rev/17ee0d3e97fd
Added tag jdk8-b110 for changeset 4c84c5b447b0
! .hgtags
From john.coomes at oracle.com Thu Oct 3 11:27:00 2013
From: john.coomes at oracle.com (john.coomes at oracle.com)
Date: Thu, 03 Oct 2013 18:27:00 +0000
Subject: hg: hsx/hotspot-comp/jaxws: Added tag jdk8-b110 for changeset
cc682329886b
Message-ID: <20131003182709.5E30362D1A@hg.openjdk.java.net>
Changeset: 32edc7a2c866
Author: katleman
Date: 2013-10-02 13:26 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jaxws/rev/32edc7a2c866
Added tag jdk8-b110 for changeset cc682329886b
! .hgtags
From roland.westrelin at oracle.com Thu Oct 3 11:28:06 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Thu, 3 Oct 2013 20:28:06 +0200
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
Message-ID: <1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
>> You should probably use:
>> caller_argument0->uncast() == callee_argument0->uncast()
>
> I can but it's probably not necessary. If it's truly a recursive call even the CheckCastPP node should be the same, right?
With 8024070, that will add Cast nodes in many places, I don't think that will necessarily be the case.
Roland.
From vladimir.x.ivanov at oracle.com Thu Oct 3 11:35:27 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Thu, 03 Oct 2013 22:35:27 +0400
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <524DB675.6090101@oracle.com>
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
<524DB1AB.8060406@oracle.com> <524DB675.6090101@oracle.com>
Message-ID: <524DB8EF.7030908@oracle.com>
Thanks for catching that.
How about that?
http://cr.openjdk.java.net/~vlivanov/8024774/webrev.02
Best regards,
Vladimir Ivanov
On 10/3/13 10:24 PM, Vladimir Kozlov wrote:
> You need to add cast (int)(j - lowval) since argument type is int. Some
> C++ compiler will complain if no cast.
>
> Thanks,
> Vladimir K
>
> On 10/3/13 11:04 AM, Vladimir Ivanov wrote:
>> Vladimir,
>>
>> I like the idea to convert j to int64. It looks much cleaner now.
>>
>> Here's updated webrev:
>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.01
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> On 10/3/13 8:57 PM, Vladimir Kozlov wrote:
>>> I don't think it is right. You need to have check before the loop's body
>>> execution.
>>> Also what about case r->lo() == MIN_INT? (j - lowval) will underflow.
>>> I think we should use int64 type for these expressions as in other lines
>>> of this method.
>>>
>>> Thanks,
>>> Vladimir
>>>
>>> On 10/2/13 11:55 AM, Vladimir Ivanov wrote:
>>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
>>>> 7 lines changed: 4 ins; 0 del; 3 mod
>>>>
>>>> If hi->hi() == MAX_INT then, after (j == r->hi() && r == hi), j++
>>>> overflows and j <= r->hi() succeeds again (leading to
>>>> extra iterations and infinite loop in the product).
>>>>
>>>> The fix is to check whether upper limit is reached (j >= r->hi()) and
>>>> stop iterating, if necessary.
>>>>
>>>> Also, did a small cleanup: eliminated unused parameter from
>>>> SwitchRange::print.
>>>>
>>>> Testing: failing test case.
>>>>
>>>> Reviewed-by: iveresov, ?
>>>>
>>>> Best regards,
>>>> Vladimir Ivanov
From john.coomes at oracle.com Thu Oct 3 11:31:41 2013
From: john.coomes at oracle.com (john.coomes at oracle.com)
Date: Thu, 03 Oct 2013 18:31:41 +0000
Subject: hg: hsx/hotspot-comp/jdk: 115 new changesets
Message-ID: <20131003190030.07EE762D1D@hg.openjdk.java.net>
Changeset: 529cd4de1823
Author: prr
Date: 2013-09-26 15:06 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/529cd4de1823
7092764: java.awt.font.TransformAttribute.equals(null) throws NPE
Reviewed-by: jgodinez, jchen
! src/share/classes/java/awt/font/TransformAttribute.java
+ test/java/awt/font/TransformAttribute/TransformEqualityTest.java
Changeset: 1bcd48cfb7be
Author: ceisserer
Date: 2013-09-26 16:30 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/1bcd48cfb7be
8024895: xrender MaskImage cache isn't accounting for change in alpha
Reviewed-by: prr, jchen
! src/solaris/classes/sun/java2d/xr/XRMaskImage.java
+ test/java/awt/image/DrawImage/EABlitTest.java
Changeset: dae020405903
Author: lana
Date: 2013-09-26 17:13 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/dae020405903
Merge
Changeset: 0151f12bd392
Author: malenkov
Date: 2013-08-22 17:17 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/0151f12bd392
8023536: Some regression tests have a wrong header
Reviewed-by: alexsch
! test/java/beans/Performance/Test7122740.java
! test/java/beans/Performance/Test7184799.java
! test/javax/swing/JTree/8013571/Test8013571.java
Changeset: b71f112dab2a
Author: malenkov
Date: 2013-08-22 21:05 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/b71f112dab2a
7057769: JScrollBar spec should specify that unit increment & decrement functionality may not be present
Reviewed-by: alexsch
! src/share/classes/javax/swing/JScrollBar.java
Changeset: f983fd18dd81
Author: malenkov
Date: 2013-08-23 19:29 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/f983fd18dd81
7080613: java.beans.DefaultPersistenceDelegate.instantiate(..) doesn't throw NPE
Reviewed-by: alexsch
! src/share/classes/java/beans/DefaultPersistenceDelegate.java
! src/share/classes/java/beans/PersistenceDelegate.java
Changeset: 22ef5187a3e6
Author: dmarkov
Date: 2013-08-26 17:21 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/22ef5187a3e6
8023474: First mousepress doesn't start editing in JTree
Reviewed-by: alexp, anthony
! src/share/classes/java/awt/Component.java
! src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java
! src/share/classes/sun/awt/AWTAccessor.java
+ test/javax/swing/plaf/basic/BasicTreeUI/8023474/bug8023474.java
Changeset: abd068530590
Author: malenkov
Date: 2013-08-27 12:53 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/abd068530590
7195179: ClassCastException for null values in JComboBox
Reviewed-by: alexsch
! src/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java
+ test/javax/swing/JComboBox/7195179/Test7195179.java
Changeset: 92adff44c841
Author: malenkov
Date: 2013-08-27 13:13 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/92adff44c841
8021379: JFileChooser Create New Folder button enabled in write proteced directory
Reviewed-by: alexsch
! src/share/classes/sun/swing/FilePane.java
Changeset: 4bfcf9c5ced3
Author: malenkov
Date: 2013-08-27 13:37 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/4bfcf9c5ced3
8022398: javax/swing/JFileChooser/8013442/Test8013442.java fails
Reviewed-by: alexsch
! src/macosx/classes/com/apple/laf/AquaFileChooserUI.java
! src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java
! src/share/classes/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java
! src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java
! src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java
+ src/share/classes/sun/swing/AbstractFilterComboBoxModel.java
! src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java
Changeset: e11ed7187b0c
Author: lana
Date: 2013-08-27 21:46 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/e11ed7187b0c
Merge
- src/share/classes/com/sun/security/auth/PolicyParser.java
- src/share/classes/com/sun/security/auth/SubjectCodeSource.java
- src/share/classes/java/util/jar/UnsupportedProfileException.java
- src/share/classes/sun/security/provider/ConfigSpiFile.java
- test/java/net/URLClassLoader/profiles/Basic.java
- test/java/net/URLClassLoader/profiles/Lib.java
- test/java/net/URLClassLoader/profiles/basic.sh
- test/tools/jar/AddAndUpdateProfile.java
- test/tools/launcher/profiles/Basic.java
- test/tools/launcher/profiles/Logging.java
- test/tools/launcher/profiles/Main.java
- test/tools/launcher/profiles/VersionCheck.java
Changeset: 43de418f1345
Author: ptbrunet
Date: 2013-08-28 17:25 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/43de418f1345
8011955: Lunar screen reader crashes intermittently in WindowsAccessBridge-32.DLL
6995891: JAWS will occasionally stop speaking focused objects as user TABs -> problem with message queue
8014738: Combobox menu items are not announced with JAWS
8011938: Java Ferret example corrupts JCombobox of the running application
8012011: JAB 2.0.2 incompletely shows kbd accelerator in menus
8022966: Java Access Bridge no longer usable with screen magnifiers
Reviewed-by: raginip, tbell, erikj, art
! make/bridge/AccessBridgeJava/Makefile
! makefiles/CompileJavaClasses.gmk
! makefiles/GensrcMisc.gmk
Changeset: 35644adc3269
Author: malenkov
Date: 2013-08-28 17:32 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/35644adc3269
6968363: ClassCastException while entering HINDI characters with CustomDocument
Reviewed-by: alexsch
! src/share/classes/javax/swing/text/AbstractDocument.java
! src/share/classes/javax/swing/text/DefaultCaret.java
! src/share/classes/javax/swing/text/GlyphPainter2.java
! src/share/classes/javax/swing/text/ParagraphView.java
+ test/javax/swing/text/AbstractDocument/6968363/Test6968363.java
Changeset: 6432f8749e1d
Author: pchelko
Date: 2013-08-30 11:11 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/6432f8749e1d
8023966: JViewPort.BLIT_SCROLL_MODE does not work in JLightweightFrame
Reviewed-by: anthony, ant
! src/share/classes/javax/swing/JViewport.java
Changeset: 7151f08eeadf
Author: alexsch
Date: 2013-08-30 13:28 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/7151f08eeadf
8022401: [macosx] javax/swing/text/JTextComponent/5074573/bug5074573.java fails
Reviewed-by: anthony
! src/macosx/native/sun/awt/AWTEvent.m
+ test/java/awt/event/KeyEvent/KeyChar/KeyCharTest.java
Changeset: f2f614e31522
Author: malenkov
Date: 2013-09-02 14:06 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/f2f614e31522
7156658: JTextComponent.setFocusAccelerator() spec does not state that focus accelerator is L&F dependent
Reviewed-by: alexsch
! src/share/classes/javax/swing/text/JTextComponent.java
Changeset: 6ffa2680e139
Author: art
Date: 2013-09-02 16:48 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/6ffa2680e139
8022184: Fix static , Raw warnings in classes belonging to java.awt
Reviewed-by: art, anthony
Contributed-by: Srikalyan Chandrashekar
! src/share/classes/java/awt/AWTKeyStroke.java
! src/share/classes/java/awt/CardLayout.java
! src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java
! src/share/classes/java/awt/DefaultKeyboardFocusManager.java
! src/share/classes/java/awt/GradientPaintContext.java
! src/share/classes/java/awt/GraphicsEnvironment.java
! src/share/classes/java/awt/KeyboardFocusManager.java
! src/share/classes/java/awt/SequencedEvent.java
! src/share/classes/java/awt/TexturePaintContext.java
! src/share/classes/java/awt/WaitDispatchSupport.java
Changeset: b5ed8686cc01
Author: malenkov
Date: 2013-09-03 11:00 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/b5ed8686cc01
6943780: JTabbedPane throws ArrayIndexOutOfBoundsException sometimes
Reviewed-by: alexsch
! src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ test/javax/swing/plaf/basic/BasicTabbedPaneUI/Test6943780.java
Changeset: 80a8c4ff3b51
Author: alexsch
Date: 2013-09-03 17:27 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/80a8c4ff3b51
8007156: [macosx] Wrong events in processKeyBinding of JTable Submit Date
Reviewed-by: leonidr
! src/macosx/classes/sun/lwawt/LWComponentPeer.java
! src/macosx/classes/sun/lwawt/LWWindowPeer.java
+ test/java/awt/event/KeyEvent/ExtendedKeyCode/ExtendedKeyCodeTest.java
Changeset: 2ad01ecbaf90
Author: malenkov
Date: 2013-09-03 21:53 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/2ad01ecbaf90
7172865: PropertyDescriptor fails to work with setter method name if setter is non-void
Reviewed-by: art, alexsch
! src/share/classes/java/beans/IndexedPropertyDescriptor.java
! src/share/classes/java/beans/MethodDescriptor.java
+ src/share/classes/java/beans/MethodRef.java
! src/share/classes/java/beans/PropertyDescriptor.java
+ test/java/beans/Introspector/Test7172865.java
Changeset: ba711056009f
Author: pchelko
Date: 2013-09-04 14:32 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/ba711056009f
8021943: FileDialog getFile returns corrupted string after previous setFile
Reviewed-by: anthony, serb
Contributed-by: alexander.zvegintsev at oracle.com
! src/windows/native/sun/windows/awt_FileDialog.cpp
Changeset: ba041df8a554
Author: mcherkas
Date: 2013-09-04 18:12 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/ba041df8a554
8023565: JPG causes javax.imageio.IIOException: ICC APP2 encoutered without prior JFIF
Reviewed-by: bae, vadim
! src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java
Changeset: e4ba3d9ea041
Author: mcherkas
Date: 2013-09-05 15:37 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/e4ba3d9ea041
8023392: Swing text components printed with spaces between chars
Reviewed-by: alexsch, alexp
Contributed-by: anton.nashatyrev at oracle.com
! src/share/classes/sun/swing/SwingUtilities2.java
+ test/java/awt/print/bug8023392/bug8023392.html
+ test/java/awt/print/bug8023392/bug8023392.java
Changeset: d267c066b006
Author: lana
Date: 2013-09-06 15:09 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/d267c066b006
Merge
- src/share/classes/sun/misc/Compare.java
- src/share/classes/sun/misc/Sort.java
Changeset: fbb6f976d780
Author: alexsch
Date: 2013-09-09 17:14 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/fbb6f976d780
8024413: Add tests for issues JDK-8002077 and JDK-7199708
Reviewed-by: malenkov, leonidr
+ test/javax/swing/JFileChooser/7199708/bug7199708.java
+ test/javax/swing/JFileChooser/8002077/bug8002077.java
Changeset: 3ea08767fc0d
Author: alexsch
Date: 2013-09-09 18:34 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/3ea08767fc0d
8020060: MoleculeViewerTest demo doesn't work due to SecurityPermissions
Reviewed-by: malenkov, erikj
! makefiles/CompileDemos.gmk
! src/share/demo/applets/MoleculeViewer/XYZApp.java
! src/share/demo/applets/MoleculeViewer/example1.html
! src/share/demo/applets/MoleculeViewer/example2.html
! src/share/demo/applets/MoleculeViewer/example3.html
! src/share/demo/applets/WireFrame/ThreeD.java
! src/share/demo/applets/WireFrame/example1.html
! src/share/demo/applets/WireFrame/example2.html
! src/share/demo/applets/WireFrame/example3.html
! src/share/demo/applets/WireFrame/example4.html
Changeset: fc5d16fec25f
Author: serb
Date: 2013-09-09 21:03 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/fc5d16fec25f
8023042: Inaccuracy in documentation in a sound area
Reviewed-by: prr
! src/share/classes/javax/sound/sampled/AudioFileFormat.java
! src/share/classes/javax/sound/sampled/AudioFormat.java
Changeset: 9d0d961fb1cd
Author: pchelko
Date: 2013-09-10 11:00 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/9d0d961fb1cd
8024381: The test for 8020210 does not have @bug tag
Reviewed-by: anthony, serb
! test/java/awt/Window/MaximizeOffscreen/MaximizeOffscreenTest.java
Changeset: 8b6dace81d6c
Author: alexsch
Date: 2013-09-10 14:33 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/8b6dace81d6c
8021253: JFileChooser does not react on pressing enter since java 7
Reviewed-by: malenkov
! src/share/classes/javax/swing/JFileChooser.java
+ test/javax/swing/JFileChooser/8021253/bug8021253.java
Changeset: 1daffcf035c4
Author: malenkov
Date: 2013-09-10 17:06 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/1daffcf035c4
7057770: (spec)Scrollbar spec should specify that unit increment & decrement functionality may not be present
Reviewed-by: alexsch
! src/share/classes/java/awt/Scrollbar.java
Changeset: eedb2b6d93ec
Author: malenkov
Date: 2013-09-10 17:12 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/eedb2b6d93ec
8024407: [macosx] javax/swing/JScrollBar/7163696/Test7163696.java failed intermittently on macos
Reviewed-by: alexsch
! test/javax/swing/JScrollBar/7163696/Test7163696.java
Changeset: 0cc00c11e17e
Author: leonidr
Date: 2013-09-10 20:42 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/0cc00c11e17e
8003901: [macosx] Need test for JDK-8002114
Reviewed-by: anthony, serb
! test/javax/swing/JMenuItem/ActionListenerCalledTwice/ActionListenerCalledTwiceTest.java
Changeset: 04fbd34fda7b
Author: bagiras
Date: 2013-09-12 14:56 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/04fbd34fda7b
8003965: Toolkit.beep() documentation is ambiguous
Reviewed-by: anthony
! src/share/classes/java/awt/Toolkit.java
Changeset: def1fa9854f7
Author: bagiras
Date: 2013-09-12 15:50 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/def1fa9854f7
7064312: Cleanup: avoid using unsafe string function
Reviewed-by: serb, pchelko
! src/windows/native/sun/windows/awt_FileDialog.cpp
! src/windows/native/sun/windows/awt_Font.cpp
! src/windows/native/sun/windows/awt_PrintControl.cpp
! src/windows/native/sun/windows/awt_Toolkit.cpp
! src/windows/native/sun/windows/awt_TrayIcon.cpp
! src/windows/native/sun/windows/awt_ole.cpp
Changeset: 6321e4429a38
Author: serb
Date: 2013-09-12 18:21 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/6321e4429a38
7124537: [macosx] Menu shortcuts for all menu items should be disabled if a menu itself is disabled
Reviewed-by: anthony, leonidr
! src/macosx/classes/sun/lwawt/macosx/CMenu.java
! src/macosx/classes/sun/lwawt/macosx/CMenuItem.java
! src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java
Changeset: 3213c388740a
Author: dmarkov
Date: 2013-09-12 18:44 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/3213c388740a
8024395: Improve fix for line break calculations
Reviewed-by: alexp, alexsch
! src/share/classes/javax/swing/text/FlowView.java
! src/share/classes/javax/swing/text/View.java
! test/javax/swing/text/View/8014863/bug8014863.java
Changeset: ef2f0c15b332
Author: pchelko
Date: 2013-09-13 11:58 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/ef2f0c15b332
8024170: [SwingNode] Implement cursor change
Reviewed-by: anthony, ant
! src/macosx/classes/sun/lwawt/LWLightweightFramePeer.java
! src/share/classes/sun/swing/JLightweightFrame.java
! src/share/classes/sun/swing/LightweightContent.java
! src/share/classes/sun/swing/SwingAccessor.java
! src/solaris/classes/sun/awt/X11/XLightweightFramePeer.java
! src/windows/classes/sun/awt/windows/WComponentPeer.java
! src/windows/classes/sun/awt/windows/WLightweightFramePeer.java
Changeset: 12788c245d67
Author: pchelko
Date: 2013-09-13 17:25 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/12788c245d67
8015453: java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java failed on windows with jdk8 since b86
Reviewed-by: art, serb
! src/share/classes/sun/awt/datatransfer/DataTransferer.java
Changeset: df107b1f2f2e
Author: pchelko
Date: 2013-09-13 17:38 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/df107b1f2f2e
8015371: The HTML text without tags does not appear inside the WordPad application, and we try to click the button, but the case exits.
Reviewed-by: anthony, serb
! src/windows/classes/sun/awt/windows/WDataTransferer.java
Changeset: 40fdf56c09a9
Author: pchelko
Date: 2013-09-13 17:41 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/40fdf56c09a9
8015455: java/awt/dnd/DisposeFrameOnDragCrash/DisposeFrameOnDragTest.java hangs on windows
Reviewed-by: serb, anthony
! src/share/classes/java/awt/dnd/DropTarget.java
! src/share/classes/javax/swing/TransferHandler.java
Changeset: 915d13946f18
Author: mcherkas
Date: 2013-09-13 17:48 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/915d13946f18
8015601: [macosx] Test javax/swing/JInternalFrame/InternalFrameIsNotCollectedTest.java fails on MacOS X
Reviewed-by: alexp, alexsch
! test/javax/swing/JInternalFrame/InternalFrameIsNotCollectedTest.java
Changeset: ad52e924c55a
Author: kshefov
Date: 2013-09-13 17:54 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/ad52e924c55a
8006087: [TEST_BUG] The BACKSPACE key doesn't work and after pressing 'cancel' and 'DONE' button, the case pass automatically.
Reviewed-by: alexsch, serb
! test/javax/swing/JFileChooser/4150029/bug4150029.html
! test/javax/swing/JFileChooser/4150029/bug4150029.java
Changeset: c8a85165b725
Author: kshefov
Date: 2013-09-13 17:58 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/c8a85165b725
8015597: [TEST_BUG] [macosx] Test closed/javax/swing/JMenuBar/4750590/bug4750590.java fails since JDK 8 b75 on MacOSX
Reviewed-by: alexsch, serb
+ test/javax/swing/JMenuBar/4750590/bug4750590.java
Changeset: 17cc8f13e4e7
Author: pchelko
Date: 2013-09-13 18:02 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/17cc8f13e4e7
8012026: [macosx] Component.getMousePosition() does not work in an applet on MacOS
Reviewed-by: anthony, serb
! make/sun/lwawt/FILES_export_macosx.gmk
- src/macosx/classes/sun/lwawt/macosx/CMouseInfoPeer.java
! src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java
! src/macosx/native/sun/awt/AWTView.m
+ test/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithOverlay.java
+ test/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java
Changeset: a46d22ee4d4b
Author: alexsch
Date: 2013-09-16 17:45 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/a46d22ee4d4b
8008728: [macosx] Swing. JDialog. Modal dialog goes to background
Reviewed-by: serb
! src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
! src/macosx/native/sun/awt/AWTWindow.m
+ test/java/awt/Modal/ModalDialogOrderingTest/ModalDialogOrderingTest.java
Changeset: 8f5b4e7623cf
Author: ant
Date: 2013-09-16 18:00 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/8f5b4e7623cf
8022512: JLightweightFrame: the content pane should be transparent
Reviewed-by: anthony
! src/share/classes/sun/swing/JLightweightFrame.java
Changeset: 49c7d299a504
Author: kshefov
Date: 2013-09-16 19:15 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/49c7d299a504
7020060: [TEST_BUG] java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java failed
Reviewed-by: anthony, serb
! test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java
Changeset: 98080e9367be
Author: kshefov
Date: 2013-09-16 19:21 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/98080e9367be
8015588: [TEST_BUG] [macosx] Test java/awt/MenuBar/MenuBarSetFont/MenuBarSetFont.java fails on MacOSX
Reviewed-by: anthony, serb
! test/java/awt/MenuBar/MenuBarSetFont/MenuBarSetFont.java
Changeset: 04612a52e7bd
Author: pchelko
Date: 2013-09-16 19:38 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/04612a52e7bd
8024779: [macosx] SwingNode crashes on exit
Reviewed-by: anthony, ant
! src/macosx/native/sun/awt/AWTView.m
! src/macosx/native/sun/awt/AWTWindow.m
Changeset: 4e88bf592830
Author: pchelko
Date: 2013-09-16 19:44 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/4e88bf592830
8024485: For 5-1 step: if input something into the 'File:' and 'Dir:', the dir output isn't empty in the output window after showing and canceling the file dialog
Reviewed-by: serb, anthony
! src/windows/classes/sun/awt/windows/WFileDialogPeer.java
Changeset: 8530456e0091
Author: omajid
Date: 2013-09-16 15:43 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/8530456e0091
8024863: X11: Support GNOME Shell as mutter
Reviewed-by: anthony
! src/solaris/classes/sun/awt/X11/XWM.java
Changeset: 4899f6734a14
Author: ant
Date: 2013-09-18 12:25 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/4899f6734a14
8024839: [Unified Swing/Fx threading] don't schedule an event dispatching from the event dispatch thread
Reviewed-by: anthony, pchelko
! src/share/classes/java/awt/EventQueue.java
Changeset: cc7a15f4c735
Author: mcherkas
Date: 2013-09-18 15:12 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/cc7a15f4c735
8016746: Test javax/swing/JTable/7068740/bug7068740.java fails
Reviewed-by: serb, alexsch
! test/javax/swing/JTable/7068740/bug7068740.java
Changeset: 2c240454c192
Author: leonidr
Date: 2013-09-18 18:36 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/2c240454c192
7188071: closed/java/awt/TrayIcon/TrayIconSecurity/GrantedTrayIconTest fails
Reviewed-by: anthony, serb
! src/solaris/classes/sun/awt/X11/XTrayIconPeer.java
Changeset: 20b1135647fa
Author: lana
Date: 2013-09-18 16:01 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/20b1135647fa
Merge
! src/share/classes/java/awt/Toolkit.java
- src/share/classes/java/util/stream/CloseableStream.java
- src/share/classes/java/util/stream/DelegatingStream.java
! src/share/classes/sun/swing/SwingUtilities2.java
! src/windows/native/sun/windows/awt_PrintControl.cpp
- test/java/util/Collection/ListDefaults.java
- test/java/util/Map/CheckRandomHashSeed.java
- test/java/util/Map/TreeBinSplitBackToEntries.java
- test/java/util/concurrent/ConcurrentHashMap/toArray.java
- test/sun/tools/jconsole/ImmutableResourceTest.java
- test/sun/tools/jconsole/ImmutableResourceTest.sh
Changeset: e292d504ad68
Author: leonidr
Date: 2013-09-19 22:33 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/e292d504ad68
7144065: [macosx] Orphaned Choice popup window
Reviewed-by: anthony, serb
Contributed-by: alexander.potochkin at oracle.com
! src/macosx/classes/sun/lwawt/LWChoicePeer.java
Changeset: 602e5d0141d3
Author: leonidr
Date: 2013-09-19 23:46 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/602e5d0141d3
7129133: [macosx] Accelerators are displayed as Meta instead of the Command symbol
Reviewed-by: anthony, serb
! makefiles/GensrcProperties.gmk
+ src/macosx/classes/sun/awt/resources/awtosx.properties
! src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java
! src/share/classes/java/awt/Toolkit.java
! src/share/classes/sun/awt/AWTAccessor.java
+ test/java/awt/Toolkit/ToolkitPropertyTest/bug7129133.java
Changeset: c04e55e17066
Author: kshefov
Date: 2013-09-20 17:07 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/c04e55e17066
7124314: [TEST_BUG] [macosx] Aqua LAF: JTree doesn't select element by keyboards left and right keys
Reviewed-by: alexsch, serb
Contributed-by: vera.akulova at oracle.com
+ test/javax/swing/JTree/4927934/bug4927934.java
Changeset: 6c1f9468f3de
Author: kshefov
Date: 2013-09-20 17:16 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/6c1f9468f3de
8017180: [macosx] [TEST_BUG] alt-key doesn't work on macos for menu
Reviewed-by: alexsch, serb
Contributed-by: vera.akulova at oracle.com
+ test/java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java
+ test/javax/swing/JMenuItem/4171437/bug4171437.java
+ test/javax/swing/JPopupMenu/4458079/bug4458079.java
Changeset: f139aef966fd
Author: kshefov
Date: 2013-09-20 17:35 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/f139aef966fd
7124232: [TEST_BUG] [macosx] JSplitPane has wrong divider location
Reviewed-by: alexsch, serb
Contributed-by: vera.akulova at oracle.com
+ test/javax/swing/JSplitPane/4816114/bug4816114.java
Changeset: abebe03818f6
Author: malenkov
Date: 2013-09-20 18:56 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/abebe03818f6
7024235: Nimbus L&F: wrong "packing" of a frame containing tabbed pane
Reviewed-by: alexsch
! src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ test/javax/swing/JTabbedPane/7024235/Test7024235.java
Changeset: 2ac59698de38
Author: kshefov
Date: 2013-09-23 16:14 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/2ac59698de38
8015600: [TEST_BUG] [macosx] Test closed/javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java fails since JDK 8 b75 on MacOSX
Reviewed-by: alexsch, serb
+ test/javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java
Changeset: eac52fe3990c
Author: serb
Date: 2013-09-23 16:17 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/eac52fe3990c
8005255: [macosx] Cleanup warnings in sun.lwawt
Reviewed-by: alexsch, anthony
! make/sun/lwawt/FILES_export_macosx.gmk
! src/macosx/classes/sun/lwawt/LWButtonPeer.java
! src/macosx/classes/sun/lwawt/LWCanvasPeer.java
! src/macosx/classes/sun/lwawt/LWCheckboxPeer.java
! src/macosx/classes/sun/lwawt/LWChoicePeer.java
! src/macosx/classes/sun/lwawt/LWComponentPeer.java
! src/macosx/classes/sun/lwawt/LWContainerPeer.java
! src/macosx/classes/sun/lwawt/LWCursorManager.java
! src/macosx/classes/sun/lwawt/LWLabelPeer.java
! src/macosx/classes/sun/lwawt/LWListPeer.java
! src/macosx/classes/sun/lwawt/LWMouseInfoPeer.java
! src/macosx/classes/sun/lwawt/LWPanelPeer.java
! src/macosx/classes/sun/lwawt/LWRepaintArea.java
! src/macosx/classes/sun/lwawt/LWScrollBarPeer.java
! src/macosx/classes/sun/lwawt/LWScrollPanePeer.java
! src/macosx/classes/sun/lwawt/LWTextAreaPeer.java
! src/macosx/classes/sun/lwawt/LWTextComponentPeer.java
! src/macosx/classes/sun/lwawt/LWTextFieldPeer.java
! src/macosx/classes/sun/lwawt/LWToolkit.java
! src/macosx/classes/sun/lwawt/LWWindowPeer.java
- src/macosx/classes/sun/lwawt/SelectionClearListener.java
Changeset: 2684fd4e9f3b
Author: serb
Date: 2013-09-23 17:55 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/2684fd4e9f3b
7172833: For default java.awt.Toolkit impl methods java.awt.Toolkit.is/setDynamicLayout() are not consistent
Reviewed-by: alexsch, anthony
! src/share/classes/java/awt/Toolkit.java
+ test/java/awt/Toolkit/DynamicLayout/bug7172833.java
Changeset: d73d3a29065c
Author: serb
Date: 2013-09-23 21:24 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/d73d3a29065c
8019282: keyRelesed is reached even though key was NOT released
Reviewed-by: serb, anthony
Contributed-by: alexander.zvegintsev at oracle.com
! make/sun/xawt/mapfile-vers
! makefiles/mapfiles/libawt_xawt/mapfile-vers
! src/solaris/classes/sun/awt/X11/XToolkit.java
! src/solaris/classes/sun/awt/X11/XlibWrapper.java
! src/solaris/native/sun/xawt/XlibWrapper.c
Changeset: 8c0b943a0090
Author: yan
Date: 2013-09-24 12:25 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/8c0b943a0090
8025114: Eliminate doclint errors in java.awt.dnd package javadoc
Reviewed-by: serb, alexsch
! src/share/classes/java/awt/dnd/DragGestureRecognizer.java
! src/share/classes/java/awt/dnd/DragSource.java
! src/share/classes/java/awt/dnd/DragSourceContext.java
! src/share/classes/java/awt/dnd/DragSourceDragEvent.java
! src/share/classes/java/awt/dnd/DragSourceDropEvent.java
! src/share/classes/java/awt/dnd/DragSourceEvent.java
! src/share/classes/java/awt/dnd/DropTarget.java
! src/share/classes/java/awt/dnd/DropTargetDragEvent.java
! src/share/classes/java/awt/dnd/DropTargetDropEvent.java
Changeset: 1303823e89da
Author: yan
Date: 2013-09-24 16:36 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/1303823e89da
8025230: [cleanup] some more javadoc formatting fixes for swing
Reviewed-by: alexsch
! src/share/classes/javax/swing/JPanel.java
! src/share/classes/javax/swing/JPasswordField.java
! src/share/classes/javax/swing/JPopupMenu.java
! src/share/classes/javax/swing/JRadioButton.java
! src/share/classes/javax/swing/JRadioButtonMenuItem.java
! src/share/classes/javax/swing/JRootPane.java
! src/share/classes/javax/swing/JScrollPane.java
! src/share/classes/javax/swing/JSeparator.java
! src/share/classes/javax/swing/JSlider.java
! src/share/classes/javax/swing/JSpinner.java
! src/share/classes/javax/swing/JSplitPane.java
! src/share/classes/javax/swing/JTable.java
! src/share/classes/javax/swing/JTextArea.java
! src/share/classes/javax/swing/JTextField.java
! src/share/classes/javax/swing/JToolBar.java
! src/share/classes/javax/swing/JToolTip.java
! src/share/classes/javax/swing/JTree.java
! src/share/classes/javax/swing/JViewport.java
! src/share/classes/javax/swing/KeyStroke.java
! src/share/classes/javax/swing/OverlayLayout.java
! src/share/classes/javax/swing/ProgressMonitor.java
! src/share/classes/javax/swing/SizeRequirements.java
! src/share/classes/javax/swing/SizeSequence.java
Changeset: d580e0bc85d9
Author: yan
Date: 2013-09-24 17:04 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/d580e0bc85d9
8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
Reviewed-by: alexsch
! src/share/classes/javax/swing/JLayer.java
! src/share/classes/javax/swing/RowFilter.java
! src/share/classes/javax/swing/plaf/TextUI.java
! src/share/classes/javax/swing/plaf/basic/BasicTextUI.java
! src/share/classes/javax/swing/text/AttributeSet.java
! src/share/classes/javax/swing/text/BadLocationException.java
! src/share/classes/javax/swing/text/BoxView.java
! src/share/classes/javax/swing/text/Caret.java
! src/share/classes/javax/swing/text/ComponentView.java
! src/share/classes/javax/swing/text/CompositeView.java
! src/share/classes/javax/swing/text/DefaultEditorKit.java
! src/share/classes/javax/swing/text/DefaultHighlighter.java
! src/share/classes/javax/swing/text/DefaultStyledDocument.java
! src/share/classes/javax/swing/text/Document.java
! src/share/classes/javax/swing/text/DocumentFilter.java
! src/share/classes/javax/swing/text/EditorKit.java
! src/share/classes/javax/swing/text/FieldView.java
! src/share/classes/javax/swing/text/FlowView.java
! src/share/classes/javax/swing/text/GapContent.java
! src/share/classes/javax/swing/text/GlyphView.java
! src/share/classes/javax/swing/text/Highlighter.java
! src/share/classes/javax/swing/text/IconView.java
! src/share/classes/javax/swing/text/NavigationFilter.java
! src/share/classes/javax/swing/text/ParagraphView.java
! src/share/classes/javax/swing/text/PasswordView.java
! src/share/classes/javax/swing/text/PlainDocument.java
! src/share/classes/javax/swing/text/PlainView.java
! src/share/classes/javax/swing/text/Position.java
! src/share/classes/javax/swing/text/StringContent.java
! src/share/classes/javax/swing/text/StyleContext.java
! src/share/classes/javax/swing/text/StyledDocument.java
! src/share/classes/javax/swing/text/StyledEditorKit.java
! src/share/classes/javax/swing/text/TabExpander.java
! src/share/classes/javax/swing/text/TabableView.java
! src/share/classes/javax/swing/text/TableView.java
! src/share/classes/javax/swing/text/Utilities.java
! src/share/classes/javax/swing/text/View.java
! src/share/classes/javax/swing/text/WrappedPlainView.java
! src/share/classes/javax/swing/text/ZoneView.java
! src/share/classes/javax/swing/text/html/BlockView.java
! src/share/classes/javax/swing/text/html/CSS.java
! src/share/classes/javax/swing/text/html/FormView.java
! src/share/classes/javax/swing/text/html/HTMLDocument.java
Changeset: 58178aec7e81
Author: kshefov
Date: 2013-09-24 17:46 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/58178aec7e81
7124320: [TEST_BUG] [macosx] JComboBox doesn't change selection on mouse over
Reviewed-by: alexsch, serb
Contributed-by: vera.akulova at oracle.com
+ test/javax/swing/JComboBox/6236162/bug6236162.java
Changeset: f500844c2253
Author: kshefov
Date: 2013-09-24 17:56 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/f500844c2253
7133154: [TEST_BUG] [macosx] closed/javax/swing/JInternalFrame/4251301/bug4251301.java fails on MacOS
Reviewed-by: alexsch, serb
Contributed-by: vera.akulova at oracle.com
+ test/javax/swing/JInternalFrame/4251301/bug4251301.java
Changeset: 967557d5b90a
Author: kshefov
Date: 2013-09-24 18:13 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/967557d5b90a
7133146: [macosx] closed/javax/swing/JInternalFrame/4193219/IconCoord fails on MacOS
Reviewed-by: alexsch, serb
Contributed-by: vera.akulova at oracle.com
+ test/javax/swing/JInternalFrame/4193219/IconCoord.java
Changeset: 3982dd1210ba
Author: kshefov
Date: 2013-09-24 18:20 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/3982dd1210ba
8015599: [TEST_BUG] [macosx] Test closed/javax/swing/Popup/TaskbarPositionTest.java fails since JDK 8 b75 on MacOSX
Reviewed-by: alexsch, serb
+ test/javax/swing/Popup/TaskbarPositionTest.java
Changeset: 2ed1584d62c5
Author: leonidr
Date: 2013-09-24 18:24 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/2ed1584d62c5
8022555: [macosx] AppleScriptEngine.jar MUST call java.awt.Toolkit.getDefaultToolkit() lazily
Reviewed-by: anthony, serb
! src/macosx/classes/apple/applescript/AppleScriptEngineFactory.java
Changeset: a284da808700
Author: malenkov
Date: 2013-09-25 14:06 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/a284da808700
8023310: Thread contention in the method Beans.IsDesignTime()
Reviewed-by: art, sfriberg
! src/share/classes/java/beans/ThreadGroupContext.java
! src/share/classes/java/beans/WeakIdentityMap.java
Changeset: 10e66428ddb0
Author: alexsch
Date: 2013-09-25 16:17 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/10e66428ddb0
8007155: [macosx] Disabled panel takes mouse input in JLayeredPane
Reviewed-by: serb, anthony
! src/macosx/classes/sun/lwawt/LWCursorManager.java
! src/share/classes/java/awt/Container.java
! src/share/classes/sun/awt/AWTAccessor.java
! src/share/classes/sun/awt/GlobalCursorManager.java
! src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java
! src/windows/classes/sun/awt/windows/WGlobalCursorManager.java
! src/windows/native/sun/windows/awt_Container.cpp
! src/windows/native/sun/windows/awt_Container.h
! src/windows/native/sun/windows/awt_Cursor.cpp
+ test/java/awt/Cursor/CursorOverlappedPanelsTest/CursorOverlappedPanelsTest.html
+ test/java/awt/Cursor/CursorOverlappedPanelsTest/CursorOverlappedPanelsTest.java
Changeset: 7cad8ef127a9
Author: pchelko
Date: 2013-09-25 16:12 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/7cad8ef127a9
8024987: Copy/paste regression since JDK8 b86
Reviewed-by: serb, anthony
! src/share/classes/java/awt/datatransfer/SystemFlavorMap.java
Changeset: cff4f079fa3f
Author: kshefov
Date: 2013-09-25 16:52 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/cff4f079fa3f
8004032: [TEST_BUG] [macosx] There is no effect when double clicking on the Icon, after right clicking on the Icon and the Icon disappear
Reviewed-by: anthony, serb
+ test/java/awt/TrayIcon/ShowAfterDisposeTest/ShowAfterDisposeTest.html
+ test/java/awt/TrayIcon/ShowAfterDisposeTest/ShowAfterDisposeTest.java
Changeset: 681ac9f9c452
Author: alexsch
Date: 2013-09-25 17:08 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/681ac9f9c452
8025070: [javadoc] fix some javadoc errors in javax/swing/plaf/synth
Reviewed-by: serb, alexsch
Contributed-by: Alexander Stepanov
! src/share/classes/javax/swing/plaf/synth/SynthButtonUI.java
! src/share/classes/javax/swing/plaf/synth/SynthCheckBoxMenuItemUI.java
! src/share/classes/javax/swing/plaf/synth/SynthCheckBoxUI.java
! src/share/classes/javax/swing/plaf/synth/SynthColorChooserUI.java
! src/share/classes/javax/swing/plaf/synth/SynthComboBoxUI.java
! src/share/classes/javax/swing/plaf/synth/SynthDesktopIconUI.java
! src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java
! src/share/classes/javax/swing/plaf/synth/SynthEditorPaneUI.java
! src/share/classes/javax/swing/plaf/synth/SynthFormattedTextFieldUI.java
! src/share/classes/javax/swing/plaf/synth/SynthInternalFrameUI.java
! src/share/classes/javax/swing/plaf/synth/SynthLabelUI.java
! src/share/classes/javax/swing/plaf/synth/SynthListUI.java
! src/share/classes/javax/swing/plaf/synth/SynthMenuBarUI.java
! src/share/classes/javax/swing/plaf/synth/SynthMenuItemUI.java
! src/share/classes/javax/swing/plaf/synth/SynthMenuLayout.java
! src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java
! src/share/classes/javax/swing/plaf/synth/SynthOptionPaneUI.java
! src/share/classes/javax/swing/plaf/synth/SynthPainter.java
! src/share/classes/javax/swing/plaf/synth/SynthPanelUI.java
! src/share/classes/javax/swing/plaf/synth/SynthPasswordFieldUI.java
! src/share/classes/javax/swing/plaf/synth/SynthPopupMenuUI.java
! src/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java
! src/share/classes/javax/swing/plaf/synth/SynthRadioButtonMenuItemUI.java
! src/share/classes/javax/swing/plaf/synth/SynthRadioButtonUI.java
! src/share/classes/javax/swing/plaf/synth/SynthRootPaneUI.java
! src/share/classes/javax/swing/plaf/synth/SynthScrollBarUI.java
! src/share/classes/javax/swing/plaf/synth/SynthScrollPaneUI.java
! src/share/classes/javax/swing/plaf/synth/SynthSeparatorUI.java
! src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java
! src/share/classes/javax/swing/plaf/synth/SynthSpinnerUI.java
! src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java
! src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java
! src/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java
! src/share/classes/javax/swing/plaf/synth/SynthTableUI.java
! src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java
! src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java
! src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java
! src/share/classes/javax/swing/plaf/synth/SynthToggleButtonUI.java
! src/share/classes/javax/swing/plaf/synth/SynthToolBarUI.java
! src/share/classes/javax/swing/plaf/synth/SynthToolTipUI.java
! src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java
! src/share/classes/javax/swing/plaf/synth/SynthViewportUI.java
Changeset: 2f8803ebd98c
Author: yan
Date: 2013-09-25 17:35 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/2f8803ebd98c
8025085: [javadoc] some errors in javax/swing
Reviewed-by: alexsch
Contributed-by: Dmitry Zinkevich
! src/share/classes/javax/swing/JButton.java
! src/share/classes/javax/swing/JCheckBox.java
! src/share/classes/javax/swing/JCheckBoxMenuItem.java
! src/share/classes/javax/swing/JColorChooser.java
! src/share/classes/javax/swing/JComboBox.java
! src/share/classes/javax/swing/JComponent.java
! src/share/classes/javax/swing/JDesktopPane.java
! src/share/classes/javax/swing/JMenuItem.java
! src/share/classes/javax/swing/JToggleButton.java
! src/share/classes/javax/swing/SpinnerDateModel.java
! src/share/classes/javax/swing/SpinnerListModel.java
! src/share/classes/javax/swing/SpinnerNumberModel.java
! src/share/classes/javax/swing/SpringLayout.java
! src/share/classes/javax/swing/TransferHandler.java
! src/share/classes/javax/swing/UIDefaults.java
! src/share/classes/javax/swing/UnsupportedLookAndFeelException.java
! src/share/classes/javax/swing/ViewportLayout.java
! src/share/classes/javax/swing/plaf/LayerUI.java
! src/share/classes/javax/swing/plaf/basic/BasicBorders.java
! src/share/classes/javax/swing/plaf/basic/BasicDesktopIconUI.java
! src/share/classes/javax/swing/plaf/basic/BasicDesktopPaneUI.java
! src/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java
! src/share/classes/javax/swing/plaf/basic/BasicGraphicsUtils.java
! src/share/classes/javax/swing/plaf/basic/BasicIconFactory.java
! src/share/classes/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
! src/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java
! src/share/classes/javax/swing/plaf/basic/BasicLabelUI.java
! src/share/classes/javax/swing/plaf/basic/BasicListUI.java
! src/share/classes/javax/swing/plaf/basic/BasicMenuBarUI.java
! src/share/classes/javax/swing/plaf/basic/BasicMenuUI.java
! src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java
! src/share/classes/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java
! src/share/classes/javax/swing/plaf/basic/BasicPopupMenuUI.java
! src/share/classes/javax/swing/plaf/basic/BasicProgressBarUI.java
! src/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java
! src/share/classes/javax/swing/plaf/basic/BasicSeparatorUI.java
! src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java
! src/share/classes/javax/swing/plaf/basic/BasicSplitPaneUI.java
! src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java
! src/share/classes/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java
! src/share/classes/javax/swing/plaf/basic/BasicToolBarUI.java
! src/share/classes/javax/swing/plaf/basic/BasicToolTipUI.java
! src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java
! src/share/classes/javax/swing/plaf/basic/DefaultMenuLayout.java
! src/share/classes/javax/swing/plaf/metal/MetalBorders.java
! src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java
! src/share/classes/javax/swing/plaf/metal/MetalLabelUI.java
! src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java
! src/share/classes/javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.java
! src/share/classes/javax/swing/plaf/metal/MetalScrollPaneUI.java
! src/share/classes/javax/swing/plaf/metal/MetalSeparatorUI.java
! src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java
! src/share/classes/javax/swing/plaf/metal/MetalTabbedPaneUI.java
! src/share/classes/javax/swing/plaf/metal/MetalToolTipUI.java
! src/share/classes/javax/swing/plaf/nimbus/AbstractRegionPainter.java
! src/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java
! src/share/classes/javax/swing/plaf/nimbus/NimbusStyle.java
! src/share/classes/javax/swing/plaf/synth/Region.java
! src/share/classes/javax/swing/text/html/HTMLEditorKit.java
! src/share/classes/javax/swing/text/html/ImageView.java
! src/share/classes/javax/swing/text/html/InlineView.java
! src/share/classes/javax/swing/text/html/StyleSheet.java
! src/share/classes/javax/swing/text/html/parser/ContentModel.java
! src/share/classes/javax/swing/text/html/parser/DocumentParser.java
! src/share/classes/javax/swing/text/html/parser/Parser.java
! src/share/classes/javax/swing/tree/AbstractLayoutCache.java
! src/share/classes/javax/swing/tree/DefaultTreeCellEditor.java
! src/share/classes/javax/swing/tree/DefaultTreeCellRenderer.java
! src/share/classes/javax/swing/tree/DefaultTreeModel.java
! src/share/classes/javax/swing/tree/TreeCellRenderer.java
! src/share/classes/javax/swing/tree/TreeModel.java
! src/share/classes/javax/swing/undo/UndoManager.java
Changeset: c40ed21f2939
Author: alexsch
Date: 2013-09-25 17:42 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/c40ed21f2939
7083457: Incomplete specification for javax/swing/text/DefaultCaret.html#setVisible(boolean)
Reviewed-by: malenkov, serb
! src/share/classes/javax/swing/text/DefaultCaret.java
+ test/javax/swing/text/DefaultCaret/7083457/bug7083457.java
Changeset: 09fb25645717
Author: ptbrunet
Date: 2013-09-26 10:48 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/09fb25645717
8025160: Recent Java Accessibility Bridge push has make failures
Reviewed-by: tbell, erikj
! make/bridge/AccessBridgeJava/Makefile
! makefiles/CreateJars.gmk
! makefiles/GensrcMisc.gmk
Changeset: 0270e9b0891b
Author: yan
Date: 2013-09-26 16:10 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/0270e9b0891b
8025218: [javadoc] some errors in java/awt classes
Reviewed-by: yan
Contributed-by: Dmitry Zinkevich
! src/share/classes/java/awt/AWTKeyStroke.java
! src/share/classes/java/awt/Component.java
! src/share/classes/java/awt/DefaultKeyboardFocusManager.java
! src/share/classes/java/awt/Dialog.java
! src/share/classes/java/awt/Event.java
! src/share/classes/java/awt/Frame.java
! src/share/classes/java/awt/GridBagConstraints.java
! src/share/classes/java/awt/GridBagLayout.java
! src/share/classes/java/awt/GridLayout.java
! src/share/classes/java/awt/KeyboardFocusManager.java
! src/share/classes/java/awt/MenuBar.java
! src/share/classes/java/awt/ScrollPane.java
! src/share/classes/java/awt/ScrollPaneAdjustable.java
! src/share/classes/java/awt/SystemTray.java
! src/share/classes/java/awt/TextComponent.java
! src/share/classes/java/awt/TextField.java
! src/share/classes/java/awt/Window.java
! src/share/classes/java/awt/datatransfer/DataFlavor.java
! src/share/classes/java/awt/event/MouseMotionListener.java
Changeset: 3b22833f2695
Author: lana
Date: 2013-09-26 17:18 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/3b22833f2695
Merge
- src/macosx/classes/sun/lwawt/SelectionClearListener.java
- src/macosx/classes/sun/lwawt/macosx/CMouseInfoPeer.java
Changeset: 8708569b5524
Author: sjiang
Date: 2013-09-18 08:51 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/8708569b5524
8023954: MBean*Info.equals: throw NPE
Reviewed-by: dfuchs, dholmes
! src/share/classes/javax/management/MBeanAttributeInfo.java
! src/share/classes/javax/management/MBeanConstructorInfo.java
! src/share/classes/javax/management/MBeanFeatureInfo.java
! src/share/classes/javax/management/MBeanNotificationInfo.java
! src/share/classes/javax/management/MBeanOperationInfo.java
! src/share/classes/javax/management/MBeanParameterInfo.java
+ test/javax/management/MBeanInfo/MBeanInfoEqualsNPETest.java
Changeset: ee8b292ee568
Author: weijun
Date: 2013-09-18 18:22 +0800
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/ee8b292ee568
8012615: Realm.getRealmsList returns realms list in wrong
Reviewed-by: valeriep, xuelei
! src/share/classes/sun/security/krb5/Config.java
! src/share/classes/sun/security/krb5/Realm.java
! src/share/classes/sun/security/krb5/internal/CredentialsUtil.java
! test/sun/security/krb5/ParseCAPaths.java
! test/sun/security/krb5/krb5-capaths.conf
Changeset: e92635d6834c
Author: alanb
Date: 2013-09-18 14:10 +0100
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/e92635d6834c
8024883: (se) SelectableChannel.register throws NPE if fd >= 64k (lnx)
Reviewed-by: alanb, coffeys
Contributed-by: nmaurer at redhat.com, alan.bateman at oracle.com
! src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java
! src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java
! src/solaris/classes/sun/nio/ch/EventPortWrapper.java
! test/java/nio/channels/Selector/LotsOfChannels.java
! test/java/nio/channels/Selector/SelectorLimit.java
Changeset: 07d73060e0da
Author: weijun
Date: 2013-09-18 21:37 +0800
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/07d73060e0da
8011402: Move blacklisting certificate logic from hard code to data
Reviewed-by: erikj, mullan
! make/java/security/Makefile
! makefiles/CopyFiles.gmk
! src/share/classes/java/security/cert/Certificate.java
! src/share/classes/sun/security/util/UntrustedCertificates.java
! src/share/classes/sun/security/x509/X509CertImpl.java
+ src/share/lib/security/BlacklistedCertsConverter.java
+ src/share/lib/security/blacklisted.certs
+ src/share/lib/security/blacklisted.certs.pem
+ test/lib/security/CheckBlacklistedCerts.java
Changeset: b3a506a30fda
Author: ewang
Date: 2013-09-18 15:13 +0100
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/b3a506a30fda
8015762: TEST_BUG: java/nio/channels/DatagramChannel/AdaptDatagramSocket.java failing intermittently [win]
Reviewed-by: chegar, alanb
! test/java/nio/channels/DatagramChannel/AdaptDatagramSocket.java
Changeset: 22e9f0067b5a
Author: kizune
Date: 2013-09-19 17:04 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/22e9f0067b5a
8017248: Compiler Diacritics Issue
Reviewed-by: naoto
! src/share/classes/sun/launcher/LauncherHelper.java
+ test/tools/launcher/8017248/ClassA??.java
+ test/tools/launcher/8017248/test.sh
Changeset: 7557062d2dd2
Author: plevart
Date: 2013-09-19 16:14 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/7557062d2dd2
8011940: java.lang.Class.getAnnotations() always enters synchronized method
Reviewed-by: jfranck, chegar, psandoz, shade
! src/share/classes/java/lang/Class.java
+ test/java/lang/annotation/AnnotationsInheritanceOrderRedefinitionTest.java
Changeset: 278873b2b3f8
Author: sherman
Date: 2013-09-19 10:06 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/278873b2b3f8
8023113: tools/jar/ChangeDir.java fails if /tmp/a exists
Summary: updated the test case
Reviewed-by: alanb
! test/tools/jar/ChangeDir.java
Changeset: f36714707c38
Author: psandoz
Date: 2013-09-18 10:49 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/f36714707c38
8025002: "".codePoints().sorted().iterator().hasNext() causes NegativeArraySizeException
Reviewed-by: henryjen, alanb
! src/share/classes/java/lang/CharSequence.java
! test/java/lang/CharSequence/DefaultTest.java
Changeset: 0ef7ddef9de0
Author: psandoz
Date: 2013-09-19 20:41 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/0ef7ddef9de0
8024405: Spliterators.spliterator should support CONCURRENT characteristic
Reviewed-by: martin
! src/share/classes/java/util/Spliterator.java
! src/share/classes/java/util/Spliterators.java
! test/java/util/Spliterator/SpliteratorCharacteristics.java
! test/java/util/Spliterator/SpliteratorTraversingAndSplittingTest.java
Changeset: 58fd427b454d
Author: sla
Date: 2013-09-20 10:14 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/58fd427b454d
8024985: com/sun/jdi/StepTest.java failed since jdk8b107
Reviewed-by: dcubed
! test/com/sun/jdi/ExceptionEvents.java
! test/com/sun/jdi/FilterNoMatch.java
! test/com/sun/jdi/JDIScaffold.java
! test/com/sun/jdi/PopAndStepTest.java
! test/com/sun/jdi/RepStep.java
! test/com/sun/jdi/TestScaffold.java
Changeset: 6a1c70e191d4
Author: sla
Date: 2013-09-20 10:15 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/6a1c70e191d4
8024416: TESTBUG: com/sun/jdi/MethodEntryExitEvents.java: method entry count mismatch
Reviewed-by: dcubed
! test/com/sun/jdi/MethodEntryExitEvents.java
Changeset: afe857b13b62
Author: kizune
Date: 2013-09-20 17:56 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/afe857b13b62
8025076: Fix for JDK-8017248 breaks jprt submission for non-unicode locales
Reviewed-by: naoto, ksrini
- test/tools/launcher/8017248/ClassA??.java
- test/tools/launcher/8017248/test.sh
+ test/tools/launcher/DiacriticTest.java
Changeset: 94cc251d0c45
Author: sla
Date: 2013-09-20 16:40 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/94cc251d0c45
7200277: [parfait] potential buffer overflow in npt/utf.c
Reviewed-by: dsamersoff, dcubed
! src/share/npt/utf.c
Changeset: 7913855ff66c
Author: psandoz
Date: 2013-09-20 11:07 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/7913855ff66c
8024253: ThreadLocal random can use SecureRandom for the initial seed
Reviewed-by: psandoz, chegar, alanb
Contributed-by: Doug Lea , Peter Levart , Guy Steele
! src/share/classes/java/util/SplittableRandom.java
! src/share/classes/java/util/concurrent/ThreadLocalRandom.java
! test/java/util/concurrent/ThreadLocalRandom/ThreadLocalRandomTest.java
Changeset: 2552cd270350
Author: bpb
Date: 2013-09-20 15:12 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/2552cd270350
8024331: j.u.Map.computeIfPresent() default/nondefault implementations don't throw NPE if the remappingFunction is null and the key is absent
Summary: Explicitly check for null remappingFunction parameter.
Reviewed-by: mduigou, forax, psandoz
Contributed-by: Brian Burkhalter
! src/share/classes/java/util/HashMap.java
! src/share/classes/java/util/Map.java
! test/java/util/Map/Defaults.java
Changeset: c30dc8e7744e
Author: psandoz
Date: 2013-09-20 17:11 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/c30dc8e7744e
8024341: j.u.regex.Pattern.splitAsStream() doesn't correspond to split() method if using an example from the spec
Reviewed-by: alanb
! src/share/classes/java/util/regex/Pattern.java
+ test/java/util/regex/PatternStreamTest.java
- test/java/util/regex/PatternTest.java
Changeset: 56d247821694
Author: alanb
Date: 2013-09-23 04:05 +0100
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/56d247821694
8023130: (process) ProcessBuilder#inheritIO does not work on Windows
Reviewed-by: alanb, martin
Contributed-by: ivan.gerasimov at oracle.com
! src/windows/native/java/lang/ProcessImpl_md.c
! test/java/lang/ProcessBuilder/Basic.java
+ test/java/lang/ProcessBuilder/InheritIO/InheritIO.java
+ test/java/lang/ProcessBuilder/InheritIO/InheritIO.sh
Changeset: a3b17b91127d
Author: lana
Date: 2013-09-20 19:15 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/a3b17b91127d
Merge
Changeset: f1b251affc6a
Author: lana
Date: 2013-09-22 20:21 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/f1b251affc6a
Merge
Changeset: b606775fd1a3
Author: stefank
Date: 2013-08-29 11:08 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/b606775fd1a3
8014659: NPG: performance counters for compressed klass space
Reviewed-by: jmasa, sla
Contributed-by: erik.helin at oracle.com
! src/share/classes/sun/tools/jstat/resources/jstat_options
! test/sun/tools/jstat/gcCapacityOutput1.awk
! test/sun/tools/jstat/gcCauseOutput1.awk
! test/sun/tools/jstat/gcMetaCapacityOutput1.awk
! test/sun/tools/jstat/gcOldOutput1.awk
! test/sun/tools/jstat/gcOutput1.awk
! test/sun/tools/jstat/lineCounts1.awk
! test/sun/tools/jstat/lineCounts2.awk
! test/sun/tools/jstat/lineCounts3.awk
! test/sun/tools/jstat/lineCounts4.awk
! test/sun/tools/jstat/timeStamp1.awk
! test/sun/tools/jstatd/jstatGcutilOutput1.awk
Changeset: 76619d71a7c5
Author: dfuchs
Date: 2013-09-25 09:47 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/76619d71a7c5
8025140: TEST_BUG: java/util/logging/Logger/getGlobal tests fail due to timeout
Summary: Arbitrary timeouts in the tests @run lines where too agressive for some configurations. The tests will now run with default timeout.
Reviewed-by: alanb, mchung
! test/java/util/logging/Logger/getGlobal/TestGetGlobal.java
! test/java/util/logging/Logger/getGlobal/TestGetGlobalByName.java
! test/java/util/logging/Logger/getGlobal/TestGetGlobalConcurrent.java
Changeset: 2b928330970a
Author: mfang
Date: 2013-09-24 14:17 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/2b928330970a
8025215: jdk8 l10n resource file translation update 4
Reviewed-by: naoto, yhuang
! src/macosx/classes/com/apple/laf/resources/aqua_ko.properties
! src/share/classes/com/sun/accessibility/internal/resources/accessibility_de.properties
! src/share/classes/com/sun/accessibility/internal/resources/accessibility_es.properties
! src/share/classes/com/sun/accessibility/internal/resources/accessibility_fr.properties
! src/share/classes/com/sun/accessibility/internal/resources/accessibility_it.properties
! src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties
! src/share/classes/com/sun/accessibility/internal/resources/accessibility_sv.properties
! src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_de.properties
! src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ko.properties
+ src/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java
+ src/share/classes/com/sun/java/util/jar/pack/DriverResource_zh_CN.java
! src/share/classes/com/sun/rowset/RowSetResourceBundle_ko.properties
! src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties
! src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_sv.properties
! src/share/classes/sun/applet/resources/MsgAppletViewer_de.java
! src/share/classes/sun/launcher/resources/launcher_de.properties
! src/share/classes/sun/launcher/resources/launcher_es.properties
! src/share/classes/sun/launcher/resources/launcher_fr.properties
! src/share/classes/sun/launcher/resources/launcher_it.properties
! src/share/classes/sun/launcher/resources/launcher_ja.properties
! src/share/classes/sun/launcher/resources/launcher_ko.properties
! src/share/classes/sun/launcher/resources/launcher_pt_BR.properties
! src/share/classes/sun/launcher/resources/launcher_sv.properties
! src/share/classes/sun/launcher/resources/launcher_zh_CN.properties
! src/share/classes/sun/launcher/resources/launcher_zh_TW.properties
! src/share/classes/sun/print/resources/serviceui_de.properties
! src/share/classes/sun/print/resources/serviceui_es.properties
! src/share/classes/sun/print/resources/serviceui_fr.properties
! src/share/classes/sun/print/resources/serviceui_it.properties
! src/share/classes/sun/print/resources/serviceui_pt_BR.properties
! src/share/classes/sun/print/resources/serviceui_sv.properties
! src/share/classes/sun/rmi/registry/resources/rmiregistry_de.properties
! src/share/classes/sun/rmi/server/resources/rmid_ko.properties
! src/share/classes/sun/security/tools/jarsigner/Resources_ja.java
! src/share/classes/sun/security/tools/jarsigner/Resources_zh_CN.java
! src/share/classes/sun/security/tools/keytool/Resources_de.java
! src/share/classes/sun/security/tools/keytool/Resources_es.java
! src/share/classes/sun/security/tools/keytool/Resources_fr.java
! src/share/classes/sun/security/tools/keytool/Resources_it.java
! src/share/classes/sun/security/tools/keytool/Resources_ja.java
! src/share/classes/sun/security/tools/keytool/Resources_ko.java
! src/share/classes/sun/security/tools/keytool/Resources_pt_BR.java
! src/share/classes/sun/security/tools/keytool/Resources_sv.java
! src/share/classes/sun/security/tools/keytool/Resources_zh_CN.java
! src/share/classes/sun/security/tools/keytool/Resources_zh_TW.java
! src/share/classes/sun/security/tools/policytool/Resources_de.java
! src/share/classes/sun/security/tools/policytool/Resources_es.java
! src/share/classes/sun/security/tools/policytool/Resources_fr.java
! src/share/classes/sun/security/tools/policytool/Resources_it.java
! src/share/classes/sun/security/tools/policytool/Resources_ja.java
! src/share/classes/sun/security/tools/policytool/Resources_ko.java
! src/share/classes/sun/security/tools/policytool/Resources_pt_BR.java
! src/share/classes/sun/security/tools/policytool/Resources_sv.java
! src/share/classes/sun/security/tools/policytool/Resources_zh_CN.java
! src/share/classes/sun/security/tools/policytool/Resources_zh_TW.java
! src/share/classes/sun/security/util/Resources_fr.java
! src/share/classes/sun/tools/jar/resources/jar_de.properties
! src/share/classes/sun/tools/jar/resources/jar_es.properties
! src/share/classes/sun/tools/jar/resources/jar_fr.properties
! src/share/classes/sun/tools/jar/resources/jar_it.properties
! src/share/classes/sun/tools/jar/resources/jar_ja.properties
! src/share/classes/sun/tools/jar/resources/jar_ko.properties
! src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties
! src/share/classes/sun/tools/jar/resources/jar_sv.properties
! src/share/classes/sun/tools/jar/resources/jar_zh_CN.properties
! src/share/classes/sun/tools/jar/resources/jar_zh_TW.properties
! src/share/classes/sun/tools/jconsole/resources/messages_ja.properties
! src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties
Changeset: 9765801f209f
Author: mfang
Date: 2013-09-24 14:34 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/9765801f209f
Merge
- test/java/util/regex/PatternTest.java
Changeset: d16a53d1762f
Author: mfang
Date: 2013-09-25 07:36 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/d16a53d1762f
Merge
Changeset: 8f27030686a6
Author: bchristi
Date: 2013-09-26 11:13 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/8f27030686a6
8025173: HashMap.put() replacing an existing key can trigger a resize()
Summary: Ensure that HashMap is not resized if we're just replacing a value
Reviewed-by: alanb, martin
! src/share/classes/java/util/HashMap.java
+ test/java/util/HashMap/ReplaceExisting.java
Changeset: 8edd604bf960
Author: lana
Date: 2013-09-26 17:21 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/8edd604bf960
Merge
- test/java/util/regex/PatternTest.java
Changeset: 9684ed81cd21
Author: ksrini
Date: 2013-09-27 16:29 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/9684ed81cd21
8020552: [launcher] changes to support removal of Solaris 32-bit distribution
8023495: [infra] create 64-bit solaris bits with symlinks
Reviewed-by: ihse, tbell, dholmes, darcy, alanb, erikj, sla, martin
! makefiles/Images.gmk
! src/share/classes/com/sun/tools/jdi/SunCommandLineLauncher.java
! src/solaris/bin/java_md_solinux.c
! test/com/sun/jdi/BadHandshakeTest.java
! test/com/sun/jdi/DoubleAgentTest.java
! test/com/sun/jdi/ExclusiveBind.java
! test/com/sun/jdi/PrivateTransportTest.sh
! test/com/sun/jdi/RunToExit.java
- test/com/sun/jdi/Solaris32AndSolaris64Test.sh
! test/com/sun/jdi/connect/spi/SimpleLaunchingConnector.java
! test/demo/jvmti/DemoRun.java
! test/java/nio/channels/spi/SelectorProvider/inheritedChannel/Makefile
+ test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-amd64/libLauncher.so
- test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-i586/libLauncher.so
- test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-sparc/libLauncher.so
! test/java/nio/channels/spi/SelectorProvider/inheritedChannel/run_tests.sh
! test/sun/security/tools/keytool/autotest.sh
! test/sun/tools/jhat/HatRun.java
! test/tools/launcher/6842838/Test6842838.sh
! test/tools/launcher/ChangeDataModel.java
! test/tools/launcher/ExecutionEnvironment.java
! test/tools/launcher/FXLauncherTest.java
! test/tools/launcher/RunpathTest.java
! test/tools/launcher/Test7029048.java
! test/tools/launcher/TestHelper.java
Changeset: 2c7c7b813eb3
Author: katleman
Date: 2013-10-01 12:45 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/2c7c7b813eb3
Merge
- test/com/sun/jdi/Solaris32AndSolaris64Test.sh
- test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-i586/libLauncher.so
- test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-sparc/libLauncher.so
Changeset: dd43ccb3bac9
Author: ihse
Date: 2013-10-01 11:08 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/dd43ccb3bac9
8019219: Fix typo in jdk/makefiles "default" targets
Reviewed-by: erikj
! makefiles/CompileLaunchers.gmk
! makefiles/CompileNativeLibraries.gmk
Changeset: 54e099776f08
Author: erikj
Date: 2013-10-02 15:08 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/54e099776f08
Merge
Changeset: 9f57d2774603
Author: katleman
Date: 2013-10-02 13:26 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/9f57d2774603
Added tag jdk8-b110 for changeset 54e099776f08
! .hgtags
From john.coomes at oracle.com Thu Oct 3 12:05:11 2013
From: john.coomes at oracle.com (john.coomes at oracle.com)
Date: Thu, 03 Oct 2013 19:05:11 +0000
Subject: hg: hsx/hotspot-comp/langtools: 35 new changesets
Message-ID: <20131003190729.CC19C62D1E@hg.openjdk.java.net>
Changeset: fdfbc5f0c4ed
Author: jjg
Date: 2013-09-17 14:17 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/fdfbc5f0c4ed
8024538: -Xdoclint + -Xprefer:source + incremental compilation == FAIL
Reviewed-by: darcy
! src/share/classes/com/sun/tools/doclint/DocLint.java
! src/share/classes/com/sun/tools/javac/comp/Enter.java
+ test/tools/javac/doclint/implicitSource/ImplicitSourceTest.java
+ test/tools/javac/doclint/implicitSource/Other.java
Changeset: ac6ec071c2b2
Author: alundblad
Date: 2013-09-18 14:39 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/ac6ec071c2b2
8024127: javac, Code_attribute.exception_table_langth should be Code_attribute.exception_table_length
Summary: exception_table_langth renamed to exception_table_length
Reviewed-by: jfranck, jjg
! src/share/classes/com/sun/tools/classfile/Code_attribute.java
! src/share/classes/com/sun/tools/javap/CodeWriter.java
! test/tools/javac/T7093325.java
! test/tools/javac/T8024039/NoDeadCodeGenerationOnTrySmtTest.java
! test/tools/javac/multicatch/Pos05.java
Changeset: a2a5ad0853ed
Author: bpatel
Date: 2013-09-18 17:13 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/a2a5ad0853ed
8015249: javadoc fails to document static final fields in annotation types
Reviewed-by: jjg
+ src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeFieldWriterImpl.java
! src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
! src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
! src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
! src/share/classes/com/sun/tools/doclets/formats/html/WriterFactoryImpl.java
! src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlConstants.java
+ src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeFieldWriter.java
! src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeRequiredMemberWriter.java
! src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java
! src/share/classes/com/sun/tools/doclets/internal/toolkit/WriterFactory.java
! src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java
+ src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeFieldBuilder.java
! src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java
! src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/BuilderFactory.java
! src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java
! src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
! src/share/classes/com/sun/tools/doclets/internal/toolkit/util/VisibleMemberMap.java
! test/com/sun/javadoc/testAnnotationTypes/TestAnnotationTypes.java
+ test/com/sun/javadoc/testAnnotationTypes/pkg/AnnotationTypeField.java
! test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
Changeset: 8df12c315ea3
Author: bpatel
Date: 2013-09-18 22:47 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/8df12c315ea3
8024096: some javadoc tests may contain false positive results
Reviewed-by: jjg
! test/com/sun/javadoc/lib/JavadocTester.java
! test/com/sun/javadoc/testDocFileDir/TestDocFileDir.java
! test/com/sun/javadoc/testEncoding/EncodeTest.java
! test/com/sun/javadoc/testEncoding/TestEncoding.java
! test/com/sun/javadoc/testMethodTypes/TestMethodTypes.java
! test/com/sun/javadoc/testProfiles/TestProfiles.java
Changeset: 36e342dd57e2
Author: kizune
Date: 2013-09-19 17:05 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/36e342dd57e2
8017248: Compiler Diacritics Issue
Reviewed-by: naoto
! src/share/classes/com/sun/tools/javac/file/RegularFileObject.java
Changeset: 8d1c48de706d
Author: jlahoda
Date: 2013-09-19 17:05 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/8d1c48de706d
8022567: Javac Should Generate Warnings For Raw Array Type
Reviewed-by: jjg
! src/share/classes/com/sun/tools/javac/comp/Check.java
! test/tools/javac/warnings/6747671/T6747671.java
! test/tools/javac/warnings/6747671/T6747671.out
Changeset: 0cfd5baa7154
Author: ohrstrom
Date: 2013-09-19 08:26 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/0cfd5baa7154
8024609: sjavac assertion fails during call to BuildState.collectArtifacts
Reviewed-by: jjg
! src/share/classes/com/sun/tools/sjavac/BuildState.java
! src/share/classes/com/sun/tools/sjavac/Main.java
! src/share/classes/com/sun/tools/sjavac/server/JavacServer.java
Changeset: 2375ce96e80d
Author: vromero
Date: 2013-09-19 20:57 +0100
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/2375ce96e80d
8024437: Inferring the exception thrown: sometimes fails to compile
Reviewed-by: jjg
! src/share/classes/com/sun/tools/javac/code/Flags.java
! src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
+ test/tools/javac/T8024437/ExceptionInferenceFromClassFileTest.java
Changeset: 9a75bdb249a2
Author: jjg
Date: 2013-09-19 19:18 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/9a75bdb249a2
8025110: TreeCopier does not correctly copy LabeledStatementTree
Reviewed-by: jjg
Contributed-by: Werner Dietl
! src/share/classes/com/sun/tools/javac/tree/TreeCopier.java
Changeset: 41599b57d262
Author: jlahoda
Date: 2013-09-20 16:33 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/41599b57d262
8023835: TreeMaker.QualIdent() too leafy
Reviewed-by: jjg
! src/share/classes/com/sun/tools/javac/tree/TreeMaker.java
+ test/tools/javac/tree/MakeQualIdent.java
+ test/tools/javac/tree/ScopeTest.java
Changeset: 571f8ebc2d51
Author: vromero
Date: 2013-09-22 12:53 +0100
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/571f8ebc2d51
8024696: Missing null check in bound method reference capture
Reviewed-by: jjg, briangoetz
! src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
! test/tools/javac/lambda/8023558/T8023558a.java
+ test/tools/javac/lambda/methodReferenceExecution/MethodReferenceNullCheckTest.java
Changeset: 86dd72166267
Author: lana
Date: 2013-09-20 19:16 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/86dd72166267
Merge
Changeset: 20b72bae83d7
Author: lana
Date: 2013-09-22 20:20 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/20b72bae83d7
Merge
Changeset: 1fe358ea75ff
Author: alundblad
Date: 2013-09-23 10:10 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/1fe358ea75ff
8024988: javac, LVT test harness should generate tests .class files in the scratch folder
Summary: Set the CLASS_OUTPUT location to the scratch directory. Changed the argument to checkClassFile accordingly.
Reviewed-by: jjg, vromero
! test/tools/javac/flow/LVTHarness.java
Changeset: 5f915a0c9615
Author: alundblad
Date: 2013-09-23 10:42 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/5f915a0c9615
6386236: Please rename com.sun.tools.javac.util.ListBuffer.lb()
Summary: Static factory method ListBuffer.lb removed. Replaced by constructor calls.
Reviewed-by: jfranck, jjg
! src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java
! src/share/classes/com/sun/tools/javac/code/DeferredLintHandler.java
! src/share/classes/com/sun/tools/javac/code/Printer.java
! src/share/classes/com/sun/tools/javac/code/Symbol.java
! src/share/classes/com/sun/tools/javac/code/Type.java
! src/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java
! src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java
! src/share/classes/com/sun/tools/javac/code/Types.java
! src/share/classes/com/sun/tools/javac/comp/Attr.java
! src/share/classes/com/sun/tools/javac/comp/Check.java
! src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java
! src/share/classes/com/sun/tools/javac/comp/Flow.java
! src/share/classes/com/sun/tools/javac/comp/Infer.java
! src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
! src/share/classes/com/sun/tools/javac/comp/Lower.java
! src/share/classes/com/sun/tools/javac/comp/Resolve.java
! src/share/classes/com/sun/tools/javac/comp/TransTypes.java
! src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
! src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java
! src/share/classes/com/sun/tools/javac/jvm/Code.java
! src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
! src/share/classes/com/sun/tools/javac/model/JavacAnnoConstructs.java
! src/share/classes/com/sun/tools/javac/parser/JavacParser.java
! src/share/classes/com/sun/tools/javac/parser/Tokens.java
! src/share/classes/com/sun/tools/javac/util/GraphUtils.java
! src/share/classes/com/sun/tools/javac/util/List.java
! src/share/classes/com/sun/tools/javac/util/ListBuffer.java
! src/share/classes/com/sun/tools/javac/util/Log.java
! test/tools/javac/cast/intersection/IntersectionTypeCastTest.java
! test/tools/javac/lambda/intersection/IntersectionTargetTypeTest.java
! test/tools/javac/scope/7017664/CompoundScopeTest.java
! test/tools/javac/types/TypeHarness.java
Changeset: 809a50f24d6f
Author: kizune
Date: 2013-09-23 17:27 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/809a50f24d6f
7154966: CRs found to be in Fixed state with no test and no noreg- keyword.
Reviewed-by: ksrini
+ test/tools/javac/T7090499.java
+ test/tools/javac/T7090499.out
+ test/tools/javac/T7120463.java
+ test/tools/javac/T7120463.out
+ test/tools/javac/T7126754.java
Changeset: 64e79d38bd07
Author: kizune
Date: 2013-09-23 18:29 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/64e79d38bd07
4881267: improve diagnostic for "instanceof T" for type parameter T
Reviewed-by: vromero, jjg
! src/share/classes/com/sun/tools/javac/comp/Attr.java
! src/share/classes/com/sun/tools/javac/comp/Check.java
+ test/tools/javac/T4881267.java
+ test/tools/javac/T4881267.out
Changeset: 09301757bb32
Author: emc
Date: 2013-09-23 15:37 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/09301757bb32
6499673: Assertion check for TypeVariable.getUpperBound() fails.
Summary: Fix TypeVariable.getUpperBound to return results as specified
Reviewed-by: jjg
! src/share/classes/com/sun/tools/javac/code/Type.java
! src/share/classes/com/sun/tools/javac/code/Types.java
! src/share/classes/com/sun/tools/javac/model/JavacTypes.java
! test/tools/javac/cast/intersection/model/Model01.java
! test/tools/javac/cast/intersection/model/ModelChecker.java
+ test/tools/javac/processing/model/type/BoundsTest.java
+ test/tools/javac/processing/model/type/IntersectionPropertiesTest.java
Changeset: 96dcb66e6b0a
Author: jjg
Date: 2013-09-24 10:48 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/96dcb66e6b0a
8025050: Doclint doesn't recognize tag
Reviewed-by: bpatel
! src/share/classes/com/sun/tools/doclint/HtmlTag.java
! test/tools/doclint/html/InlineTagsTest.java
Changeset: 503338f16d2b
Author: jjg
Date: 2013-09-24 10:51 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/503338f16d2b
8025246: [doclint] doclint is showing error on anchor already defined when it's not
Reviewed-by: bpatel
! src/share/classes/com/sun/tools/doclint/Checker.java
+ test/tools/doclint/anchorTests/p/Test.java
+ test/tools/doclint/anchorTests/p/Test.javac.out
+ test/tools/doclint/anchorTests/p/Test.out
+ test/tools/doclint/anchorTests/p/package-info.java
+ test/tools/doclint/anchorTests/p/package-info.javac.out
+ test/tools/doclint/anchorTests/p/package-info.out
Changeset: 6a05a713450d
Author: jjg
Date: 2013-09-24 11:46 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/6a05a713450d
8025272: doclint needs to check for valid usage of @value tag
Reviewed-by: bpatel
! src/share/classes/com/sun/tools/doclint/Checker.java
! src/share/classes/com/sun/tools/doclint/resources/doclint.properties
+ test/tools/doclint/ValueTest.java
+ test/tools/doclint/ValueTest.out
Changeset: 3ae62331a56f
Author: jjg
Date: 2013-09-24 13:48 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/3ae62331a56f
8002154: [doclint] doclint should check for issues which are errors in javadoc
Reviewed-by: bpatel
! src/share/classes/com/sun/tools/doclint/Checker.java
! src/share/classes/com/sun/tools/doclint/resources/doclint.properties
! test/tools/doclint/ReferenceTest.java
! test/tools/doclint/ReferenceTest.out
Changeset: 184c0d6698c3
Author: bpatel
Date: 2013-09-24 16:12 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/184c0d6698c3
8016328: Regression : Javadoc i18n regression caused by fix for 8012375
Reviewed-by: jjg
! src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java
! src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
! test/com/sun/javadoc/testHref/TestHref.java
! test/com/sun/javadoc/testJavascript/TestJavascript.java
! test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
! test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
! test/com/sun/javadoc/testUseOption/TestUseOption.java
Changeset: 5043e7056be8
Author: jjg
Date: 2013-09-25 11:07 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/5043e7056be8
8025407: TypeAnnotations does not use Context
Reviewed-by: jfranck
! src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java
! src/share/classes/com/sun/tools/javac/comp/Attr.java
! src/share/classes/com/sun/tools/javac/comp/MemberEnter.java
Changeset: 1332a99572c5
Author: mfang
Date: 2013-09-24 14:20 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/1332a99572c5
8025215: jdk8 l10n resource file translation update 4
Reviewed-by: naoto, yhuang
! src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_ja.properties
! src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_zh_CN.properties
! src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties
! src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties
! src/share/classes/com/sun/tools/doclint/resources/doclint_ja.properties
! src/share/classes/com/sun/tools/doclint/resources/doclint_zh_CN.properties
! src/share/classes/com/sun/tools/javac/resources/compiler_ja.properties
! src/share/classes/com/sun/tools/javac/resources/compiler_zh_CN.properties
! src/share/classes/com/sun/tools/javac/resources/javac_ja.properties
! src/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties
! src/share/classes/com/sun/tools/javadoc/resources/javadoc_ja.properties
! src/share/classes/com/sun/tools/javadoc/resources/javadoc_zh_CN.properties
! src/share/classes/com/sun/tools/javah/resources/l10n_ja.properties
! src/share/classes/com/sun/tools/javah/resources/l10n_zh_CN.properties
! src/share/classes/com/sun/tools/javap/resources/javap_ja.properties
! src/share/classes/com/sun/tools/javap/resources/javap_zh_CN.properties
Changeset: daa3bfb82e58
Author: mfang
Date: 2013-09-24 14:35 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/daa3bfb82e58
Merge
Changeset: 6b702ace3e45
Author: mfang
Date: 2013-09-25 07:36 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/6b702ace3e45
Merge
Changeset: 68292726000e
Author: mfang
Date: 2013-09-25 14:02 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/68292726000e
Merge
Changeset: 3d61984b077c
Author: jjg
Date: 2013-09-25 14:04 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/3d61984b077c
8025412: Add legal header and comments to test/tools/doclint/tidy/util/Main.java
Reviewed-by: bpatel
! test/tools/doclint/tidy/util/Main.java
! test/tools/doclint/tidy/util/tidy.sh
Changeset: 9e884d3ddb0b
Author: bpatel
Date: 2013-09-25 22:26 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/9e884d3ddb0b
8004825: javadoc crash DocletAbortException
Reviewed-by: jjg
! src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties
! src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/ValueTaglet.java
! test/com/sun/javadoc/testValueTag/TestValueTag.java
! test/com/sun/javadoc/testValueTag/pkg1/Class1.java
Changeset: 9235ae08a449
Author: jlahoda
Date: 2013-09-26 20:07 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/9235ae08a449
8025491: Javac regression test tools/javac/T8003967/DetectMutableStaticFields.java failing
Summary: Making HtmlTree.NONENCODING_CHARS final
Reviewed-by: jjg
! src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java
Changeset: 13eba2e322e6
Author: vromero
Date: 2013-09-26 19:06 +0100
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/13eba2e322e6
8025139: javac patch for using bootstrap compiler for debugging is not working properly
Reviewed-by: jjg
! make/netbeans/langtools/build.xml
! make/tools/anttasks/SelectToolTask.java
Changeset: 17653c4c22ec
Author: sogoel
Date: 2013-09-26 15:04 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/17653c4c22ec
8011738: Write test to check for bootstrap attributes for lambda expressions in class file
Reviewed-by: mcimadamore
+ test/tools/javac/lambda/ByteCodeTest.java
Changeset: 41541097533a
Author: lana
Date: 2013-09-26 17:23 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/41541097533a
Merge
Changeset: af6244ba81b6
Author: katleman
Date: 2013-10-02 13:26 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/langtools/rev/af6244ba81b6
Added tag jdk8-b110 for changeset 41541097533a
! .hgtags
From john.coomes at oracle.com Thu Oct 3 12:08:06 2013
From: john.coomes at oracle.com (john.coomes at oracle.com)
Date: Thu, 03 Oct 2013 19:08:06 +0000
Subject: hg: hsx/hotspot-comp/nashorn: 21 new changesets
Message-ID: <20131003190837.A648462D1F@hg.openjdk.java.net>
Changeset: 1971c2d770ae
Author: sundar
Date: 2013-09-18 13:06 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/1971c2d770ae
8024972: for (LeftHandSideExpression in Expression) crashes the compiler
Reviewed-by: lagergren, hannesw
! src/jdk/nashorn/internal/codegen/CodeGenerator.java
+ test/script/basic/JDK-8024972.js
+ test/script/basic/JDK-8024972.js.EXPECTED
Changeset: a62172fe5bae
Author: sundar
Date: 2013-09-18 16:36 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/a62172fe5bae
8024973: Using a different ScriptContext with a CompiledScript results in ScriptException
Reviewed-by: jlaskey, hannesw
! src/jdk/nashorn/api/scripting/NashornScriptEngine.java
! src/jdk/nashorn/internal/runtime/Source.java
! test/script/trusted/JDK-8008305.js
! test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java
Changeset: f954d3f4d192
Author: sundar
Date: 2013-09-19 13:34 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/f954d3f4d192
8025048: true as case label results in ClassCastException
Reviewed-by: lagergren
! src/jdk/nashorn/internal/codegen/Attr.java
+ test/script/basic/JDK-8025048-2.js
+ test/script/basic/JDK-8025048.js
Changeset: 740b1133f1b6
Author: hannesw
Date: 2013-09-19 15:39 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/740b1133f1b6
8023154: compileAllTests fails with: 2 tests failed to compile
Reviewed-by: sundar, jlaskey
! make/build-benchmark.xml
! make/build.xml
! make/project.properties
Changeset: 821b0b610861
Author: sundar
Date: 2013-09-19 21:20 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/821b0b610861
8025080: Object literal getter, setter function with number format property name results in ClassFormatError
Reviewed-by: lagergren, hannesw
! src/jdk/nashorn/internal/ir/debug/JSONWriter.java
! src/jdk/nashorn/internal/parser/Parser.java
+ test/script/basic/JDK-8025080.js
+ test/script/basic/JDK-8025080.js.EXPECTED
! test/script/basic/parser/objectLitExpr.js.EXPECTED
Changeset: 18d64bc4937d
Author: sundar
Date: 2013-09-19 23:48 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/18d64bc4937d
8025090: 'while' statement with 'test' using var before being declared in body results in VerifyError
Reviewed-by: jlaskey
! src/jdk/nashorn/internal/ir/WhileNode.java
+ test/script/basic/JDK-8025090.js
Changeset: 195be8ca5c97
Author: sundar
Date: 2013-09-20 12:56 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/195be8ca5c97
8025111: undefined or null 'with' expression in empty with block should throw TypeError
Reviewed-by: lagergren, hannesw
! src/jdk/nashorn/internal/codegen/CodeGenerator.java
+ test/script/basic/JDK-8025111.js
Changeset: fa491b75d3e4
Author: hannesw
Date: 2013-09-20 12:11 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/fa491b75d3e4
8022587: ClassCache is not optimal and leaks Source instances
Reviewed-by: lagergren, attila
! src/jdk/nashorn/internal/objects/Global.java
Changeset: 13210550765c
Author: lana
Date: 2013-09-20 19:17 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/13210550765c
Merge
Changeset: 279f47b353f3
Author: sundar
Date: 2013-09-20 20:55 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/279f47b353f3
8025147: Trailing comma is not allowed in JSONArray and JSONObject
Reviewed-by: hannesw, jlaskey
! src/jdk/nashorn/internal/parser/JSONParser.java
! src/jdk/nashorn/internal/runtime/resources/Messages.properties
+ test/script/basic/JDK-8025147.js
+ test/script/basic/JDK-8025147.js.EXPECTED
Changeset: 16b6db9f7225
Author: sundar
Date: 2013-09-20 22:37 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/16b6db9f7225
8025149: JSON.stringify does not handle 'space' argument as per the spec.
Reviewed-by: jlaskey, hannesw
! src/jdk/nashorn/internal/objects/NativeJSON.java
+ test/script/basic/JDK-8025149.js
+ test/script/basic/JDK-8025149.js.EXPECTED
Changeset: b8d9a63578e2
Author: hannesw
Date: 2013-09-21 10:11 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/b8d9a63578e2
8025163: Date methods should not return -0
Reviewed-by: lagergren, jlaskey
! src/jdk/nashorn/internal/objects/NativeDate.java
+ test/script/basic/JDK-8025163.js
+ test/script/basic/JDK-8025163.js.EXPECTED
Changeset: 8f6304373671
Author: sundar
Date: 2013-09-23 14:20 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/8f6304373671
Merge
Changeset: c5475f5d4647
Author: sundar
Date: 2013-09-24 20:43 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/c5475f5d4647
8025312: parseInt should convert 'radix' argument to ToInt32 even if empty string is parsed
Reviewed-by: jlaskey, hannesw
! src/jdk/nashorn/internal/runtime/GlobalFunctions.java
+ test/script/basic/JDK-8025312.js
+ test/script/basic/JDK-8025312.js.EXPECTED
Changeset: 754ecd62bde3
Author: sundar
Date: 2013-09-25 08:17 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/754ecd62bde3
8025325: parseFloat does not handle '.' in exponent part
Reviewed-by: hannesw
! src/jdk/nashorn/internal/runtime/GlobalFunctions.java
+ test/script/basic/JDK-8025325.js
+ test/script/basic/JDK-8025325.js.EXPECTED
Changeset: 2f8f99e5ed76
Author: hannesw
Date: 2013-09-25 16:37 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/2f8f99e5ed76
8025434: RegExp lastIndex can exceed int range
Reviewed-by: lagergren, sundar
! src/jdk/nashorn/internal/objects/NativeRegExp.java
+ test/script/basic/JDK-8025434.js
Changeset: 712f5e31739b
Author: hannesw
Date: 2013-09-26 10:14 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/712f5e31739b
8025197: String replace method fails with regexp /$/gi
Reviewed-by: sundar
! src/jdk/nashorn/internal/objects/NativeRegExp.java
+ test/script/basic/JDK-8025197.js
+ test/script/basic/JDK-8025197.js.EXPECTED
Changeset: 23958764f866
Author: hannesw
Date: 2013-09-26 11:47 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/23958764f866
8025486: RegExp constructor arguments are not evaluated in right order
Reviewed-by: sundar
! src/jdk/nashorn/internal/objects/NativeRegExp.java
+ test/script/basic/JDK-8025486.js
+ test/script/basic/JDK-8025486.js.EXPECTED
Changeset: f1f027907a69
Author: sundar
Date: 2013-09-26 16:37 +0530
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/f1f027907a69
Merge
Changeset: d49a8c2173f5
Author: lana
Date: 2013-09-26 17:23 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/d49a8c2173f5
Merge
Changeset: 75fd3486e584
Author: katleman
Date: 2013-10-02 13:26 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/nashorn/rev/75fd3486e584
Added tag jdk8-b110 for changeset d49a8c2173f5
! .hgtags
From vladimir.kozlov at oracle.com Thu Oct 3 12:27:50 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Thu, 03 Oct 2013 12:27:50 -0700
Subject: RFR(XS): 8024008: Nashorn V8 (Crypto) benchmark crashes with
small CodeCache size
In-Reply-To: <524DB4B6.7040201@oracle.com>
References: <522DD453.4010809@oracle.com> <522E09C4.1070700@oracle.com>
<522EC44F.2060005@oracle.com> <522F1612.4030606@oracle.com>
<522FA629.10509@oracle.com> <524DB4B6.7040201@oracle.com>
Message-ID: <524DC536.5030602@oracle.com>
Albert,
I don't see connection between not generating wrapper (which is fine, it
is only needed for hot calls to native method) and wrong return address
when calling i2c adapter (failed message). Can you find what return
address is?
It could be a different problem (or not) from what this bug about.
Several things can go bad when codecache is full. Also attached to bug
report hs_err files shows different crushes.
Was you able to reproduce it with fastdebug VM? Switch off
-XX:-CheckCompressedOops to get the same code generation as with product
64-bit VM. And switch off -XX:-VerifyDependencies to speed testing (10x,
this test is very expensive).
Also can you try to run with latest VM version which has fixes to
produce more info for call stack in hs_err. To have only next lines is
not useful:
C 0x0000000648baace0
[error occurred during error reporting (printing native stack), id 0xb]
Thanks,
Vladimir
On 10/3/13 11:17 AM, Albert Noll wrote:
> Hi,
>
> I think I found the reason for the crash. Please forget the previous
> suggestions.
>
> See the following webrev:
>
> Problem:
> http://cr.openjdk.java.net/~anoll/8024008/webrev.02/
>
> If the code cache gets full, this code in compileBroker.cpp is not
> executed.
>
> 1318 (void)
> AdapterHandlerLibrary::create_native_wrapper(method, compile_id);
>
> As a result, we get the following error "i2c adapter must return to
> an interpreter frame"
> if the JVM is called with "-XX:+UnlockDiagnosticVMOptions
> -XX:+VerifyAdapterCalls"
>
> I do not yet fully understand why that's the case, so please if you
> know let me know.
>
> Solution:
> Move the code cache is full-check after line 1318.
>
> Many thanks,
> Albert
>
>
> Am 11.09.2013 01:07, schrieb Vladimir Kozlov:
>> Albert,
>>
>> I would suggest to run as many tests as possible to verify correctness
>> of changes because this code is very important.
>>
>> Thanks,
>> Vladimir
>>
>> On 9/10/13 5:52 AM, Albert Noll wrote:
>>> Hi,
>>>
>>> the current version causes a serious performance regression.
>>> I have to figure out what's wrong.
>>>
>>> Best,
>>> Albert
>>>
>>> On 10.09.2013 09:03, Albert Noll wrote:
>>>> Hi Vladimir,
>>>>
>>>> thanks for looking at this. I checked all call sites of
>>>> 'make_not_entrant()' and 'make_zombie()'. I do not see any problems.
>>>> The worst thing that can happen is that an nmethod for which the call
>>>> returns fals gets removed later than expected.
>>>>
>>>> I updated the comment and did some minor code refactoring.
>>>>
>>>> Also I think that it is worth considering to backport this change,
>>>> since the bug can appear any time
>>>> the code cache fills up. If that bug appears, it is extremely hard to
>>>> reproduce and debug.
>>>>
>>>> Here is the updated webrev.
>>>> http://cr.openjdk.java.net/~anoll/8024008/webrev.01/
>>>>
>>>>
>>>> Best,
>>>> Albert
>>>>
>>>>
>>>>
>>>> On 09.09.2013 19:47, Vladimir Kozlov wrote:
>>>>> Several places in sources do not check returned result of
>>>>> make_not_entrant_or_zombie(). And they may assume that method marked
>>>>> as non-entrant, for example, because before we returned 'false' only
>>>>> when an other thread already changed the state to one we need.
>>>>>
>>>>> Can you check all call sites to make sure they work correctly with
>>>>> this change?
>>>>>
>>>>> Thanks,
>>>>> Vladimir
>>>>>
>>>>> On 9/9/13 6:59 AM, Albert Noll wrote:
>>>>>> Hi,
>>>>>>
>>>>>> thanks for reviewing this patch.
>>>>>>
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8024008
>>>>>> http://cr.openjdk.java.net/~anoll/8024008/webrev.00/
>>>>>>
>>>>>>
>>>>>> Many thanks in advance,
>>>>>> Albert
>>>>>>
>>>>>> Problem:
>>>>>> The state of nmethods that are currently locked by the VM must not
>>>>>> change.
>>>>>> Some operations such as setting ICs (e.g.,
>>>>>> SharedRuntime::resolve_sub_helper())
>>>>>> rely on this fact. 'nmethod::make_not_entrant_or_zombie does not
>>>>>> make this
>>>>>> check.
>>>>>>
>>>>>> Solution:
>>>>>> Do method state unchanged of nmethod is locked by the VM.
>>>>>>
>>>>>> Testing: Run Octane benchmarks on top of Nashorn with small code
>>>>>> cache size (16m).
>>>>>>
>>>>
>>>
>
From christian.thalinger at oracle.com Thu Oct 3 12:38:02 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 12:38:02 -0700
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
Message-ID:
src/share/vm/c1/c1_GraphBuilder.cpp:
+ Values* GraphBuilder::args_list_for_profiling(ciMethod* target, int& start, bool may_have_receiver) {
+ Values* GraphBuilder::collect_args_for_profiling(Values* args, ciMethod* target, bool may_have_receiver) {
Both methods take a target as argument but never use it.
src/share/vm/c1/c1_Instruction.hpp:
+ bool arg_needs_null_check(int i) const {
+ if (i >= 0 && i < (int)sizeof(_nonnull_state) * BitsPerByte) {
This means that arguments after the 32nd position always need a null check. Can you add a comment to these methods explaining that as we do for Java API methods? Maybe use Doxygen style.
+ virtual void input_values_do(ValueVisitor* f) {
+ if (_recv != NULL) f->visit(&_recv);
+ for (int i = 0; i < nb_profiled_args(); i++) f->visit(_obj_args->adr_at(i));
+ }
Can you use some line breaks and curly braces here too?
src/share/vm/c1/c1_LIR.hpp:
+ intptr_t _current_klass; // what the profiling currently reports
Why is the type intptr_t? Can't we use a more specific type here? Hmm, you tag klass pointers:
+ static intptr_t with_status(intptr_t k, intptr_t in) {
+ return k | (in & status_bits);
+ }
src/share/vm/c1/c1_LIRGenerator.cpp:
+ static ciKlass* sig_next_klass(ciSignature* sig, ciKlass*& first_sig_k, int& j) {
We should move this method into ciSignature. Or better ciSignatureStream.
src/share/vm/ci/ciMethodData.hpp:
+ // If the compiler finds a profiled type is known statically for
"type that is known"
src/share/vm/oops/methodData.cpp:
+ SignatureStream ss(inv.signature());
+ int args_count = 0;
+ for ( ; !ss.at_return_type(); ss.next()) {
+ if (ss.is_object() || ss.is_array()) {
+ args_count++;
+ if (args_count >= max) {
+ break;
+ }
+ }
+ }
This would be a nice utility method in SignatureStream (sans the >= max part). Maybe reference_parameter_count(). Oh, btw., arrays are treated as objects:
bool SignatureStream::is_object() const {
return _type == T_OBJECT
|| _type == T_ARRAY;
}
It could be reused here right away:
+ #ifdef ASSERT
+ int count = 0;
+ for (SignatureStream ss(inv.signature()); !ss.at_return_type(); ss.next()) {
+ if (ss.is_object() || ss.is_array()) {
+ count++;
+ Bytecodes::Code bc = m->code_at(bci);
+ assert(Bytecodes::is_invoke(m->java_code_at(bci)), "arguments only make sense at call");
+
+ return bc == Bytecodes::_invokedynamic || bc == Bytecodes::_invokehandle;
Instead of this code you can use Bytecode_invoke and then query inv.is_invokedynamic() || inv.is_invokehandle().
+ int MethodData::profile_arguments_flag() {
+ return TypeProfile % 10;
+ }
Why 10?
+ bool MethodData::profile_arguments() {
+ return profile_arguments_flag() > 0 && profile_arguments_flag() <= 2;
+ }
+
+ bool MethodData::profile_arguments_jsr292_only() {
+ return profile_arguments_flag() == 1;
+ }
+
+ bool MethodData::profile_all_arguments() {
+ return profile_arguments_flag() == 2;
+ }
I think you should have an enum for all of these constants.
src/share/vm/oops/methodData.hpp:
+ void set_int_at_unchecked(int index, int value) {
+ data()->set_cell_at(index, (intptr_t) value);
+ }
This method is not used.
+ return _args.set_type(i, TypeEntries::with_status((intptr_t)k, current));
Maybe you should add another with_status method that takes a Klass* and do the cast there.
src/share/vm/runtime/globals.hpp:
+ develop(bool, PrintMethodDataStats, false, \
Most of these flags are named *Statistics.
+ product_pd(uintx, TypeProfile, \
+ "Type profiling of arguments at call:" \
+ "0->off ; 1->js292 only; 2->all methods") \
+ product(intx, TypeProfileArgsLimit, 2, \
+ "max number of call arguments to consider for type profiling") \
+ \
Empty line missing between.
On Oct 2, 2013, at 10:02 AM, Roland Westrelin wrote:
> Here is a new webrev for the new profiling points, only profiling of arguments at calls this time. This one includes tiered support on 32bit and 64bit x86.
>
> http://cr.openjdk.java.net/~roland/8023657/webrev.01/
>
> The output of -XX:+PrintMethodData is:
>
> 6 invokevirtual 2
> 0 bci: 6 VirtualCallData count(0) entries(1)
> 'TestProfiling'(4746 1.00)
> argument types 0: stack(1) 'TestProfiling$C'
> 1: stack(2) unknown (null seen)
>
> Profiling can either be off, on only for jsr292 related calls (invokedynamic, invokehandle or all invokes in a lambda form) or on for all methods and invokes. -XX:TypeProfile={0,1,2} is used to pick a level of profiling.
> Once all profiling is in (arguments, parameters, return value), in order to limit the number of options my plan is to use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each. TypeProfile=111, Typeprofile=222 etc.
> Profiling is by default on only for jsr292 related calls in order to not impact startup/footprint of standard java apps.
>
> Roland.
>
>
From vladimir.kozlov at oracle.com Thu Oct 3 13:35:19 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Thu, 03 Oct 2013 13:35:19 -0700
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <524DB8EF.7030908@oracle.com>
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
<524DB1AB.8060406@oracle.com> <524DB675.6090101@oracle.com>
<524DB8EF.7030908@oracle.com>
Message-ID: <524DD507.60408@oracle.com>
Good.
Thanks,
Vladimir
On 10/3/13 11:35 AM, Vladimir Ivanov wrote:
> Thanks for catching that.
>
> How about that?
> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.02
>
> Best regards,
> Vladimir Ivanov
>
> On 10/3/13 10:24 PM, Vladimir Kozlov wrote:
>> You need to add cast (int)(j - lowval) since argument type is int. Some
>> C++ compiler will complain if no cast.
>>
>> Thanks,
>> Vladimir K
>>
>> On 10/3/13 11:04 AM, Vladimir Ivanov wrote:
>>> Vladimir,
>>>
>>> I like the idea to convert j to int64. It looks much cleaner now.
>>>
>>> Here's updated webrev:
>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.01
>>>
>>> Best regards,
>>> Vladimir Ivanov
>>>
>>> On 10/3/13 8:57 PM, Vladimir Kozlov wrote:
>>>> I don't think it is right. You need to have check before the loop's
>>>> body
>>>> execution.
>>>> Also what about case r->lo() == MIN_INT? (j - lowval) will underflow.
>>>> I think we should use int64 type for these expressions as in other
>>>> lines
>>>> of this method.
>>>>
>>>> Thanks,
>>>> Vladimir
>>>>
>>>> On 10/2/13 11:55 AM, Vladimir Ivanov wrote:
>>>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
>>>>> 7 lines changed: 4 ins; 0 del; 3 mod
>>>>>
>>>>> If hi->hi() == MAX_INT then, after (j == r->hi() && r == hi), j++
>>>>> overflows and j <= r->hi() succeeds again (leading to
>>>>> extra iterations and infinite loop in the product).
>>>>>
>>>>> The fix is to check whether upper limit is reached (j >= r->hi()) and
>>>>> stop iterating, if necessary.
>>>>>
>>>>> Also, did a small cleanup: eliminated unused parameter from
>>>>> SwitchRange::print.
>>>>>
>>>>> Testing: failing test case.
>>>>>
>>>>> Reviewed-by: iveresov, ?
>>>>>
>>>>> Best regards,
>>>>> Vladimir Ivanov
From christian.thalinger at oracle.com Thu Oct 3 13:41:11 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 13:41:11 -0700
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <524DB8EF.7030908@oracle.com>
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
<524DB1AB.8060406@oracle.com> <524DB675.6090101@oracle.com>
<524DB8EF.7030908@oracle.com>
Message-ID:
Looks good.
On Oct 3, 2013, at 11:35 AM, Vladimir Ivanov wrote:
> Thanks for catching that.
>
> How about that?
> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.02
>
> Best regards,
> Vladimir Ivanov
>
> On 10/3/13 10:24 PM, Vladimir Kozlov wrote:
>> You need to add cast (int)(j - lowval) since argument type is int. Some
>> C++ compiler will complain if no cast.
>>
>> Thanks,
>> Vladimir K
>>
>> On 10/3/13 11:04 AM, Vladimir Ivanov wrote:
>>> Vladimir,
>>>
>>> I like the idea to convert j to int64. It looks much cleaner now.
>>>
>>> Here's updated webrev:
>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.01
>>>
>>> Best regards,
>>> Vladimir Ivanov
>>>
>>> On 10/3/13 8:57 PM, Vladimir Kozlov wrote:
>>>> I don't think it is right. You need to have check before the loop's body
>>>> execution.
>>>> Also what about case r->lo() == MIN_INT? (j - lowval) will underflow.
>>>> I think we should use int64 type for these expressions as in other lines
>>>> of this method.
>>>>
>>>> Thanks,
>>>> Vladimir
>>>>
>>>> On 10/2/13 11:55 AM, Vladimir Ivanov wrote:
>>>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
>>>>> 7 lines changed: 4 ins; 0 del; 3 mod
>>>>>
>>>>> If hi->hi() == MAX_INT then, after (j == r->hi() && r == hi), j++
>>>>> overflows and j <= r->hi() succeeds again (leading to
>>>>> extra iterations and infinite loop in the product).
>>>>>
>>>>> The fix is to check whether upper limit is reached (j >= r->hi()) and
>>>>> stop iterating, if necessary.
>>>>>
>>>>> Also, did a small cleanup: eliminated unused parameter from
>>>>> SwitchRange::print.
>>>>>
>>>>> Testing: failing test case.
>>>>>
>>>>> Reviewed-by: iveresov, ?
>>>>>
>>>>> Best regards,
>>>>> Vladimir Ivanov
From christian.thalinger at oracle.com Thu Oct 3 13:41:52 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 13:41:52 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
Message-ID: <6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
On Oct 3, 2013, at 11:28 AM, Roland Westrelin wrote:
>>> You should probably use:
>>> caller_argument0->uncast() == callee_argument0->uncast()
>>
>> I can but it's probably not necessary. If it's truly a recursive call even the CheckCastPP node should be the same, right?
>
> With 8024070, that will add Cast nodes in many places, I don't think that will necessarily be the case.
Fair enough. I've added the uncast() calls:
http://cr.openjdk.java.net/~twisti/8011138/webrev.01/
>
> Roland.
From christian.thalinger at oracle.com Thu Oct 3 13:51:51 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 13:51:51 -0700
Subject: RFR (S): 8024943: ciReplay: fails to dump replay data during
safepointing
In-Reply-To: <524D7F86.4080003@oracle.com>
References: <524C7ECF.80004@oracle.com>
<524D7F86.4080003@oracle.com>
Message-ID:
Looks good.
On Oct 3, 2013, at 7:30 AM, Vladimir Ivanov wrote:
> Updated webrev:
> http://cr.openjdk.java.net/~vlivanov/8024943/webrev.01/
>
> Verified that replay data is dumped correctly in the following combinations:
> - thread_in_native
> - thread_in_vm
> - thread_in_vm + Compile_lock
>
> Regarding ciEnv in invalid state (leaving aside the cases when the instance is corrupted), the only case when it is possible is when the VM crashed in ~ciEnv(). Don't know whether fixing it is worth the effort - in both cases we don't get valid replay data file.
>
> Best regards,
> Vladimir Ivanov
>
> On 10/3/13 12:57 AM, John Rose wrote:
>> On Oct 2, 2013, at 1:15 PM, Vladimir Ivanov wrote:
>>
>>> http://cr.openjdk.java.net/~vlivanov/8024943/webrev.00/
>>> 15 lines changed: 11 ins; 0 del; 4 mod
>>>
>>> In some situations VM fails to dump compiler replay file (produces empty replay_pid%p.log). The reason is that ciEnv::dump_replay_data tries to do thread state transition to VM unconditionally and acquire Compile_lock. It doesn't always work in context of VM error reporter.
>>>
>>> The fix is to provide new method specifically for VM error reporter (ciEnv::dump_replay_data_unsafe) which doesn't perform aforementioned actions.
>>>
>>> Testing: manual (checked that a valid dump is produced for a crash during safepointing).
>>
>> Is is possible that you've pushed a bug further into the CI code? I would like you to take a look at this (if you haven't already) and either make code adjustments or describe current assumptions in comments, for the next maintainer.
>>
>> What I mean about "pushed a bug" is that the CI is (generally speaking) sensitive to the thread state. (Note the GUARDED_VM_ENTRY macros everywhere.) The dump_replay_data function calls a bunch of dump_replay_data subroutines on lots of little data structures in the CI. Are any of them also sensitive to thread state? If so, perhaps you want to have your
>>
>> Also, the ciEnv::current() call returns something to the error reporter, and if that something is non-null, it is assumed to be (up to high probability, of course) a valid ciEnv structure. Are there any places where the ciEnv guy is in an inconsistent state but still published by ciEnv::current()? Probably not, but it might be worth a comment noting the appropriate conditions. My specific worry is that the call to remove_symbols in ~ciEnv might leave a space where the dumper would not see valid state.
>>
>> This crash dumper stuff cannot be nailed down 100%, of course, but this might be a good moment to make sure we've at least stomped on it a bit.
>>
>> Reviewed, pending resolution of the above.
>>
>> Thanks,
>> ? John
>>
From vladimir.x.ivanov at oracle.com Thu Oct 3 13:57:42 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Fri, 04 Oct 2013 00:57:42 +0400
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To:
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
<524DB1AB.8060406@oracle.com> <524DB675.6090101@oracle.com>
<524DB8EF.7030908@oracle.com>
Message-ID: <524DDA46.2030705@oracle.com>
Thank you, Chris.
Best regards,
Vladimir Ivanov
On 10/4/13 12:41 AM, Christian Thalinger wrote:
> Looks good.
>
> On Oct 3, 2013, at 11:35 AM, Vladimir Ivanov wrote:
>
>> Thanks for catching that.
>>
>> How about that?
>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.02
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> On 10/3/13 10:24 PM, Vladimir Kozlov wrote:
>>> You need to add cast (int)(j - lowval) since argument type is int. Some
>>> C++ compiler will complain if no cast.
>>>
>>> Thanks,
>>> Vladimir K
>>>
>>> On 10/3/13 11:04 AM, Vladimir Ivanov wrote:
>>>> Vladimir,
>>>>
>>>> I like the idea to convert j to int64. It looks much cleaner now.
>>>>
>>>> Here's updated webrev:
>>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.01
>>>>
>>>> Best regards,
>>>> Vladimir Ivanov
>>>>
>>>> On 10/3/13 8:57 PM, Vladimir Kozlov wrote:
>>>>> I don't think it is right. You need to have check before the loop's body
>>>>> execution.
>>>>> Also what about case r->lo() == MIN_INT? (j - lowval) will underflow.
>>>>> I think we should use int64 type for these expressions as in other lines
>>>>> of this method.
>>>>>
>>>>> Thanks,
>>>>> Vladimir
>>>>>
>>>>> On 10/2/13 11:55 AM, Vladimir Ivanov wrote:
>>>>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
>>>>>> 7 lines changed: 4 ins; 0 del; 3 mod
>>>>>>
>>>>>> If hi->hi() == MAX_INT then, after (j == r->hi() && r == hi), j++
>>>>>> overflows and j <= r->hi() succeeds again (leading to
>>>>>> extra iterations and infinite loop in the product).
>>>>>>
>>>>>> The fix is to check whether upper limit is reached (j >= r->hi()) and
>>>>>> stop iterating, if necessary.
>>>>>>
>>>>>> Also, did a small cleanup: eliminated unused parameter from
>>>>>> SwitchRange::print.
>>>>>>
>>>>>> Testing: failing test case.
>>>>>>
>>>>>> Reviewed-by: iveresov, ?
>>>>>>
>>>>>> Best regards,
>>>>>> Vladimir Ivanov
>
From vladimir.x.ivanov at oracle.com Thu Oct 3 13:57:56 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Fri, 04 Oct 2013 00:57:56 +0400
Subject: RFR (S): 8024943: ciReplay: fails to dump replay data during
safepointing
In-Reply-To:
References: <524C7ECF.80004@oracle.com>
<524D7F86.4080003@oracle.com>
Message-ID: <524DDA54.2070506@oracle.com>
Thank you, Chris.
Best regards,
Vladimir Ivanov
On 10/4/13 12:51 AM, Christian Thalinger wrote:
> Looks good.
>
> On Oct 3, 2013, at 7:30 AM, Vladimir Ivanov wrote:
>
>> Updated webrev:
>> http://cr.openjdk.java.net/~vlivanov/8024943/webrev.01/
>>
>> Verified that replay data is dumped correctly in the following combinations:
>> - thread_in_native
>> - thread_in_vm
>> - thread_in_vm + Compile_lock
>>
>> Regarding ciEnv in invalid state (leaving aside the cases when the instance is corrupted), the only case when it is possible is when the VM crashed in ~ciEnv(). Don't know whether fixing it is worth the effort - in both cases we don't get valid replay data file.
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> On 10/3/13 12:57 AM, John Rose wrote:
>>> On Oct 2, 2013, at 1:15 PM, Vladimir Ivanov wrote:
>>>
>>>> http://cr.openjdk.java.net/~vlivanov/8024943/webrev.00/
>>>> 15 lines changed: 11 ins; 0 del; 4 mod
>>>>
>>>> In some situations VM fails to dump compiler replay file (produces empty replay_pid%p.log). The reason is that ciEnv::dump_replay_data tries to do thread state transition to VM unconditionally and acquire Compile_lock. It doesn't always work in context of VM error reporter.
>>>>
>>>> The fix is to provide new method specifically for VM error reporter (ciEnv::dump_replay_data_unsafe) which doesn't perform aforementioned actions.
>>>>
>>>> Testing: manual (checked that a valid dump is produced for a crash during safepointing).
>>>
>>> Is is possible that you've pushed a bug further into the CI code? I would like you to take a look at this (if you haven't already) and either make code adjustments or describe current assumptions in comments, for the next maintainer.
>>>
>>> What I mean about "pushed a bug" is that the CI is (generally speaking) sensitive to the thread state. (Note the GUARDED_VM_ENTRY macros everywhere.) The dump_replay_data function calls a bunch of dump_replay_data subroutines on lots of little data structures in the CI. Are any of them also sensitive to thread state? If so, perhaps you want to have your
>>>
>>> Also, the ciEnv::current() call returns something to the error reporter, and if that something is non-null, it is assumed to be (up to high probability, of course) a valid ciEnv structure. Are there any places where the ciEnv guy is in an inconsistent state but still published by ciEnv::current()? Probably not, but it might be worth a comment noting the appropriate conditions. My specific worry is that the call to remove_symbols in ~ciEnv might leave a space where the dumper would not see valid state.
>>>
>>> This crash dumper stuff cannot be nailed down 100%, of course, but this might be a good moment to make sure we've at least stomped on it a bit.
>>>
>>> Reviewed, pending resolution of the above.
>>>
>>> Thanks,
>>> ? John
>>>
>
From vladimir.x.ivanov at oracle.com Thu Oct 3 13:58:20 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Fri, 04 Oct 2013 00:58:20 +0400
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <524DD507.60408@oracle.com>
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
<524DB1AB.8060406@oracle.com> <524DB675.6090101@oracle.com>
<524DB8EF.7030908@oracle.com> <524DD507.60408@oracle.com>
Message-ID: <524DDA6C.2060507@oracle.com>
Thank you, Vladimir.
Best regards,
Vladimir Ivanov
On 10/4/13 12:35 AM, Vladimir Kozlov wrote:
> Good.
>
> Thanks,
> Vladimir
>
> On 10/3/13 11:35 AM, Vladimir Ivanov wrote:
>> Thanks for catching that.
>>
>> How about that?
>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.02
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> On 10/3/13 10:24 PM, Vladimir Kozlov wrote:
>>> You need to add cast (int)(j - lowval) since argument type is int. Some
>>> C++ compiler will complain if no cast.
>>>
>>> Thanks,
>>> Vladimir K
>>>
>>> On 10/3/13 11:04 AM, Vladimir Ivanov wrote:
>>>> Vladimir,
>>>>
>>>> I like the idea to convert j to int64. It looks much cleaner now.
>>>>
>>>> Here's updated webrev:
>>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.01
>>>>
>>>> Best regards,
>>>> Vladimir Ivanov
>>>>
>>>> On 10/3/13 8:57 PM, Vladimir Kozlov wrote:
>>>>> I don't think it is right. You need to have check before the loop's
>>>>> body
>>>>> execution.
>>>>> Also what about case r->lo() == MIN_INT? (j - lowval) will underflow.
>>>>> I think we should use int64 type for these expressions as in other
>>>>> lines
>>>>> of this method.
>>>>>
>>>>> Thanks,
>>>>> Vladimir
>>>>>
>>>>> On 10/2/13 11:55 AM, Vladimir Ivanov wrote:
>>>>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
>>>>>> 7 lines changed: 4 ins; 0 del; 3 mod
>>>>>>
>>>>>> If hi->hi() == MAX_INT then, after (j == r->hi() && r == hi), j++
>>>>>> overflows and j <= r->hi() succeeds again (leading to
>>>>>> extra iterations and infinite loop in the product).
>>>>>>
>>>>>> The fix is to check whether upper limit is reached (j >= r->hi()) and
>>>>>> stop iterating, if necessary.
>>>>>>
>>>>>> Also, did a small cleanup: eliminated unused parameter from
>>>>>> SwitchRange::print.
>>>>>>
>>>>>> Testing: failing test case.
>>>>>>
>>>>>> Reviewed-by: iveresov, ?
>>>>>>
>>>>>> Best regards,
>>>>>> Vladimir Ivanov
From christian.thalinger at oracle.com Thu Oct 3 14:20:20 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 14:20:20 -0700
Subject: RFR(M): 8023014:
closed/com/oracle/jfr/compiler/CodeSweeperSweepNoFlushTest.java
fails with HS crash
In-Reply-To: <524D6A32.5080003@oracle.com>
References: <52434207.2080804@oracle.com> <52436843.6010008@oracle.com> <52445202.7010303@oracle.com> <524471E4.6060508@oracle.com> <524A797F.2010006@oracle.com>
<524AF59C.3040908@oracle.com> <524BEBC2.4030202@oracle.com>
<524C4EA8.1020109@oracle.com> <524D6A32.5080003@oracle.com>
Message-ID: <10357B70-D0DD-4057-99B3-620883784430@oracle.com>
src/share/vm/code/codeBlob.cpp:
+ // The parameter 'true' indicates a critical memory allocation.
+ // This means that CodeCacheMinimumFreeSpace is used, if necessary
+ blob = new (size, true) AdapterBlob(size, cb);
For things like this it is helpful to define a const with a meaningful name, e.g.:
const bool is_critical = true;
+bool AbstractCompiler::should_perform_shutdown() {
+ MutexLocker only_one(CompileThread_lock);
Maybe add a comment similar to what you explained here why the lock is there.
src/share/vm/compiler/compileBroker.cpp:
+ lock()->wait(!Mutex::_no_safepoint_check_flag, 5*1000);
We need a comment here why it is 5.
+ // Switch back to VM state to to compiler initialization
Typo: "to to"
+ if ((comp->is_c1()) && (thread->get_buffer_blob() == NULL)) {
We don't need parenthesis around comp->is_c1() check.
Otherwise this looks good.
On Oct 3, 2013, at 5:59 AM, Albert Noll wrote:
> Hi Vladimir,
>
> thanks for looking at the patch. See comments inline.
> Here is the updated webrev: http://cr.openjdk.java.net/~anoll/8023014/webrev.04/
>
> On 02.10.2013 18:49, Vladimir Kozlov wrote:
>> Albert,
>>
>> In disable_compilation_forever() the comment does not correspond to code.
>>
> I removed the comment.
>> In should_perform_shutdown() the _compiler_state could be changed before other threads reach "if (comp->is_state_failed())" check in init_compiler_runtime().
> True. I added a function should_exit(), which returns true if the state if failed, or shutting down.
>> Yes, decrementing with lock is fine, you are right.
>>
>> The message should say why we do shutdown (no space to initialize compiler runtime):
>> warning("Shutting down compiler
>>
> The warning messages are now:
> - "Shutting down compiler %s (no space to run compiler)" or
> - "Initialization of %s thread failed (no space to run compiler thread)"
> if a C1 compiler thread fails to allocate memory.
>> Please, explain what references:
>>
>> + // We could delete compiler runtimes also. However,
>> + // there are references to the compiler runtime(s)
>> + // (e.g., by nmethods) which then fail. This can be
>>
> Done.
>> It would be nice to have regression test for this.
> I added a regression test, which checks that compiler threads exit, if there is not sufficient free code cache
> to init all threads. Testing a failing initialization of C2 is tricky, since a C2 initialization failure depends on the
> scheduling of the compiler threads.
>
> Thanks again,
> Albert
>>
>> Thanks,
>> Vladimir
>>
>> On 10/2/13 2:47 AM, Albert Noll wrote:
>>> Hi Vladimir,
>>>
>>> thanks again for the feedback. I tested the patch as you proposed, i.e., make sure that
>>> the patch works if the C1 and/or C2 compiler fails to initialize. I tested with up to 256 compiler
>>> threads.
>>>
>>> To make sure that all compiler threads exit, I had to do additional modifications in CompileQueue::get()
>>> and the caller of this method. With these changes, one can also exit compiler threads if -XX:-UseCodeCacheFlushing
>>> is set, which is also contained in this webrev.
>>>
>>> Here is the updated webrev:
>>> http://cr.openjdk.java.net/~anoll/8023014/webrev.03/
>>>
>>> See more comments inline:
>>>
>>>
>>> On 01.10.2013 18:17, Vladimir Kozlov wrote:
>>>> Albert,
>>>>
>>>> In general it looks good. Please, test it extensively with Tiered with codecache size enough to initialize one
>>>> compiler but not an other to verify your code.
>>>>
>>> Done.
>>>> I think you need to swap lock and decrement otherwise it will deadlock:
>>>>
>>>> +bool AbstractCompiler::should_perform_shutdown() {
>>>> + MutexLocker only_one(CompileThread_lock);
>>>> + _num_compiler_threads--;
>>>>
>>> I simplified this function. In fact it is fine if the last thread (i.e., if _num_compiler_threads == 0)
>>> does the shutdown. The while() statement is really not necessary. However, we have to decrement
>>> _num_compiler_threads when we hold the lock. Otherwise we are not guaranteed to reach 0
>>> (-- is not atomic).
>>>
>>>> comp->set_shut_down(); and delete _compilers[0]; should be done by one thread I think.
>>> Done.
>>>
>>>>
>>>> Small note, you accidentally removed nl in c2compiler.cpp:
>>>>
>>>> - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
>>>> +/* * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
>>>>
>>>>
>>> Fixed.
>>>
>>> Thanks again,
>>> Albert
>>>
>>>> Thanks,
>>>> Vladimir
>>>>
>>>> On 10/1/13 12:27 AM, Albert Noll wrote:
>>>>> Hi Vladimir,
>>>>>
>>>>> thanks again for looking at the patch. See comments inline:
>>>>> webrev: http://cr.openjdk.java.net/~anoll/8023014/webrev.02/
>>>>>
>>>>> On 26.09.2013 19:41, Vladimir Kozlov wrote:
>>>>>> Albert,
>>>>>>
>>>>>> There is small window between check and set_state where state can became initialized or still be uninitialized:
>>>>>> + if (!is_initialized()) {
>>>>>> + set_state(failed);
>>>>>>
>>>>>> so you may hit assert in set_state().
>>>>>>
>>>>>> I think you need to call set_state(failed) only when C1 runtime is initialized after lock:
>>>>>>
>>>>>> if (should_perform_init()) {
>>>>>> if (buffer_blob == NULL) {
>>>>>> set_state(failed);
>>>>>> } else {
>>>>>> init_c1_runtime();
>>>>>> set_state(initialized);
>>>>>> }
>>>>>> }
>>>>>>
>>>>> You are right. I adapted the patch according to your suggestion.
>>>>>
>>>>>> In this case it will match behavior for C2 which means that you need to shutdown compilation since you was not able to
>>>>>> initialize compilation runtime. It will require more code to do proper shutdown not just exiting thread (free
>>>>>> compilation queues, resetting flags). An it will be more complicated for Tiered case (I think we can use simple
>>>>>> approach to shutdown all compilations even if only one Compiler is not initialized since it is rare case).
>>>>>>
>>>>> I added code to shut-down compilation. If compiler runtime initialization fails, a flag is set which disables
>>>>> compilation forever. In the current
>>>>> version, all compilers are disabled if C1 and/or C2 runtime initialization fails (also in case of tiered compilation). I
>>>>> think this solution is fine for
>>>>> now, since a compiler runtime initialization failure should not happen in practice. If it ever turns out to be a
>>>>> problem, i.e., it is required that we
>>>>> we use one compiler if the other compiler failed to initialize, I suggest we fix this in another bug. The current bug
>>>>> appears only due to an artificial
>>>>> setting of the code cache size.
>>>>>
>>>>> Compiler shut-down is performed by one thread. This thread waits until all compiler threads have exited to compiler
>>>>> loop. The thread then
>>>>> deletes all tasks from the compile queue, deletes the compiler objects, and sets the objects to NULL.
>>>>>
>>>>> Please let me know if you think this solution is fine, or if there are other things that need to be considered.
>>>>> The current version passed jprt.
>>>>>
>>>>> Many thanks again,
>>>>> Albert
>>>>>
>>>>>> If C1 runtime was initialized but we was not able to allocate buffer for some threads your current code in
>>>>>> compileBroker.cpp will handle such case. So you don't need to set state to 'failed'.
>>>>>>
>>>>>> thanks,
>>>>>> Vladimir
>>>>>>
>>>>>> On 9/26/13 8:25 AM, Albert Noll wrote:
>>>>>>> Hi Vladimir,
>>>>>>>
>>>>>>> thanks for looking at the patch.
>>>>>>> Here is the new webrev:
>>>>>>> http://cr.openjdk.java.net/~anoll/8023014/webrev.01/
>>>>>>>
>>>>>>>
>>>>>>> See comments inline:
>>>>>>>
>>>>>>> On 26.09.2013 00:48, Vladimir Kozlov wrote:
>>>>>>>> Thank you, Albert
>>>>>>>>
>>>>>>>> I would suggest to do TieredStartAtLevel changes separately, it is not
>>>>>>>> related to this bug.
>>>>>>>>
>>>>>>> Done.
>>>>>>>> Second, how we can guard the initialization with a field
>>>>>>>> (_compiler_state and original _is_initialized) which is not static?
>>>>>>>>
>>>>>>>> You don't need separate local do_init in C*_Compiler.cpp since it is
>>>>>>>> used only once:
>>>>>>>>
>>>>>>> Done.
>>>>>>>> + if (should_perform_init()) {
>>>>>>>>
>>>>>>>> abstractCompiler.cpp:
>>>>>>>> You removed ThreadInVMfromNative and ResetNoHandleMark from
>>>>>>>> should_perform_init() and set_state(). Why? There is assert in
>>>>>>>> check_prelock_state() called from Monitor::lock():
>>>>>>>>
>>>>>>>> assert((!thread->is_Java_thread() || ((JavaThread
>>>>>>>> *)thread)->thread_state() == _thread_in_vm)
>>>>>>>> || rank() == Mutex::special, "wrong thread state for using
>>>>>>>> locks");
>>>>>>>>
>>>>>>>> Compiler threads are Java threads, so you should be in VM state when
>>>>>>>> lock. How you did not hit this assert?
>>>>>>>>
>>>>>>> The state transition from native to VM (and ResetNoHandleMark) is now in
>>>>>>> compileBroker.cpp:1543.
>>>>>>>>
>>>>>>>> Typo in abstractCompiler.hpp 'methos':
>>>>>>>>
>>>>>>>> + // This method returns true for the first compiler thread that
>>>>>>>> reaches that methos.
>>>>>>>>
>>>>>>>> It is not 'compiler object', it is 'compiler runtime' (yes it was
>>>>>>>> before but it was not accurate, it could be mistaking for Compile
>>>>>>>> object created for each compilation):
>>>>>>>>
>>>>>>>> + // This thread will initialize the compiler object.
>>>>>>>>
>>>>>>>> Swap lines (and use 'runtime' in the comment):
>>>>>>>>
>>>>>>>> ! bool is_initialized () { return _compiler_state ==
>>>>>>>> initialized; }
>>>>>>>> ! // Get/set state of compiler objects
>>>>>>>>
>>>>>>>>
>>>>>>>> c2compiler.cpp:
>>>>>>>>
>>>>>>>> C2Compiler:: is not needed:
>>>>>>>>
>>>>>>>> + bool successful = C2Compiler::init_c2_runtime();
>>>>>>>>
>>>>>>>>
>>>>>>> Fixed the issues above.
>>>>>>>> Should we exit Compiler thread which failed local buffer allocation
>>>>>>>> instead parking? Why keep resources allocated for it?
>>>>>>>>
>>>>>>> You are right, there is no reason the keep these threads around.
>>>>>>> Compiler threads wo are not initialized correctly
>>>>>>> now exit the VM.
>>>>>>>
>>>>>>> The patch is currently in west queue.
>>>>>>>
>>>>>>> Many thanks again,
>>>>>>> Albert
>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Vladimir
>>>>>>>>
>>>>>>>> On 9/25/13 1:05 PM, Albert Noll wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> could I have a review for this patch?
>>>>>>>>>
>>>>>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8023014
>>>>>>>>> webrev: http://cr.openjdk.java.net/~anoll/8023014/webrev.00/
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Problem: C1/C2 compiler initialization can fail if there is not enough
>>>>>>>>> memory in the code cache to generate all stubs.
>>>>>>>>> This problem occurs only with a small code cache size.
>>>>>>>>>
>>>>>>>>> Solution: Check correctness of (parts of) C1/C2 initialization and
>>>>>>>>> disable compiler (C1 and/or C2) if the compiler / thread
>>>>>>>>> was not initialized correctly.
>>>>>>>>>
>>>>>>>>> Testing: jprt, test case, benchmarks
>>>>>>>>>
>>>>>>>>> This patch also contains a refactored version of compiler object/thread
>>>>>>>>> initialization. In the new version, a compiler object/thread is
>>>>>>>>> initialized prior entering the main compiler loop. In the old version,
>>>>>>>>> the check if the compiler/thread is initialized was
>>>>>>>>> done in the main compiler loop (and hence before every compilation).
>>>>>>>>>
>>>>>>>>> To continue execution with a limited code cache size, the code types
>>>>>>>>> 'AdapterBlob' and 'MethodHandlesAdapterBlob' must
>>>>>>>>> be 'critical' allocations in the code cache, i.e., they must use space
>>>>>>>>> reserved by CodeCacheMinimumFreeSpace.
>>>>>>>>>
>>>>>>>>> In addition I removed some unued code.
>>>>>>>>>
>>>>>>>>> Many thanks in advance for reviewing.
>>>>>>>>>
>>>>>>>>> Best,
>>>>>>>>> Albert
>>>>>>>
>>>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131003/6494b0bd/attachment-0001.html
From vladimir.x.ivanov at oracle.com Thu Oct 3 14:30:25 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Fri, 04 Oct 2013 01:30:25 +0400
Subject: RFR (XXS): 8025849: Redundant "pid" in VM log file name (e.g.
hotspot_pidpid12345.log)
Message-ID: <524DE1F1.1020300@oracle.com>
http://cr.openjdk.java.net/~vlivanov/8025849/webrev.00
2 lines changed: 0 ins; 0 del; 2 mod
make_log_name function does the following expansion: %p => pid{pid}.
Fix VM log file name, removing unnecessary "pid" from the pattern.
FYI, I filed JDK-8025905 to track discrepancy between "%p" in LogFile &
ErrorFile.
Best regards,
Vladimir Ivanov
[1] https://bugs.openjdk.java.net/browse/JDK-8025905
From vladimir.kozlov at oracle.com Thu Oct 3 14:31:35 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Thu, 03 Oct 2013 14:31:35 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
<6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
Message-ID: <524DE237.9020409@oracle.com>
Christian,
Put callee_method->is_compiled_lambda_form() and
jvms->map()->argument(jvms, 0)->uncast() into local vars outside loop
since they are invariants.
Also both branches have to check (j->method() == callee_method). It
could be checked first:
if (j->method() == callee_method) {
if (callee_is_compiled_lambda_form) {
// Since compiled lambda forms are heavily reused we allow
recursive inlining.
// If it is truly a recursion (using the same "receiver") we
limit inlining
// otherwise we can easily blow the compiler stack.
Node* caller_argument0 = j->map()->argument(j, 0)->uncast();
if (caller_argument0 == callee_argument0) {
inline_level++;
}
} else {
inline_level++;
}
}
Thanks,
Vladimir
On 10/3/13 1:41 PM, Christian Thalinger wrote:
>
> On Oct 3, 2013, at 11:28 AM, Roland Westrelin wrote:
>
>>>> You should probably use:
>>>> caller_argument0->uncast() == callee_argument0->uncast()
>>>
>>> I can but it's probably not necessary. If it's truly a recursive call even the CheckCastPP node should be the same, right?
>>
>> With 8024070, that will add Cast nodes in many places, I don't think that will necessarily be the case.
>
> Fair enough. I've added the uncast() calls:
>
> http://cr.openjdk.java.net/~twisti/8011138/webrev.01/
>
>>
>> Roland.
>
From vladimir.kozlov at oracle.com Thu Oct 3 14:35:48 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Thu, 03 Oct 2013 14:35:48 -0700
Subject: RFR (XXS): 8025849: Redundant "pid" in VM log file name (e.g.
hotspot_pidpid12345.log)
In-Reply-To: <524DE1F1.1020300@oracle.com>
References: <524DE1F1.1020300@oracle.com>
Message-ID: <524DE334.7000006@oracle.com>
Good.
Vladimir
On 10/3/13 2:30 PM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8025849/webrev.00
> 2 lines changed: 0 ins; 0 del; 2 mod
>
> make_log_name function does the following expansion: %p => pid{pid}.
> Fix VM log file name, removing unnecessary "pid" from the pattern.
>
> FYI, I filed JDK-8025905 to track discrepancy between "%p" in LogFile &
> ErrorFile.
>
> Best regards,
> Vladimir Ivanov
>
> [1] https://bugs.openjdk.java.net/browse/JDK-8025905
From azeem.jiva at oracle.com Thu Oct 3 14:42:18 2013
From: azeem.jiva at oracle.com (Azeem Jiva)
Date: Thu, 3 Oct 2013 14:42:18 -0700
Subject: RFR (XXS): 8025849: Redundant "pid" in VM log file name (e.g.
hotspot_pidpid12345.log)
In-Reply-To: <524DE1F1.1020300@oracle.com>
References: <524DE1F1.1020300@oracle.com>
Message-ID: <78563D77-A1C5-44DB-97C6-E3C01ECEEFFE@oracle.com>
Did you test this on different OSes? Just to make sure that %p does return 'pid#' rather than just '#'. Windows would be a good one to test at the minimum. Otherwise it's fine (not a real reviewer).
--
Azeem Jiva
@javawithjiva
On Oct 3, 2013, at 2:30 PM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8025849/webrev.00
> 2 lines changed: 0 ins; 0 del; 2 mod
>
> make_log_name function does the following expansion: %p => pid{pid}.
> Fix VM log file name, removing unnecessary "pid" from the pattern.
>
> FYI, I filed JDK-8025905 to track discrepancy between "%p" in LogFile & ErrorFile.
>
> Best regards,
> Vladimir Ivanov
>
> [1] https://bugs.openjdk.java.net/browse/JDK-8025905
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131003/1b0769a9/attachment.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 495 bytes
Desc: Message signed with OpenPGP using GPGMail
Url : http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131003/1b0769a9/signature.asc
From christian.thalinger at oracle.com Thu Oct 3 14:47:12 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 14:47:12 -0700
Subject: RFR (XXS): 8025849: Redundant "pid" in VM log file name (e.g.
hotspot_pidpid12345.log)
In-Reply-To: <524DE1F1.1020300@oracle.com>
References: <524DE1F1.1020300@oracle.com>
Message-ID:
Looks good.
On Oct 3, 2013, at 2:30 PM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8025849/webrev.00
> 2 lines changed: 0 ins; 0 del; 2 mod
>
> make_log_name function does the following expansion: %p => pid{pid}.
> Fix VM log file name, removing unnecessary "pid" from the pattern.
>
> FYI, I filed JDK-8025905 to track discrepancy between "%p" in LogFile & ErrorFile.
>
> Best regards,
> Vladimir Ivanov
>
> [1] https://bugs.openjdk.java.net/browse/JDK-8025905
From vladimir.x.ivanov at oracle.com Thu Oct 3 14:48:14 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Fri, 04 Oct 2013 01:48:14 +0400
Subject: RFR (XXS): 8025849: Redundant "pid" in VM log file name (e.g.
hotspot_pidpid12345.log)
In-Reply-To: <78563D77-A1C5-44DB-97C6-E3C01ECEEFFE@oracle.com>
References: <524DE1F1.1020300@oracle.com>
<78563D77-A1C5-44DB-97C6-E3C01ECEEFFE@oracle.com>
Message-ID: <524DE61E.8090903@oracle.com>
Azeem,
No, I haven't tested it on Windows.
Expansion takes place in make_log_name_internal (ostream.cpp):
if (pid_pos >= 0) {
jio_snprintf(pid_text, sizeof(pid_text), "pid%u", pid);
buffer_length += strlen(pid_text);
}
So, the behavior is consistent across supported platforms.
Best regards,
Vladimir Ivanov
On 10/4/13 1:42 AM, Azeem Jiva wrote:
> Did you test this on different OSes? Just to make sure that %p does
> return 'pid#' rather than just '#'. Windows would be a good one to test
> at the minimum. Otherwise it's fine (not a real reviewer).
>
>
> --
> Azeem Jiva
> @javawithjiva
>
> On Oct 3, 2013, at 2:30 PM, Vladimir Ivanov
> > wrote:
>
>> http://cr.openjdk.java.net/~vlivanov/8025849/webrev.00
>> 2 lines changed: 0 ins; 0 del; 2 mod
>>
>> make_log_name function does the following expansion: %p => pid{pid}.
>> Fix VM log file name, removing unnecessary "pid" from the pattern.
>>
>> FYI, I filed JDK-8025905 to track discrepancy between "%p" in LogFile
>> & ErrorFile.
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> [1] https://bugs.openjdk.java.net/browse/JDK-8025905
>
From vladimir.x.ivanov at oracle.com Thu Oct 3 14:48:47 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Fri, 04 Oct 2013 01:48:47 +0400
Subject: RFR (XXS): 8025849: Redundant "pid" in VM log file name (e.g.
hotspot_pidpid12345.log)
In-Reply-To:
References: <524DE1F1.1020300@oracle.com>
Message-ID: <524DE63F.3010706@oracle.com>
Thank you, Chris.
Best regards,
Vladimir Ivanov
On 10/4/13 1:47 AM, Christian Thalinger wrote:
> Looks good.
>
> On Oct 3, 2013, at 2:30 PM, Vladimir Ivanov wrote:
>
>> http://cr.openjdk.java.net/~vlivanov/8025849/webrev.00
>> 2 lines changed: 0 ins; 0 del; 2 mod
>>
>> make_log_name function does the following expansion: %p => pid{pid}.
>> Fix VM log file name, removing unnecessary "pid" from the pattern.
>>
>> FYI, I filed JDK-8025905 to track discrepancy between "%p" in LogFile & ErrorFile.
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> [1] https://bugs.openjdk.java.net/browse/JDK-8025905
>
From christian.thalinger at oracle.com Thu Oct 3 14:56:01 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 14:56:01 -0700
Subject: RFR (M) 8024438: JSR 292 API specification maintenance for JDK 8
In-Reply-To: <3C5298FB-3149-4FED-920F-4254D07C3956@oracle.com>
References: <19F72018-5EB4-4AAA-AC66-E18F0F9ECB13@me.com>
<35668DC3-A121-4DCC-8A74-06CADEE6B8F9@oracle.com>
<3C5298FB-3149-4FED-920F-4254D07C3956@oracle.com>
Message-ID:
On Oct 2, 2013, at 2:31 PM, John Rose wrote:
> On Oct 2, 2013, at 12:14 PM, Christian Thalinger wrote:
>
>> src/share/classes/java/lang/invoke/MethodHandles.java:
>>
>> + * lookup expression |
>>
>> Apparently the name attribute is obsolete for in HTML5:
>>
>> http://dev.w3.org/html5/markup/a.html
>>
>> I think they want you to use .
>>
>> + *
>> + *
>> + * Discussion of private access:
>>
>> Same here.
>>
>> + * Security manager interactions
>>
>> And here.
>
> Wow; I don't know where HTML5 fits in the javadoc story. That might be nice to upgrade, but I'm not gonna go first:
Sure :-) It was only a note.
> --------
> fgrep ' Hi Vladimir,
>
> thanks for looking at the patch. See comments inline.
> Here is the updated webrev:
> http://cr.openjdk.java.net/~anoll/8023014/webrev.04/
>
>
> On 02.10.2013 18:49, Vladimir Kozlov wrote:
>> Albert,
>>
>> In disable_compilation_forever() the comment does not correspond to code.
>>
> I removed the comment.
>> In should_perform_shutdown() the _compiler_state could be changed
>> before other threads reach "if (comp->is_state_failed())" check in
>> init_compiler_runtime().
> True. I added a function should_exit(), which returns true if the state
> if failed, or shutting down.
>> Yes, decrementing with lock is fine, you are right.
>>
>> The message should say why we do shutdown (no space to initialize
>> compiler runtime):
>> warning("Shutting down compiler
>>
> The warning messages are now:
> - "Shutting down compiler %s (no space to run compiler)" or
> - "Initialization of %s thread failed (no space to run compiler thread)"
> if a C1 compiler thread fails to allocate memory.
>> Please, explain what references:
>>
>> + // We could delete compiler runtimes also. However,
>> + // there are references to the compiler runtime(s)
>> + // (e.g., by nmethods) which then fail. This can be
>>
> Done.
>> It would be nice to have regression test for this.
> I added a regression test, which checks that compiler threads exit, if
> there is not sufficient free code cache
> to init all threads. Testing a failing initialization of C2 is tricky,
> since a C2 initialization failure depends on the
> scheduling of the compiler threads.
>
> Thanks again,
> Albert
>>
>> Thanks,
>> Vladimir
>>
>> On 10/2/13 2:47 AM, Albert Noll wrote:
>>> Hi Vladimir,
>>>
>>> thanks again for the feedback. I tested the patch as you proposed,
>>> i.e., make sure that
>>> the patch works if the C1 and/or C2 compiler fails to initialize. I
>>> tested with up to 256 compiler
>>> threads.
>>>
>>> To make sure that all compiler threads exit, I had to do additional
>>> modifications in CompileQueue::get()
>>> and the caller of this method. With these changes, one can also exit
>>> compiler threads if -XX:-UseCodeCacheFlushing
>>> is set, which is also contained in this webrev.
>>>
>>> Here is the updated webrev:
>>> http://cr.openjdk.java.net/~anoll/8023014/webrev.03/
>>>
>>>
>>> See more comments inline:
>>>
>>>
>>> On 01.10.2013 18:17, Vladimir Kozlov wrote:
>>>> Albert,
>>>>
>>>> In general it looks good. Please, test it extensively with Tiered
>>>> with codecache size enough to initialize one
>>>> compiler but not an other to verify your code.
>>>>
>>> Done.
>>>> I think you need to swap lock and decrement otherwise it will deadlock:
>>>>
>>>> +bool AbstractCompiler::should_perform_shutdown() {
>>>> + MutexLocker only_one(CompileThread_lock);
>>>> + _num_compiler_threads--;
>>>>
>>> I simplified this function. In fact it is fine if the last thread
>>> (i.e., if _num_compiler_threads == 0)
>>> does the shutdown. The while() statement is really not necessary.
>>> However, we have to decrement
>>> _num_compiler_threads when we hold the lock. Otherwise we are not
>>> guaranteed to reach 0
>>> (-- is not atomic).
>>>
>>>> comp->set_shut_down(); and delete _compilers[0]; should be done by
>>>> one thread I think.
>>> Done.
>>>
>>>>
>>>> Small note, you accidentally removed nl in c2compiler.cpp:
>>>>
>>>> - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All
>>>> rights reserved.
>>>> +/* * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All
>>>> rights reserved.
>>>>
>>>>
>>> Fixed.
>>>
>>> Thanks again,
>>> Albert
>>>
>>>> Thanks,
>>>> Vladimir
>>>>
>>>> On 10/1/13 12:27 AM, Albert Noll wrote:
>>>>> Hi Vladimir,
>>>>>
>>>>> thanks again for looking at the patch. See comments inline:
>>>>> webrev: http://cr.openjdk.java.net/~anoll/8023014/webrev.02/
>>>>>
>>>>>
>>>>> On 26.09.2013 19:41, Vladimir Kozlov wrote:
>>>>>> Albert,
>>>>>>
>>>>>> There is small window between check and set_state where state can
>>>>>> became initialized or still be uninitialized:
>>>>>> + if (!is_initialized()) {
>>>>>> + set_state(failed);
>>>>>>
>>>>>> so you may hit assert in set_state().
>>>>>>
>>>>>> I think you need to call set_state(failed) only when C1 runtime is
>>>>>> initialized after lock:
>>>>>>
>>>>>> if (should_perform_init()) {
>>>>>> if (buffer_blob == NULL) {
>>>>>> set_state(failed);
>>>>>> } else {
>>>>>> init_c1_runtime();
>>>>>> set_state(initialized);
>>>>>> }
>>>>>> }
>>>>>>
>>>>> You are right. I adapted the patch according to your suggestion.
>>>>>
>>>>>> In this case it will match behavior for C2 which means that you
>>>>>> need to shutdown compilation since you was not able to
>>>>>> initialize compilation runtime. It will require more code to do
>>>>>> proper shutdown not just exiting thread (free
>>>>>> compilation queues, resetting flags). An it will be more
>>>>>> complicated for Tiered case (I think we can use simple
>>>>>> approach to shutdown all compilations even if only one Compiler is
>>>>>> not initialized since it is rare case).
>>>>>>
>>>>> I added code to shut-down compilation. If compiler runtime
>>>>> initialization fails, a flag is set which disables
>>>>> compilation forever. In the current
>>>>> version, all compilers are disabled if C1 and/or C2 runtime
>>>>> initialization fails (also in case of tiered compilation). I
>>>>> think this solution is fine for
>>>>> now, since a compiler runtime initialization failure should not
>>>>> happen in practice. If it ever turns out to be a
>>>>> problem, i.e., it is required that we
>>>>> we use one compiler if the other compiler failed to initialize, I
>>>>> suggest we fix this in another bug. The current bug
>>>>> appears only due to an artificial
>>>>> setting of the code cache size.
>>>>>
>>>>> Compiler shut-down is performed by one thread. This thread waits
>>>>> until all compiler threads have exited to compiler
>>>>> loop. The thread then
>>>>> deletes all tasks from the compile queue, deletes the compiler
>>>>> objects, and sets the objects to NULL.
>>>>>
>>>>> Please let me know if you think this solution is fine, or if there
>>>>> are other things that need to be considered.
>>>>> The current version passed jprt.
>>>>>
>>>>> Many thanks again,
>>>>> Albert
>>>>>
>>>>>> If C1 runtime was initialized but we was not able to allocate
>>>>>> buffer for some threads your current code in
>>>>>> compileBroker.cpp will handle such case. So you don't need to set
>>>>>> state to 'failed'.
>>>>>>
>>>>>> thanks,
>>>>>> Vladimir
>>>>>>
>>>>>> On 9/26/13 8:25 AM, Albert Noll wrote:
>>>>>>> Hi Vladimir,
>>>>>>>
>>>>>>> thanks for looking at the patch.
>>>>>>> Here is the new webrev:
>>>>>>> http://cr.openjdk.java.net/~anoll/8023014/webrev.01/
>>>>>>>
>>>>>>>
>>>>>>> See comments inline:
>>>>>>>
>>>>>>> On 26.09.2013 00:48, Vladimir Kozlov wrote:
>>>>>>>> Thank you, Albert
>>>>>>>>
>>>>>>>> I would suggest to do TieredStartAtLevel changes separately, it
>>>>>>>> is not
>>>>>>>> related to this bug.
>>>>>>>>
>>>>>>> Done.
>>>>>>>> Second, how we can guard the initialization with a field
>>>>>>>> (_compiler_state and original _is_initialized) which is not static?
>>>>>>>>
>>>>>>>> You don't need separate local do_init in C*_Compiler.cpp since
>>>>>>>> it is
>>>>>>>> used only once:
>>>>>>>>
>>>>>>> Done.
>>>>>>>> + if (should_perform_init()) {
>>>>>>>>
>>>>>>>> abstractCompiler.cpp:
>>>>>>>> You removed ThreadInVMfromNative and ResetNoHandleMark from
>>>>>>>> should_perform_init() and set_state(). Why? There is assert in
>>>>>>>> check_prelock_state() called from Monitor::lock():
>>>>>>>>
>>>>>>>> assert((!thread->is_Java_thread() || ((JavaThread
>>>>>>>> *)thread)->thread_state() == _thread_in_vm)
>>>>>>>> || rank() == Mutex::special, "wrong thread state for using
>>>>>>>> locks");
>>>>>>>>
>>>>>>>> Compiler threads are Java threads, so you should be in VM state
>>>>>>>> when
>>>>>>>> lock. How you did not hit this assert?
>>>>>>>>
>>>>>>> The state transition from native to VM (and ResetNoHandleMark) is
>>>>>>> now in
>>>>>>> compileBroker.cpp:1543.
>>>>>>>>
>>>>>>>> Typo in abstractCompiler.hpp 'methos':
>>>>>>>>
>>>>>>>> + // This method returns true for the first compiler thread that
>>>>>>>> reaches that methos.
>>>>>>>>
>>>>>>>> It is not 'compiler object', it is 'compiler runtime' (yes it was
>>>>>>>> before but it was not accurate, it could be mistaking for Compile
>>>>>>>> object created for each compilation):
>>>>>>>>
>>>>>>>> + // This thread will initialize the compiler object.
>>>>>>>>
>>>>>>>> Swap lines (and use 'runtime' in the comment):
>>>>>>>>
>>>>>>>> ! bool is_initialized () { return _compiler_state ==
>>>>>>>> initialized; }
>>>>>>>> ! // Get/set state of compiler objects
>>>>>>>>
>>>>>>>>
>>>>>>>> c2compiler.cpp:
>>>>>>>>
>>>>>>>> C2Compiler:: is not needed:
>>>>>>>>
>>>>>>>> + bool successful = C2Compiler::init_c2_runtime();
>>>>>>>>
>>>>>>>>
>>>>>>> Fixed the issues above.
>>>>>>>> Should we exit Compiler thread which failed local buffer allocation
>>>>>>>> instead parking? Why keep resources allocated for it?
>>>>>>>>
>>>>>>> You are right, there is no reason the keep these threads around.
>>>>>>> Compiler threads wo are not initialized correctly
>>>>>>> now exit the VM.
>>>>>>>
>>>>>>> The patch is currently in west queue.
>>>>>>>
>>>>>>> Many thanks again,
>>>>>>> Albert
>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Vladimir
>>>>>>>>
>>>>>>>> On 9/25/13 1:05 PM, Albert Noll wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> could I have a review for this patch?
>>>>>>>>>
>>>>>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8023014
>>>>>>>>> webrev: http://cr.openjdk.java.net/~anoll/8023014/webrev.00/
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Problem: C1/C2 compiler initialization can fail if there is not
>>>>>>>>> enough
>>>>>>>>> memory in the code cache to generate all stubs.
>>>>>>>>> This problem occurs only with a small code cache size.
>>>>>>>>>
>>>>>>>>> Solution: Check correctness of (parts of) C1/C2 initialization and
>>>>>>>>> disable compiler (C1 and/or C2) if the compiler / thread
>>>>>>>>> was not initialized correctly.
>>>>>>>>>
>>>>>>>>> Testing: jprt, test case, benchmarks
>>>>>>>>>
>>>>>>>>> This patch also contains a refactored version of compiler
>>>>>>>>> object/thread
>>>>>>>>> initialization. In the new version, a compiler object/thread is
>>>>>>>>> initialized prior entering the main compiler loop. In the old
>>>>>>>>> version,
>>>>>>>>> the check if the compiler/thread is initialized was
>>>>>>>>> done in the main compiler loop (and hence before every
>>>>>>>>> compilation).
>>>>>>>>>
>>>>>>>>> To continue execution with a limited code cache size, the code
>>>>>>>>> types
>>>>>>>>> 'AdapterBlob' and 'MethodHandlesAdapterBlob' must
>>>>>>>>> be 'critical' allocations in the code cache, i.e., they must
>>>>>>>>> use space
>>>>>>>>> reserved by CodeCacheMinimumFreeSpace.
>>>>>>>>>
>>>>>>>>> In addition I removed some unued code.
>>>>>>>>>
>>>>>>>>> Many thanks in advance for reviewing.
>>>>>>>>>
>>>>>>>>> Best,
>>>>>>>>> Albert
>>>>>>>
>>>>>
>>>
>
From christian.thalinger at oracle.com Thu Oct 3 15:11:10 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 15:11:10 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <524DE237.9020409@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
<6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
<524DE237.9020409@oracle.com>
Message-ID: <8646A703-7A02-4E09-A5E7-3633A244AB0E@oracle.com>
On Oct 3, 2013, at 2:31 PM, Vladimir Kozlov wrote:
> Christian,
>
> Put callee_method->is_compiled_lambda_form() and jvms->map()->argument(jvms, 0)->uncast() into local vars outside loop since they are invariants.
Invariants, exactly. That's why the compiler should do it for me. We are compiler people; we should trust compilers.
>
> Also both branches have to check (j->method() == callee_method). It could be checked first:
>
> if (j->method() == callee_method) {
> if (callee_is_compiled_lambda_form) {
> // Since compiled lambda forms are heavily reused we allow recursive inlining.
> // If it is truly a recursion (using the same "receiver") we limit inlining
> // otherwise we can easily blow the compiler stack.
> Node* caller_argument0 = j->map()->argument(j, 0)->uncast();
> if (caller_argument0 == callee_argument0) {
> inline_level++;
> }
> } else {
> inline_level++;
> }
> }
Good point.
http://cr.openjdk.java.net/~twisti/8011138/webrev.02/
>
> Thanks,
> Vladimir
>
> On 10/3/13 1:41 PM, Christian Thalinger wrote:
>>
>> On Oct 3, 2013, at 11:28 AM, Roland Westrelin wrote:
>>
>>>>> You should probably use:
>>>>> caller_argument0->uncast() == callee_argument0->uncast()
>>>>
>>>> I can but it's probably not necessary. If it's truly a recursive call even the CheckCastPP node should be the same, right?
>>>
>>> With 8024070, that will add Cast nodes in many places, I don't think that will necessarily be the case.
>>
>> Fair enough. I've added the uncast() calls:
>>
>> http://cr.openjdk.java.net/~twisti/8011138/webrev.01/
>>
>>>
>>> Roland.
>>
From vladimir.x.ivanov at oracle.com Thu Oct 3 15:17:02 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Fri, 04 Oct 2013 02:17:02 +0400
Subject: RFR (XXS): 8025849: Redundant "pid" in VM log file name (e.g.
hotspot_pidpid12345.log)
In-Reply-To: <524DE334.7000006@oracle.com>
References: <524DE1F1.1020300@oracle.com> <524DE334.7000006@oracle.com>
Message-ID: <524DECDE.9060903@oracle.com>
Thank you, Vladimir.
Best regards,
Vladimir Ivanov
On 10/4/13 1:35 AM, Vladimir Kozlov wrote:
> Good.
>
> Vladimir
>
> On 10/3/13 2:30 PM, Vladimir Ivanov wrote:
>> http://cr.openjdk.java.net/~vlivanov/8025849/webrev.00
>> 2 lines changed: 0 ins; 0 del; 2 mod
>>
>> make_log_name function does the following expansion: %p => pid{pid}.
>> Fix VM log file name, removing unnecessary "pid" from the pattern.
>>
>> FYI, I filed JDK-8025905 to track discrepancy between "%p" in LogFile &
>> ErrorFile.
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> [1] https://bugs.openjdk.java.net/browse/JDK-8025905
From azeem.jiva at oracle.com Thu Oct 3 15:21:07 2013
From: azeem.jiva at oracle.com (Azeem Jiva)
Date: Thu, 3 Oct 2013 15:21:07 -0700
Subject: RFR (XXS): 8025849: Redundant "pid" in VM log file name (e.g.
hotspot_pidpid12345.log)
In-Reply-To: <524DE61E.8090903@oracle.com>
References: <524DE1F1.1020300@oracle.com>
<78563D77-A1C5-44DB-97C6-E3C01ECEEFFE@oracle.com>
<524DE61E.8090903@oracle.com>
Message-ID:
Ahh then never mind. Looks good.
--
Azeem Jiva
@javawithjiva
On Oct 3, 2013, at 2:48 PM, Vladimir Ivanov wrote:
> Azeem,
>
> No, I haven't tested it on Windows.
>
> Expansion takes place in make_log_name_internal (ostream.cpp):
> if (pid_pos >= 0) {
> jio_snprintf(pid_text, sizeof(pid_text), "pid%u", pid);
> buffer_length += strlen(pid_text);
> }
>
> So, the behavior is consistent across supported platforms.
>
> Best regards,
> Vladimir Ivanov
>
> On 10/4/13 1:42 AM, Azeem Jiva wrote:
>> Did you test this on different OSes? Just to make sure that %p does
>> return 'pid#' rather than just '#'. Windows would be a good one to test
>> at the minimum. Otherwise it's fine (not a real reviewer).
>>
>>
>> --
>> Azeem Jiva
>> @javawithjiva
>>
>> On Oct 3, 2013, at 2:30 PM, Vladimir Ivanov
>> > wrote:
>>
>>> http://cr.openjdk.java.net/~vlivanov/8025849/webrev.00
>>> 2 lines changed: 0 ins; 0 del; 2 mod
>>>
>>> make_log_name function does the following expansion: %p => pid{pid}.
>>> Fix VM log file name, removing unnecessary "pid" from the pattern.
>>>
>>> FYI, I filed JDK-8025905 to track discrepancy between "%p" in LogFile
>>> & ErrorFile.
>>>
>>> Best regards,
>>> Vladimir Ivanov
>>>
>>> [1] https://bugs.openjdk.java.net/browse/JDK-8025905
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131003/d43830b6/attachment-0001.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 495 bytes
Desc: Message signed with OpenPGP using GPGMail
Url : http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131003/d43830b6/signature-0001.asc
From vladimir.kozlov at oracle.com Thu Oct 3 15:29:21 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Thu, 03 Oct 2013 15:29:21 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <8646A703-7A02-4E09-A5E7-3633A244AB0E@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
<6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
<524DE237.9020409@oracle.com>
<8646A703-7A02-4E09-A5E7-3633A244AB0E@oracle.com>
Message-ID: <524DEFC1.4090306@oracle.com>
On 10/3/13 3:11 PM, Christian Thalinger wrote:
>
> On Oct 3, 2013, at 2:31 PM, Vladimir Kozlov wrote:
>
>> Christian,
>>
>> Put callee_method->is_compiled_lambda_form() and jvms->map()->argument(jvms, 0)->uncast() into local vars outside loop since they are invariants.
>
> Invariants, exactly. That's why the compiler should do it for me. We are compiler people; we should trust compilers.
I don't trust compilers BECAUSE I am compiler guy and I know their
problems :)
If calls are not inlined (virtual or other reasons) they will not be
moved from the loop.
And you should know already that the best performance improvement come
from changing sources and not from compilers :)
I insist to move at least callee_argument0 outside the loop.
Vladimir
>>
>> Also both branches have to check (j->method() == callee_method). It could be checked first:
>>
>> if (j->method() == callee_method) {
>> if (callee_is_compiled_lambda_form) {
>> // Since compiled lambda forms are heavily reused we allow recursive inlining.
>> // If it is truly a recursion (using the same "receiver") we limit inlining
>> // otherwise we can easily blow the compiler stack.
>> Node* caller_argument0 = j->map()->argument(j, 0)->uncast();
>> if (caller_argument0 == callee_argument0) {
>> inline_level++;
>> }
>> } else {
>> inline_level++;
>> }
>> }
>
> Good point.
>
> http://cr.openjdk.java.net/~twisti/8011138/webrev.02/
>
>>
>> Thanks,
>> Vladimir
>>
>> On 10/3/13 1:41 PM, Christian Thalinger wrote:
>>>
>>> On Oct 3, 2013, at 11:28 AM, Roland Westrelin wrote:
>>>
>>>>>> You should probably use:
>>>>>> caller_argument0->uncast() == callee_argument0->uncast()
>>>>>
>>>>> I can but it's probably not necessary. If it's truly a recursive call even the CheckCastPP node should be the same, right?
>>>>
>>>> With 8024070, that will add Cast nodes in many places, I don't think that will necessarily be the case.
>>>
>>> Fair enough. I've added the uncast() calls:
>>>
>>> http://cr.openjdk.java.net/~twisti/8011138/webrev.01/
>>>
>>>>
>>>> Roland.
>>>
>
From vladimir.kozlov at oracle.com Thu Oct 3 16:15:47 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Thu, 03 Oct 2013 16:15:47 -0700
Subject: RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by
C1 String.valueOf method
In-Reply-To:
References:
Message-ID: <524DFAA3.1070303@oracle.com>
Christian,
Can you explain how _metadata pointer could be NULL if it was just
created and there is check h_m()->method_data() != NULL?
Thanks,
Vladimir
On 10/2/13 8:17 PM, Christian Thalinger wrote:
> https://bugs.openjdk.java.net/browse/JDK-8025566
> http://cr.openjdk.java.net/~twisti/8025566
>
> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
> Reviewed-by:
>
> The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
>
> I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
>
From christian.thalinger at oracle.com Thu Oct 3 16:50:14 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 16:50:14 -0700
Subject: RFR (L): 8015774: Add support for multiple code heaps
In-Reply-To:
References:
Message-ID:
Some general comments:
Don't use T1, T2, ? to name the tiers because SPARC processors are named like this. It's confusing. Use tier 1, tier 2, ? instead. The compilation policies actually talk about tier levels...
I was hoping that we can have a more loose definition of the code heaps. So we can easily add more. What this patch does is a good start but all the hardcoded values and fields need to go at a later point in time, in my opinion.
src/share/vm/code/codeBlob.hpp:
+// CodeBlob Types
+// Used in the CodeCache to assign CodeBlobs to different CodeHeaps
+enum CodeBlobType {
+ btMethodNoProfile = 0, // T1 and T4 methods (including native methods)
+ btMethodProfile = 1, // T2 and T3 methods with profile information
+ btNonMethod = 2 // Non-methods like Buffers, Adapters and Runtime Stubs
+};
The bt prefix is already overloaded (e.g. BasicType). Generally speaking, I never liked the fact that enums don't have their name as scope. Maybe we can agree on doing something like this:
struct CodeBlobType {
enum Enum {
NonMethod = 2
};
};
void foo() {
int a = CodeBlobType::NonMethod;
int b = (CodeBlobType::Enum) 1;
}
Or we move to C++11 :-)
http://www.stroustrup.com/C++11FAQ.html#enum
src/share/vm/code/codeCache.cpp:
+#define FOR_ALL_HEAPS(index) for (int index = 0; index < _heaps->length(); ++index)
I'm one of the people who started to hate macros (for various reasons). Although I see the point in defining these I'd rather go without them. Is there a way we can use STL vectors with our allocators? Or we could write our own iterator class which iterates either over GrowableArrays in general or the code heaps in particular.
src/share/vm/memory/heap.hpp:
+ const char* getName() const { return _name; }
This should either be get_name() or name().
Let's start the discussion and I'll do another review round later.
On Oct 2, 2013, at 7:06 AM, Tobias Hartmann wrote:
> Hi,
>
> please review the following change.
>
> bug: https://bugs.openjdk.java.net/browse/JDK-8015774
> webrev: http://cr.openjdk.java.net/~anoll/8015774/webrev.00/
>
> This change implements support for multiple code heaps in the code cache. The interface of the code cache was changed accordingly and references from other components of the VM were adapted. This includes the indirect references from:
> - the Serviceability Agent: vmStructs and the Java code cache interface (sun.jvm.hotspot.code.CodeCache)
> - the dtrace ustack helper script (jhelper.d)
> - the pstack support library libjvm_db.c
>
> Currently the code cache contains the following three code heaps each of which contains CodeBlobs of a specific type:
> - Non-Profiled methods: nmethods that are not profiled, i.e., those compiled at tier 1 or 4 and native methods
> - Profiled methods: nmethods that are profiled, i.e., those compiled at tier 2 or 3
> - Non-methods: Non-methods like Buffers, Adapters and Runtime Stubs
>
> By default, 2/3 of the ReservedCodeCacheSize is used for the non-profiled heap and 1/3 is used for the profiled heap. Experiments with a small code cache size have shown that this configuration performs best (see [1]). Sizes can be configured using the NonProfiledCodeHeapSize and ProfiledCodeHeapSize parameters. By now the non-method heap has a fixed size of 8mb. More tests have to be performed to determine reasonable default values for different build and runtime configurations. It would be also possible to add an additional heap for the CodeBlobs needed during VM startup (adapters, stubs, interpreter, ...) and use the non-method heap for non-method blobs allocated during runtime.
>
> The main benefit of this allocation is that functions operating on nmethods can now be optimized to only iterate over CodeBlobs on the nmethod heaps, avoiding a full scan of the code cache including the non-methods. Performance evaluation shows that this results in a great reduction of the sweeping time. Further it is now possible to extend the sweeper to selectively sweep nmethods of different compilation levels. Because it is more expensive to recompile a highly optimized method, it makes sense to first sweep those compiled at a lower level. Possible future optimizations may also include multithreaded sweeping and separation of nmethod code and metadata.
>
> The code was tested using Nashorn + Octane, DaCapo, SPECJvm2008 and jprt.
>
> Benchmark results:
> - [2] shows the score of the old and new version running Nashorn with the Octane benchmark at different code cache sizes (10 runs each, sizes < 32mb crash with the old version). An performance improvement of around 15% is reached.
> - [3] shows the sweep time of the NMethodSweeper during runs of the Octane benchmark with different code cache sizes (10 runs each). The time is greatly reduced with the new version.
> - [4] shows the time ratio (TOld / TNew - 1) of the DaCapo benchmarks with a code cache size of 64mb (30 runs with 20 warmups each). With the time differences being smaller than the confidence intervals it is not possible determine a difference between the two versions.
> - Multiple runs of the SPECJvm2008 benchmark with different code cache sizes did not show a difference between the two versions. This is probably due to the fact that not much code is compiled at runtime compared to Nashorn with the Octane benchmark.
>
> The error bars at each data point show the 95% confidence interval.
>
> [1] https://bugs.openjdk.java.net/secure/attachment/16372/OctaneRatio.png
> [2] https://bugs.openjdk.java.net/secure/attachment/16374/OctaneCCSizes_new.png
> [3] https://bugs.openjdk.java.net/secure/attachment/16373/OctaneSweepTime_new.png
> [4] https://bugs.openjdk.java.net/secure/attachment/16371/DaCapoCCSizes_64.png
>
> Thanks and best regards,
>
> Tobias
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131003/a2e16be4/attachment.html
From christian.thalinger at oracle.com Thu Oct 3 17:39:04 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 17:39:04 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <524DEFC1.4090306@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
<6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
<524DE237.9020409@oracle.com>
<8646A703-7A02-4E09-A5E7-3633A244AB0E@oracle.com>
<524DEFC1.4090306@oracle.com>
Message-ID: <90B374C8-BEEA-4DCC-A68A-B0AA5935C19D@oracle.com>
On Oct 3, 2013, at 3:29 PM, Vladimir Kozlov wrote:
> On 10/3/13 3:11 PM, Christian Thalinger wrote:
>>
>> On Oct 3, 2013, at 2:31 PM, Vladimir Kozlov wrote:
>>
>>> Christian,
>>>
>>> Put callee_method->is_compiled_lambda_form() and jvms->map()->argument(jvms, 0)->uncast() into local vars outside loop since they are invariants.
>>
>> Invariants, exactly. That's why the compiler should do it for me. We are compiler people; we should trust compilers.
>
> I don't trust compilers BECAUSE I am compiler guy and I know their problems :)
> If calls are not inlined (virtual or other reasons) they will not be moved from the loop.
>
> And you should know already that the best performance improvement come from changing sources and not from compilers :)
>
> I insist to move at least callee_argument0 outside the loop.
The code was easier to understand before but your wish is my command:
http://cr.openjdk.java.net/~twisti/8011138/webrev.03/
>
> Vladimir
>
>>>
>>> Also both branches have to check (j->method() == callee_method). It could be checked first:
>>>
>>> if (j->method() == callee_method) {
>>> if (callee_is_compiled_lambda_form) {
>>> // Since compiled lambda forms are heavily reused we allow recursive inlining.
>>> // If it is truly a recursion (using the same "receiver") we limit inlining
>>> // otherwise we can easily blow the compiler stack.
>>> Node* caller_argument0 = j->map()->argument(j, 0)->uncast();
>>> if (caller_argument0 == callee_argument0) {
>>> inline_level++;
>>> }
>>> } else {
>>> inline_level++;
>>> }
>>> }
>>
>> Good point.
>>
>> http://cr.openjdk.java.net/~twisti/8011138/webrev.02/
>>
>>>
>>> Thanks,
>>> Vladimir
>>>
>>> On 10/3/13 1:41 PM, Christian Thalinger wrote:
>>>>
>>>> On Oct 3, 2013, at 11:28 AM, Roland Westrelin wrote:
>>>>
>>>>>>> You should probably use:
>>>>>>> caller_argument0->uncast() == callee_argument0->uncast()
>>>>>>
>>>>>> I can but it's probably not necessary. If it's truly a recursive call even the CheckCastPP node should be the same, right?
>>>>>
>>>>> With 8024070, that will add Cast nodes in many places, I don't think that will necessarily be the case.
>>>>
>>>> Fair enough. I've added the uncast() calls:
>>>>
>>>> http://cr.openjdk.java.net/~twisti/8011138/webrev.01/
>>>>
>>>>>
>>>>> Roland.
>>>>
>>
From vitalyd at gmail.com Thu Oct 3 17:44:41 2013
From: vitalyd at gmail.com (Vitaly Davidovich)
Date: Thu, 3 Oct 2013 20:44:41 -0400
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To:
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
<6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
<524DE237.9020409@oracle.com>
<8646A703-7A02-4E09-A5E7-3633A244AB0E@oracle.com>
<524DEFC1.4090306@oracle.com>
<90B374C8-BEEA-4DCC-A68A-B0AA5935C19D@oracle.com>
Message-ID:
Chris, you can move is_compiled_lambda_form() a block higher and use it
there as well :).
Sent from my phone
On Oct 3, 2013 8:39 PM, "Christian Thalinger" <
christian.thalinger at oracle.com> wrote:
On Oct 3, 2013, at 3:29 PM, Vladimir Kozlov
wrote:
> On 10/3/13 3:11 PM, Christian Thalinger wrote:
>>
>> On Oct 3, 2013, at 2:31 PM, Vladimir Kozlov
wrote:
>>
>>> Christian,
>>>
>>> Put callee_method->is_compiled_lambda_form() and
jvms->map()->argument(jvms, 0)->uncast() into local vars outside loop since
they are invariants.
>>
>> Invariants, exactly. That's why the compiler should do it for me. We
are compiler people; we should trust compilers.
>
> I don't trust compilers BECAUSE I am compiler guy and I know their
problems :)
> If calls are not inlined (virtual or other reasons) they will not be
moved from the loop.
>
> And you should know already that the best performance improvement come
from changing sources and not from compilers :)
>
> I insist to move at least callee_argument0 outside the loop.
The code was easier to understand before but your wish is my command:
http://cr.openjdk.java.net/~twisti/8011138/webrev.03/
>
> Vladimir
>
>>>
>>> Also both branches have to check (j->method() == callee_method). It
could be checked first:
>>>
>>> if (j->method() == callee_method) {
>>> if (callee_is_compiled_lambda_form) {
>>> // Since compiled lambda forms are heavily reused we allow
recursive inlining.
>>> // If it is truly a recursion (using the same "receiver") we
limit inlining
>>> // otherwise we can easily blow the compiler stack.
>>> Node* caller_argument0 = j->map()->argument(j, 0)->uncast();
>>> if (caller_argument0 == callee_argument0) {
>>> inline_level++;
>>> }
>>> } else {
>>> inline_level++;
>>> }
>>> }
>>
>> Good point.
>>
>> http://cr.openjdk.java.net/~twisti/8011138/webrev.02/
>>
>>>
>>> Thanks,
>>> Vladimir
>>>
>>> On 10/3/13 1:41 PM, Christian Thalinger wrote:
>>>>
>>>> On Oct 3, 2013, at 11:28 AM, Roland Westrelin <
roland.westrelin at oracle.com> wrote:
>>>>
>>>>>>> You should probably use:
>>>>>>> caller_argument0->uncast() == callee_argument0->uncast()
>>>>>>
>>>>>> I can but it's probably not necessary. If it's truly a recursive
call even the CheckCastPP node should be the same, right?
>>>>>
>>>>> With 8024070, that will add Cast nodes in many places, I don't think
that will necessarily be the case.
>>>>
>>>> Fair enough. I've added the uncast() calls:
>>>>
>>>> http://cr.openjdk.java.net/~twisti/8011138/webrev.01/
>>>>
>>>>>
>>>>> Roland.
>>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131003/08ce22c9/attachment.html
From vladimir.kozlov at oracle.com Thu Oct 3 17:56:06 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Thu, 03 Oct 2013 17:56:06 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <90B374C8-BEEA-4DCC-A68A-B0AA5935C19D@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
<6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
<524DE237.9020409@oracle.com>
<8646A703-7A02-4E09-A5E7-3633A244AB0E@oracle.com>
<524DEFC1.4090306@oracle.com>
<90B374C8-BEEA-4DCC-A68A-B0AA5935C19D@oracle.com>
Message-ID: <524E1226.4080201@oracle.com>
Now it is good :)
Thanks,
Vladimir
On 10/3/13 5:39 PM, Christian Thalinger wrote:
>
> On Oct 3, 2013, at 3:29 PM, Vladimir Kozlov wrote:
>
>> On 10/3/13 3:11 PM, Christian Thalinger wrote:
>>>
>>> On Oct 3, 2013, at 2:31 PM, Vladimir Kozlov wrote:
>>>
>>>> Christian,
>>>>
>>>> Put callee_method->is_compiled_lambda_form() and jvms->map()->argument(jvms, 0)->uncast() into local vars outside loop since they are invariants.
>>>
>>> Invariants, exactly. That's why the compiler should do it for me. We are compiler people; we should trust compilers.
>>
>> I don't trust compilers BECAUSE I am compiler guy and I know their problems :)
>> If calls are not inlined (virtual or other reasons) they will not be moved from the loop.
>>
>> And you should know already that the best performance improvement come from changing sources and not from compilers :)
>>
>> I insist to move at least callee_argument0 outside the loop.
>
> The code was easier to understand before but your wish is my command:
>
> http://cr.openjdk.java.net/~twisti/8011138/webrev.03/
>
>>
>> Vladimir
>>
>>>>
>>>> Also both branches have to check (j->method() == callee_method). It could be checked first:
>>>>
>>>> if (j->method() == callee_method) {
>>>> if (callee_is_compiled_lambda_form) {
>>>> // Since compiled lambda forms are heavily reused we allow recursive inlining.
>>>> // If it is truly a recursion (using the same "receiver") we limit inlining
>>>> // otherwise we can easily blow the compiler stack.
>>>> Node* caller_argument0 = j->map()->argument(j, 0)->uncast();
>>>> if (caller_argument0 == callee_argument0) {
>>>> inline_level++;
>>>> }
>>>> } else {
>>>> inline_level++;
>>>> }
>>>> }
>>>
>>> Good point.
>>>
>>> http://cr.openjdk.java.net/~twisti/8011138/webrev.02/
>>>
>>>>
>>>> Thanks,
>>>> Vladimir
>>>>
>>>> On 10/3/13 1:41 PM, Christian Thalinger wrote:
>>>>>
>>>>> On Oct 3, 2013, at 11:28 AM, Roland Westrelin wrote:
>>>>>
>>>>>>>> You should probably use:
>>>>>>>> caller_argument0->uncast() == callee_argument0->uncast()
>>>>>>>
>>>>>>> I can but it's probably not necessary. If it's truly a recursive call even the CheckCastPP node should be the same, right?
>>>>>>
>>>>>> With 8024070, that will add Cast nodes in many places, I don't think that will necessarily be the case.
>>>>>
>>>>> Fair enough. I've added the uncast() calls:
>>>>>
>>>>> http://cr.openjdk.java.net/~twisti/8011138/webrev.01/
>>>>>
>>>>>>
>>>>>> Roland.
>>>>>
>>>
>
From christian.thalinger at oracle.com Thu Oct 3 18:34:09 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 18:34:09 -0700
Subject: RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1
String.valueOf method
In-Reply-To: <524DFAA3.1070303@oracle.com>
References:
<524DFAA3.1070303@oracle.com>
Message-ID: <0FC21397-D08E-4BD2-95BE-6B2C27E64909@oracle.com>
On Oct 3, 2013, at 4:15 PM, Vladimir Kozlov wrote:
> Christian,
>
> Can you explain how _metadata pointer could be NULL if it was just created and there is check h_m()->method_data() != NULL?
You are right. Since we cannot reproduce this bug it's a guessing game.
Your comment made me go back and look again. The reported error happened with a tier 2 compile and there is a different code path in LIRGenerator::increment_event_counter_impl() for CompLevel_limited_profile compiles:
if (level == CompLevel_limited_profile) {
address counters_adr = method->ensure_method_counters();
counter_holder = new_pointer_register();
__ move(LIR_OprFact::intptrConst(counters_adr), counter_holder);
Method::ensure_method_counters() tries to build a MethodCounters data structure if it's null but:
counter = Method::build_method_counters(mh(), CHECK_AND_CLEAR_NULL);
it clears the exception and returns null!
I really want C++ exceptions in the compiler?
>
> Thanks,
> Vladimir
>
> On 10/2/13 8:17 PM, Christian Thalinger wrote:
>> https://bugs.openjdk.java.net/browse/JDK-8025566
>> http://cr.openjdk.java.net/~twisti/8025566
>>
>> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
>> Reviewed-by:
>>
>> The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
>>
>> I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
>>
From christian.thalinger at oracle.com Thu Oct 3 18:37:37 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Thu, 3 Oct 2013 18:37:37 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To:
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
<6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
<524DE237.9020409@oracle.com>
<8646A703-7A02-4E09-A5E7-3633A244AB0E@oracle.com>
<524DEFC1.4090306@oracle.com>
<90B374C8-BEEA-4DCC-A68A-B0AA5935C19D@oracle.com>
Message-ID: <5C1077BC-A751-4F76-A8B5-3A787D8FA03E@oracle.com>
On Oct 3, 2013, at 5:44 PM, Vitaly Davidovich wrote:
> Chris, you can move is_compiled_lambda_form() a block higher and use it there as well :).
>
Holy! What is it with you guys? ;-)
Done.
http://cr.openjdk.java.net/~twisti/8011138/webrev.04/
> Sent from my phone
>
> On Oct 3, 2013 8:39 PM, "Christian Thalinger" wrote:
>
> On Oct 3, 2013, at 3:29 PM, Vladimir Kozlov wrote:
>
> > On 10/3/13 3:11 PM, Christian Thalinger wrote:
> >>
> >> On Oct 3, 2013, at 2:31 PM, Vladimir Kozlov wrote:
> >>
> >>> Christian,
> >>>
> >>> Put callee_method->is_compiled_lambda_form() and jvms->map()->argument(jvms, 0)->uncast() into local vars outside loop since they are invariants.
> >>
> >> Invariants, exactly. That's why the compiler should do it for me. We are compiler people; we should trust compilers.
> >
> > I don't trust compilers BECAUSE I am compiler guy and I know their problems :)
> > If calls are not inlined (virtual or other reasons) they will not be moved from the loop.
> >
> > And you should know already that the best performance improvement come from changing sources and not from compilers :)
> >
> > I insist to move at least callee_argument0 outside the loop.
>
> The code was easier to understand before but your wish is my command:
>
> http://cr.openjdk.java.net/~twisti/8011138/webrev.03/
>
> >
> > Vladimir
> >
> >>>
> >>> Also both branches have to check (j->method() == callee_method). It could be checked first:
> >>>
> >>> if (j->method() == callee_method) {
> >>> if (callee_is_compiled_lambda_form) {
> >>> // Since compiled lambda forms are heavily reused we allow recursive inlining.
> >>> // If it is truly a recursion (using the same "receiver") we limit inlining
> >>> // otherwise we can easily blow the compiler stack.
> >>> Node* caller_argument0 = j->map()->argument(j, 0)->uncast();
> >>> if (caller_argument0 == callee_argument0) {
> >>> inline_level++;
> >>> }
> >>> } else {
> >>> inline_level++;
> >>> }
> >>> }
> >>
> >> Good point.
> >>
> >> http://cr.openjdk.java.net/~twisti/8011138/webrev.02/
> >>
> >>>
> >>> Thanks,
> >>> Vladimir
> >>>
> >>> On 10/3/13 1:41 PM, Christian Thalinger wrote:
> >>>>
> >>>> On Oct 3, 2013, at 11:28 AM, Roland Westrelin wrote:
> >>>>
> >>>>>>> You should probably use:
> >>>>>>> caller_argument0->uncast() == callee_argument0->uncast()
> >>>>>>
> >>>>>> I can but it's probably not necessary. If it's truly a recursive call even the CheckCastPP node should be the same, right?
> >>>>>
> >>>>> With 8024070, that will add Cast nodes in many places, I don't think that will necessarily be the case.
> >>>>
> >>>> Fair enough. I've added the uncast() calls:
> >>>>
> >>>> http://cr.openjdk.java.net/~twisti/8011138/webrev.01/
> >>>>
> >>>>>
> >>>>> Roland.
> >>>>
> >>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131003/ef4ed0fd/attachment-0001.html
From vladimir.kozlov at oracle.com Thu Oct 3 19:01:44 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Thu, 03 Oct 2013 19:01:44 -0700
Subject: RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by
C1 String.valueOf method
In-Reply-To: <0FC21397-D08E-4BD2-95BE-6B2C27E64909@oracle.com>
References:
<524DFAA3.1070303@oracle.com>
<0FC21397-D08E-4BD2-95BE-6B2C27E64909@oracle.com>
Message-ID: <524E2188.6030103@oracle.com>
On 10/3/13 6:34 PM, Christian Thalinger wrote:
>
> On Oct 3, 2013, at 4:15 PM, Vladimir Kozlov wrote:
>
>> Christian,
>>
>> Can you explain how _metadata pointer could be NULL if it was just created and there is check h_m()->method_data() != NULL?
>
> You are right. Since we cannot reproduce this bug it's a guessing game.
>
> Your comment made me go back and look again. The reported error happened with a tier 2 compile and there is a different code path in LIRGenerator::increment_event_counter_impl() for CompLevel_limited_profile compiles:
>
> if (level == CompLevel_limited_profile) {
> address counters_adr = method->ensure_method_counters();
> counter_holder = new_pointer_register();
> __ move(LIR_OprFact::intptrConst(counters_adr), counter_holder);
>
> Method::ensure_method_counters() tries to build a MethodCounters data structure if it's null but:
>
> counter = Method::build_method_counters(mh(), CHECK_AND_CLEAR_NULL);
>
> it clears the exception and returns null!
Right. This is it! And the only place where result is checked for null callers of get_method_counters(). All other
places which call build_method_counters() do not check.
Vladimir
>
> I really want C++ exceptions in the compiler?
>
>>
>> Thanks,
>> Vladimir
>>
>> On 10/2/13 8:17 PM, Christian Thalinger wrote:
>>> https://bugs.openjdk.java.net/browse/JDK-8025566
>>> http://cr.openjdk.java.net/~twisti/8025566
>>>
>>> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
>>> Reviewed-by:
>>>
>>> The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
>>>
>>> I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
>>>
>
From roland.westrelin at oracle.com Fri Oct 4 01:26:54 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Fri, 4 Oct 2013 10:26:54 +0200
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <5C1077BC-A751-4F76-A8B5-3A787D8FA03E@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
<6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
<524DE237.9020409@oracle.com>
<8646A703-7A02-4E09-A5E7-3633A244AB0E@oracle.com>
<524DEFC1.4090306@oracle.com>
<90B374C8-BEEA-4DCC-A68A-B0AA5935C19D@oracle.com>
<5C1077BC-A751-4F76-A8B5-3A787D8FA03E@oracle.com>
Message-ID: <988DC321-E11B-4F8F-94E2-9EB92BE7567E@oracle.com>
> http://cr.openjdk.java.net/~twisti/8011138/webrev.04/
That looks good to me.
Roland.
From roland.westrelin at oracle.com Fri Oct 4 01:28:19 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Fri, 4 Oct 2013 10:28:19 +0200
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <524DB8EF.7030908@oracle.com>
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
<524DB1AB.8060406@oracle.com> <524DB675.6090101@oracle.com>
<524DB8EF.7030908@oracle.com>
Message-ID: <63FA819D-2D58-414B-94FD-2A8F81B1E0DB@oracle.com>
> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.02
That looks good to me.
Roland.
From vladimir.x.ivanov at oracle.com Fri Oct 4 02:10:32 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Fri, 04 Oct 2013 13:10:32 +0400
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <63FA819D-2D58-414B-94FD-2A8F81B1E0DB@oracle.com>
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
<524DB1AB.8060406@oracle.com> <524DB675.6090101@oracle.com>
<524DB8EF.7030908@oracle.com>
<63FA819D-2D58-414B-94FD-2A8F81B1E0DB@oracle.com>
Message-ID: <524E8608.9030100@oracle.com>
Thank you, Roland.
Best regards,
Vladimir Ivanov
On 10/4/13 12:28 PM, Roland Westrelin wrote:
>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.02
>
> That looks good to me.
>
> Roland.
>
From igor.veresov at oracle.com Fri Oct 4 03:34:43 2013
From: igor.veresov at oracle.com (Igor Veresov)
Date: Fri, 4 Oct 2013 14:34:43 +0400
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <524DB8EF.7030908@oracle.com>
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
<524DB1AB.8060406@oracle.com> <524DB675.6090101@oracle.com>
<524DB8EF.7030908@oracle.com>
Message-ID: <5F8D8C06-8518-44F0-9FC8-688834CAE0B6@oracle.com>
That looks good too.
igor
On Oct 3, 2013, at 10:35 PM, Vladimir Ivanov wrote:
> Thanks for catching that.
>
> How about that?
> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.02
>
> Best regards,
> Vladimir Ivanov
>
> On 10/3/13 10:24 PM, Vladimir Kozlov wrote:
>> You need to add cast (int)(j - lowval) since argument type is int. Some
>> C++ compiler will complain if no cast.
>>
>> Thanks,
>> Vladimir K
>>
>> On 10/3/13 11:04 AM, Vladimir Ivanov wrote:
>>> Vladimir,
>>>
>>> I like the idea to convert j to int64. It looks much cleaner now.
>>>
>>> Here's updated webrev:
>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.01
>>>
>>> Best regards,
>>> Vladimir Ivanov
>>>
>>> On 10/3/13 8:57 PM, Vladimir Kozlov wrote:
>>>> I don't think it is right. You need to have check before the loop's body
>>>> execution.
>>>> Also what about case r->lo() == MIN_INT? (j - lowval) will underflow.
>>>> I think we should use int64 type for these expressions as in other lines
>>>> of this method.
>>>>
>>>> Thanks,
>>>> Vladimir
>>>>
>>>> On 10/2/13 11:55 AM, Vladimir Ivanov wrote:
>>>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
>>>>> 7 lines changed: 4 ins; 0 del; 3 mod
>>>>>
>>>>> If hi->hi() == MAX_INT then, after (j == r->hi() && r == hi), j++
>>>>> overflows and j <= r->hi() succeeds again (leading to
>>>>> extra iterations and infinite loop in the product).
>>>>>
>>>>> The fix is to check whether upper limit is reached (j >= r->hi()) and
>>>>> stop iterating, if necessary.
>>>>>
>>>>> Also, did a small cleanup: eliminated unused parameter from
>>>>> SwitchRange::print.
>>>>>
>>>>> Testing: failing test case.
>>>>>
>>>>> Reviewed-by: iveresov, ?
>>>>>
>>>>> Best regards,
>>>>> Vladimir Ivanov
From vladimir.x.ivanov at oracle.com Fri Oct 4 04:27:17 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Fri, 04 Oct 2013 15:27:17 +0400
Subject: RFR (XS) 8024774: assert(_con < t->is_tuple()->cnt()) failed:
ProjNode::_con must be in range
In-Reply-To: <5F8D8C06-8518-44F0-9FC8-688834CAE0B6@oracle.com>
References: <524C6C12.9050200@oracle.com> <524DA1E6.1050903@oracle.com>
<524DB1AB.8060406@oracle.com> <524DB675.6090101@oracle.com>
<524DB8EF.7030908@oracle.com>
<5F8D8C06-8518-44F0-9FC8-688834CAE0B6@oracle.com>
Message-ID: <524EA615.6070500@oracle.com>
Thank you, Igor.
Best regards,
Vladimir Ivanov
On 10/4/13 2:34 PM, Igor Veresov wrote:
> That looks good too.
>
> igor
>
> On Oct 3, 2013, at 10:35 PM, Vladimir Ivanov wrote:
>
>> Thanks for catching that.
>>
>> How about that?
>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.02
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> On 10/3/13 10:24 PM, Vladimir Kozlov wrote:
>>> You need to add cast (int)(j - lowval) since argument type is int. Some
>>> C++ compiler will complain if no cast.
>>>
>>> Thanks,
>>> Vladimir K
>>>
>>> On 10/3/13 11:04 AM, Vladimir Ivanov wrote:
>>>> Vladimir,
>>>>
>>>> I like the idea to convert j to int64. It looks much cleaner now.
>>>>
>>>> Here's updated webrev:
>>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.01
>>>>
>>>> Best regards,
>>>> Vladimir Ivanov
>>>>
>>>> On 10/3/13 8:57 PM, Vladimir Kozlov wrote:
>>>>> I don't think it is right. You need to have check before the loop's body
>>>>> execution.
>>>>> Also what about case r->lo() == MIN_INT? (j - lowval) will underflow.
>>>>> I think we should use int64 type for these expressions as in other lines
>>>>> of this method.
>>>>>
>>>>> Thanks,
>>>>> Vladimir
>>>>>
>>>>> On 10/2/13 11:55 AM, Vladimir Ivanov wrote:
>>>>>> http://cr.openjdk.java.net/~vlivanov/8024774/webrev.00/
>>>>>> 7 lines changed: 4 ins; 0 del; 3 mod
>>>>>>
>>>>>> If hi->hi() == MAX_INT then, after (j == r->hi() && r == hi), j++
>>>>>> overflows and j <= r->hi() succeeds again (leading to
>>>>>> extra iterations and infinite loop in the product).
>>>>>>
>>>>>> The fix is to check whether upper limit is reached (j >= r->hi()) and
>>>>>> stop iterating, if necessary.
>>>>>>
>>>>>> Also, did a small cleanup: eliminated unused parameter from
>>>>>> SwitchRange::print.
>>>>>>
>>>>>> Testing: failing test case.
>>>>>>
>>>>>> Reviewed-by: iveresov, ?
>>>>>>
>>>>>> Best regards,
>>>>>> Vladimir Ivanov
>
From rickard.backman at oracle.com Fri Oct 4 04:35:32 2013
From: rickard.backman at oracle.com (=?iso-8859-1?Q?Rickard_B=E4ckman?=)
Date: Fri, 4 Oct 2013 13:35:32 +0200
Subject: RFR(XS) 8025657: compiler/intrinsics/mathexact/ConstantTest.java
fails on assert in lcm.cpp on solaris x64
Message-ID: <0D129F1B-F0D2-408E-918D-A4D1C0932152@oracle.com>
Hi all,
I would appreciate some reviews on this change.
On some machines when running with -XX:+DeoptimizeALot a test (test/compiler/intrinsics/mathexact/ConstantTest.java) failed with an assert.
assert(idx >= 0) failed: index should be set
It seems that gcm would put the addExact in a different block then the jump.
This change forces the producer of FlagsProjNode to be in the same block as
the consumer.
Bug: https://bugs.openjdk.java.net/browse/JDK-8025657
Webrev: http://cr.openjdk.java.net/~rbackman/8025657.1/
Thanks
/R
From roland.westrelin at oracle.com Fri Oct 4 08:28:46 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Fri, 4 Oct 2013 17:28:46 +0200
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To:
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
Message-ID:
Thanks Chris for taking a look at this.
On Oct 3, 2013, at 9:38 PM, Christian Thalinger wrote:
> src/share/vm/c1/c1_GraphBuilder.cpp:
>
> + Values* GraphBuilder::args_list_for_profiling(ciMethod* target, int& start, bool may_have_receiver) {
> + Values* GraphBuilder::collect_args_for_profiling(Values* args, ciMethod* target, bool may_have_receiver) {
>
> Both methods take a target as argument but never use it.
It's used in a subsequent patch. Thanks for spotting that. I'll remove it.
> src/share/vm/c1/c1_Instruction.hpp:
>
> + bool arg_needs_null_check(int i) const {
> + if (i >= 0 && i < (int)sizeof(_nonnull_state) * BitsPerByte) {
>
> This means that arguments after the 32nd position always need a null check. Can you add a comment to these methods explaining that as we do for Java API methods? Maybe use Doxygen style.
Ok.
>
> + virtual void input_values_do(ValueVisitor* f) {
> + if (_recv != NULL) f->visit(&_recv);
> + for (int i = 0; i < nb_profiled_args(); i++) f->visit(_obj_args->adr_at(i));
> + }
>
> Can you use some line breaks and curly braces here too?
Ok.
> src/share/vm/c1/c1_LIR.hpp:
>
> + intptr_t _current_klass; // what the profiling currently reports
>
> Why is the type intptr_t? Can't we use a more specific type here? Hmm, you tag klass pointers:
Indeed.
>
> + static intptr_t with_status(intptr_t k, intptr_t in) {
> + return k | (in & status_bits);
> + }
>
> src/share/vm/c1/c1_LIRGenerator.cpp:
>
> + static ciKlass* sig_next_klass(ciSignature* sig, ciKlass*& first_sig_k, int& j) {
>
> We should move this method into ciSignature. Or better ciSignatureStream.
I thought about it but figured it was too specific to be useful to anything else. Anyway, I can make that change.
>
> src/share/vm/ci/ciMethodData.hpp:
>
> + // If the compiler finds a profiled type is known statically for
>
> "type that is known"
Ok.
>
> src/share/vm/oops/methodData.cpp:
>
> + SignatureStream ss(inv.signature());
> + int args_count = 0;
> + for ( ; !ss.at_return_type(); ss.next()) {
> + if (ss.is_object() || ss.is_array()) {
> + args_count++;
> + if (args_count >= max) {
> + break;
> + }
> + }
> + }
>
> This would be a nice utility method in SignatureStream (sans the >= max part). Maybe reference_parameter_count(). Oh, btw., arrays are treated as objects:
>
> bool SignatureStream::is_object() const {
> return _type == T_OBJECT
> || _type == T_ARRAY;
> }
>
> It could be reused here right away:
>
> + #ifdef ASSERT
> + int count = 0;
> + for (SignatureStream ss(inv.signature()); !ss.at_return_type(); ss.next()) {
> + if (ss.is_object() || ss.is_array()) {
> + count++;
Ok, I'll see what I can do.
>
> + Bytecodes::Code bc = m->code_at(bci);
> + assert(Bytecodes::is_invoke(m->java_code_at(bci)), "arguments only make sense at call");
> +
> + return bc == Bytecodes::_invokedynamic || bc == Bytecodes::_invokehandle;
>
> Instead of this code you can use Bytecode_invoke and then query inv.is_invokedynamic() || inv.is_invokehandle().
Sure.
>
> + int MethodData::profile_arguments_flag() {
> + return TypeProfile % 10;
> + }
>
> Why 10?
That's also something that leaked from a subsequent patch. I intend to use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each of arguments, parameters, return value. I welcome other suggestions. I'll remove the % 10.
>
> + bool MethodData::profile_arguments() {
> + return profile_arguments_flag() > 0 && profile_arguments_flag() <= 2;
> + }
> +
> + bool MethodData::profile_arguments_jsr292_only() {
> + return profile_arguments_flag() == 1;
> + }
> +
> + bool MethodData::profile_all_arguments() {
> + return profile_arguments_flag() == 2;
> + }
>
> I think you should have an enum for all of these constants.
Ok.
>
> src/share/vm/oops/methodData.hpp:
>
> + void set_int_at_unchecked(int index, int value) {
> + data()->set_cell_at(index, (intptr_t) value);
> + }
>
> This method is not used.
Well you're much better than I am at spotting unused stuff. I'll remove it.
>
> + return _args.set_type(i, TypeEntries::with_status((intptr_t)k, current));
>
> Maybe you should add another with_status method that takes a Klass* and do the cast there.
Ok.
>
> src/share/vm/runtime/globals.hpp:
>
> + develop(bool, PrintMethodDataStats, false, \
>
> Most of these flags are named *Statistics.
I'll make the change.
>
> + product_pd(uintx, TypeProfile, \
> + "Type profiling of arguments at call:" \
> + "0->off ; 1->js292 only; 2->all methods") \
> + product(intx, TypeProfileArgsLimit, 2, \
> + "max number of call arguments to consider for type profiling") \
> + \
>
> Empty line missing between.
I'll add the missing like.
>
> On Oct 2, 2013, at 10:02 AM, Roland Westrelin wrote:
>
>> Here is a new webrev for the new profiling points, only profiling of arguments at calls this time. This one includes tiered support on 32bit and 64bit x86.
>>
>> http://cr.openjdk.java.net/~roland/8023657/webrev.01/
>>
>> The output of -XX:+PrintMethodData is:
>>
>> 6 invokevirtual 2
>> 0 bci: 6 VirtualCallData count(0) entries(1)
>> 'TestProfiling'(4746 1.00)
>> argument types 0: stack(1) 'TestProfiling$C'
>> 1: stack(2) unknown (null seen)
>>
>> Profiling can either be off, on only for jsr292 related calls (invokedynamic, invokehandle or all invokes in a lambda form) or on for all methods and invokes. -XX:TypeProfile={0,1,2} is used to pick a level of profiling.
>> Once all profiling is in (arguments, parameters, return value), in order to limit the number of options my plan is to use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each. TypeProfile=111, Typeprofile=222 etc.
>> Profiling is by default on only for jsr292 related calls in order to not impact startup/footprint of standard java apps.
>>
>> Roland.
>>
>>
>
From vladimir.kozlov at oracle.com Fri Oct 4 08:54:48 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Fri, 04 Oct 2013 08:54:48 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <5C1077BC-A751-4F76-A8B5-3A787D8FA03E@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
<6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
<524DE237.9020409@oracle.com>
<8646A703-7A02-4E09-A5E7-3633A244AB0E@oracle.com>
<524DEFC1.4090306@oracle.com>
<90B374C8-BEEA-4DCC-A68A-B0AA5935C19D@oracle.com>
<5C1077BC-A751-4F76-A8B5-3A787D8FA03E@oracle.com>
Message-ID: <524EE4C8.7080602@oracle.com>
Good.
Vladimir
On 10/3/13 6:37 PM, Christian Thalinger wrote:
>
> On Oct 3, 2013, at 5:44 PM, Vitaly Davidovich > wrote:
>
>> Chris, you can move is_compiled_lambda_form() a block higher and use it there as well :).
>>
> Holy! What is it with you guys? ;-)
>
> Done.
>
> http://cr.openjdk.java.net/~twisti/8011138/webrev.04/
>>
>> Sent from my phone
>>
>> On Oct 3, 2013 8:39 PM, "Christian Thalinger" >
>> wrote:
>>
>>
>> On Oct 3, 2013, at 3:29 PM, Vladimir Kozlov > wrote:
>>
>> > On 10/3/13 3:11 PM, Christian Thalinger wrote:
>> >>
>> >> On Oct 3, 2013, at 2:31 PM, Vladimir Kozlov > wrote:
>> >>
>> >>> Christian,
>> >>>
>> >>> Put callee_method->is_compiled_lambda_form() and jvms->map()->argument(jvms, 0)->uncast() into local vars
>> outside loop since they are invariants.
>> >>
>> >> Invariants, exactly. That's why the compiler should do it for me. We are compiler people; we should trust
>> compilers.
>> >
>> > I don't trust compilers BECAUSE I am compiler guy and I know their problems :)
>> > If calls are not inlined (virtual or other reasons) they will not be moved from the loop.
>> >
>> > And you should know already that the best performance improvement come from changing sources and not from
>> compilers :)
>> >
>> > I insist to move at least callee_argument0 outside the loop.
>>
>> The code was easier to understand before but your wish is my command:
>>
>> http://cr.openjdk.java.net/~twisti/8011138/webrev.03/
>>
>> >
>> > Vladimir
>> >
>> >>>
>> >>> Also both branches have to check (j->method() == callee_method). It could be checked first:
>> >>>
>> >>> if (j->method() == callee_method) {
>> >>> if (callee_is_compiled_lambda_form) {
>> >>> // Since compiled lambda forms are heavily reused we allow recursive inlining.
>> >>> // If it is truly a recursion (using the same "receiver") we limit inlining
>> >>> // otherwise we can easily blow the compiler stack.
>> >>> Node* caller_argument0 = j->map()->argument(j, 0)->uncast();
>> >>> if (caller_argument0 == callee_argument0) {
>> >>> inline_level++;
>> >>> }
>> >>> } else {
>> >>> inline_level++;
>> >>> }
>> >>> }
>> >>
>> >> Good point.
>> >>
>> >> http://cr.openjdk.java.net/~twisti/8011138/webrev.02/
>> >>
>> >>>
>> >>> Thanks,
>> >>> Vladimir
>> >>>
>> >>> On 10/3/13 1:41 PM, Christian Thalinger wrote:
>> >>>>
>> >>>> On Oct 3, 2013, at 11:28 AM, Roland Westrelin > > wrote:
>> >>>>
>> >>>>>>> You should probably use:
>> >>>>>>> caller_argument0->uncast() == callee_argument0->uncast()
>> >>>>>>
>> >>>>>> I can but it's probably not necessary. If it's truly a recursive call even the CheckCastPP node should be
>> the same, right?
>> >>>>>
>> >>>>> With 8024070, that will add Cast nodes in many places, I don't think that will necessarily be the case.
>> >>>>
>> >>>> Fair enough. I've added the uncast() calls:
>> >>>>
>> >>>> http://cr.openjdk.java.net/~twisti/8011138/webrev.01/
>> >>>>
>> >>>>>
>> >>>>> Roland.
>> >>>>
>> >>
>>
>
From christian.thalinger at oracle.com Fri Oct 4 09:54:34 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Fri, 4 Oct 2013 09:54:34 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <988DC321-E11B-4F8F-94E2-9EB92BE7567E@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
<6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
<524DE237.9020409@oracle.com>
<8646A703-7A02-4E09-A5E7-3633A244AB0E@oracle.com>
<524DEFC1.4090306@oracle.com>
<90B374C8-BEEA-4DCC-A68A-B0AA5935C19D@oracle.com>
<5C1077BC-A751-4F76-A8B5-3A787D8FA03E@oracle.com>
<988DC321-E11B-4F8F-94E2-9EB92BE7567E@oracle.com>
Message-ID: <70F2E3D3-CA83-46E9-A3C4-CF477C1D5287@oracle.com>
Thank you, Roland.
On Oct 4, 2013, at 1:26 AM, Roland Westrelin wrote:
>> http://cr.openjdk.java.net/~twisti/8011138/webrev.04/
>
> That looks good to me.
>
> Roland.
>
From christian.thalinger at oracle.com Fri Oct 4 09:54:42 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Fri, 4 Oct 2013 09:54:42 -0700
Subject: RFR (S): 8011138: C2: stack overflow in compiler thread because
of recursive inlining of lambda form methods
In-Reply-To: <524EE4C8.7080602@oracle.com>
References: <915DE241-DCCD-4D3B-BFC5-DA4AEF991600@oracle.com>
<3C150E75-D825-4C2B-A010-177A0F0508F4@oracle.com>
<3F370332-55B4-4B5D-B1B3-D1FE1F3DAD52@oracle.com>
<1F44EC2B-9383-4798-B2ED-4903689476D0@oracle.com>
<6D170CE3-FF3B-4899-A675-FADB6E13039E@oracle.com>
<524DE237.9020409@oracle.com>
<8646A703-7A02-4E09-A5E7-3633A244AB0E@oracle.com>
<524DEFC1.4090306@oracle.com>
<90B374C8-BEEA-4DCC-A68A-B0AA5935C19D@oracle.com>
<5C1077BC-A751-4F76-A8B5-3A787D8FA03E@oracle.com>
<524EE4C8.7080602@oracle.com>
Message-ID: <423DCAEB-49E8-44B2-9B65-E8398DD1AD3F@oracle.com>
Thank you, Vladimir.
On Oct 4, 2013, at 8:54 AM, Vladimir Kozlov wrote:
> Good.
>
> Vladimir
>
> On 10/3/13 6:37 PM, Christian Thalinger wrote:
>>
>> On Oct 3, 2013, at 5:44 PM, Vitaly Davidovich > wrote:
>>
>>> Chris, you can move is_compiled_lambda_form() a block higher and use it there as well :).
>>>
>> Holy! What is it with you guys? ;-)
>>
>> Done.
>>
>> http://cr.openjdk.java.net/~twisti/8011138/webrev.04/
>>>
>>> Sent from my phone
>>>
>>> On Oct 3, 2013 8:39 PM, "Christian Thalinger" >
>>> wrote:
>>>
>>>
>>> On Oct 3, 2013, at 3:29 PM, Vladimir Kozlov > wrote:
>>>
>>> > On 10/3/13 3:11 PM, Christian Thalinger wrote:
>>> >>
>>> >> On Oct 3, 2013, at 2:31 PM, Vladimir Kozlov > wrote:
>>> >>
>>> >>> Christian,
>>> >>>
>>> >>> Put callee_method->is_compiled_lambda_form() and jvms->map()->argument(jvms, 0)->uncast() into local vars
>>> outside loop since they are invariants.
>>> >>
>>> >> Invariants, exactly. That's why the compiler should do it for me. We are compiler people; we should trust
>>> compilers.
>>> >
>>> > I don't trust compilers BECAUSE I am compiler guy and I know their problems :)
>>> > If calls are not inlined (virtual or other reasons) they will not be moved from the loop.
>>> >
>>> > And you should know already that the best performance improvement come from changing sources and not from
>>> compilers :)
>>> >
>>> > I insist to move at least callee_argument0 outside the loop.
>>>
>>> The code was easier to understand before but your wish is my command:
>>>
>>> http://cr.openjdk.java.net/~twisti/8011138/webrev.03/
>>>
>>> >
>>> > Vladimir
>>> >
>>> >>>
>>> >>> Also both branches have to check (j->method() == callee_method). It could be checked first:
>>> >>>
>>> >>> if (j->method() == callee_method) {
>>> >>> if (callee_is_compiled_lambda_form) {
>>> >>> // Since compiled lambda forms are heavily reused we allow recursive inlining.
>>> >>> // If it is truly a recursion (using the same "receiver") we limit inlining
>>> >>> // otherwise we can easily blow the compiler stack.
>>> >>> Node* caller_argument0 = j->map()->argument(j, 0)->uncast();
>>> >>> if (caller_argument0 == callee_argument0) {
>>> >>> inline_level++;
>>> >>> }
>>> >>> } else {
>>> >>> inline_level++;
>>> >>> }
>>> >>> }
>>> >>
>>> >> Good point.
>>> >>
>>> >> http://cr.openjdk.java.net/~twisti/8011138/webrev.02/
>>> >>
>>> >>>
>>> >>> Thanks,
>>> >>> Vladimir
>>> >>>
>>> >>> On 10/3/13 1:41 PM, Christian Thalinger wrote:
>>> >>>>
>>> >>>> On Oct 3, 2013, at 11:28 AM, Roland Westrelin >> > wrote:
>>> >>>>
>>> >>>>>>> You should probably use:
>>> >>>>>>> caller_argument0->uncast() == callee_argument0->uncast()
>>> >>>>>>
>>> >>>>>> I can but it's probably not necessary. If it's truly a recursive call even the CheckCastPP node should be
>>> the same, right?
>>> >>>>>
>>> >>>>> With 8024070, that will add Cast nodes in many places, I don't think that will necessarily be the case.
>>> >>>>
>>> >>>> Fair enough. I've added the uncast() calls:
>>> >>>>
>>> >>>> http://cr.openjdk.java.net/~twisti/8011138/webrev.01/
>>> >>>>
>>> >>>>>
>>> >>>>> Roland.
>>> >>>>
>>> >>
>>>
>>
From christian.thalinger at oracle.com Fri Oct 4 11:06:20 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Fri, 4 Oct 2013 11:06:20 -0700
Subject: RFR(XS) 8025657: compiler/intrinsics/mathexact/ConstantTest.java
fails on assert in lcm.cpp on solaris x64
In-Reply-To: <0D129F1B-F0D2-408E-918D-A4D1C0932152@oracle.com>
References: <0D129F1B-F0D2-408E-918D-A4D1C0932152@oracle.com>
Message-ID:
Would it be possible to put all this logic into FlagsProjNode::pinned()?
On Oct 4, 2013, at 4:35 AM, Rickard B?ckman wrote:
> Hi all,
>
> I would appreciate some reviews on this change.
>
> On some machines when running with -XX:+DeoptimizeALot a test (test/compiler/intrinsics/mathexact/ConstantTest.java) failed with an assert.
> assert(idx >= 0) failed: index should be set
>
> It seems that gcm would put the addExact in a different block then the jump.
> This change forces the producer of FlagsProjNode to be in the same block as
> the consumer.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8025657
> Webrev: http://cr.openjdk.java.net/~rbackman/8025657.1/
>
> Thanks
> /R
From vladimir.kozlov at oracle.com Fri Oct 4 11:55:37 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Fri, 04 Oct 2013 11:55:37 -0700
Subject: RFR(XS) 8025657: compiler/intrinsics/mathexact/ConstantTest.java
fails on assert in lcm.cpp on solaris x64
In-Reply-To: <0D129F1B-F0D2-408E-918D-A4D1C0932152@oracle.com>
References: <0D129F1B-F0D2-408E-918D-A4D1C0932152@oracle.com>
Message-ID: <524F0F29.3070800@oracle.com>
Rickard,
addExact, should in must_clone[] list since it produce flag (I think
your original changes have it). With that it should be scheduled near
use (see PhaseCFG::schedule_late()). The problem could be it has 2 uses.
FlagsProj should be scheduled near consumer of the flag (since it is
also in must_clone[]). Otherwise flags state could be changes by other
instructions. So moving it to addExact block is wrong. It should be
opposite: addExact should at the same block as FlagsProj and conditional
jump.
Vladimir
On 10/4/13 4:35 AM, Rickard B?ckman wrote:
> Hi all,
>
> I would appreciate some reviews on this change.
>
> On some machines when running with -XX:+DeoptimizeALot a test (test/compiler/intrinsics/mathexact/ConstantTest.java) failed with an assert.
> assert(idx >= 0) failed: index should be set
>
> It seems that gcm would put the addExact in a different block then the jump.
> This change forces the producer of FlagsProjNode to be in the same block as
> the consumer.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8025657
> Webrev: http://cr.openjdk.java.net/~rbackman/8025657.1/
>
> Thanks
> /R
>
From christian.thalinger at oracle.com Fri Oct 4 14:52:02 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Fri, 4 Oct 2013 14:52:02 -0700
Subject: RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1
String.valueOf method
In-Reply-To: <524E2188.6030103@oracle.com>
References:
<524DFAA3.1070303@oracle.com>
<0FC21397-D08E-4BD2-95BE-6B2C27E64909@oracle.com>
<524E2188.6030103@oracle.com>
Message-ID:
Here is the (hopefully) correct fix for this problem:
http://cr.openjdk.java.net/~twisti/8025566/webrev.01/
I've made ciMethod::ensure_method_counters() call Method::get_method_counters() because they did the same job.
For C1 I can provoke the failure situation and C1 bails out of the compilation just fine:
1652 157 2 java.io.FilterInputStream::read (11 bytes)
compilation bailout: method counters allocation failed
1652 157 2 java.io.FilterInputStream::read (11 bytes) COMPILE SKIPPED: method counters allocation failed (retry at different tier)
For C2 I wasn't able to get to the point where the code in question is executed. I opted for a more conservative way: record a failure but continue the compile. If we'd return straightaway the graph might be in a bad state and we could crash somewhere else. When continuing the compile we can be sure the graph is sane and another failing() check somewhere will bail out for us eventually.
On Oct 3, 2013, at 7:01 PM, Vladimir Kozlov wrote:
> On 10/3/13 6:34 PM, Christian Thalinger wrote:
>>
>> On Oct 3, 2013, at 4:15 PM, Vladimir Kozlov wrote:
>>
>>> Christian,
>>>
>>> Can you explain how _metadata pointer could be NULL if it was just created and there is check h_m()->method_data() != NULL?
>>
>> You are right. Since we cannot reproduce this bug it's a guessing game.
>>
>> Your comment made me go back and look again. The reported error happened with a tier 2 compile and there is a different code path in LIRGenerator::increment_event_counter_impl() for CompLevel_limited_profile compiles:
>>
>> if (level == CompLevel_limited_profile) {
>> address counters_adr = method->ensure_method_counters();
>> counter_holder = new_pointer_register();
>> __ move(LIR_OprFact::intptrConst(counters_adr), counter_holder);
>>
>> Method::ensure_method_counters() tries to build a MethodCounters data structure if it's null but:
>>
>> counter = Method::build_method_counters(mh(), CHECK_AND_CLEAR_NULL);
>>
>> it clears the exception and returns null!
>
> Right. This is it! And the only place where result is checked for null callers of get_method_counters(). All other places which call build_method_counters() do not check.
>
> Vladimir
>
>>
>> I really want C++ exceptions in the compiler?
>>
>>>
>>> Thanks,
>>> Vladimir
>>>
>>> On 10/2/13 8:17 PM, Christian Thalinger wrote:
>>>> https://bugs.openjdk.java.net/browse/JDK-8025566
>>>> http://cr.openjdk.java.net/~twisti/8025566
>>>>
>>>> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
>>>> Reviewed-by:
>>>>
>>>> The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
>>>>
>>>> I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
>>>>
>>
From vladimir.kozlov at oracle.com Fri Oct 4 15:43:47 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Fri, 04 Oct 2013 15:43:47 -0700
Subject: RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by
C1 String.valueOf method
In-Reply-To:
References:
<524DFAA3.1070303@oracle.com>
<0FC21397-D08E-4BD2-95BE-6B2C27E64909@oracle.com>
<524E2188.6030103@oracle.com>
Message-ID: <524F44A3.9030102@oracle.com>
On 10/4/13 2:52 PM, Christian Thalinger wrote:
> Here is the (hopefully) correct fix for this problem:
>
> http://cr.openjdk.java.net/~twisti/8025566/webrev.01/
>
> I've made ciMethod::ensure_method_counters() call Method::get_method_counters() because they did the same job.
>
> For C1 I can provoke the failure situation and C1 bails out of the compilation just fine:
>
> 1652 157 2 java.io.FilterInputStream::read (11 bytes)
> compilation bailout: method counters allocation failed
> 1652 157 2 java.io.FilterInputStream::read (11 bytes) COMPILE SKIPPED: method counters allocation failed (retry at different tier)
>
> For C2 I wasn't able to get to the point where the code in question is executed. I opted for a more conservative way: record a failure but continue the compile. If we'd return straightaway the graph might be in a bad state and we could crash somewhere else. When continuing the compile we can be sure the graph is sane and another failing() check somewhere will bail out for us eventually.
It is used only when C2 generates profiling code (SAP).
I think you should return from increment_and_test_invocation_counter()
if counters_adr is NULL - don't generate increment code. The code path
after that has failing() check so I agree that you don't need to add new
one.
There is other place missing NULL check: ciReplay::initialize()
Thanks,
Vladimir
>
> On Oct 3, 2013, at 7:01 PM, Vladimir Kozlov wrote:
>
>> On 10/3/13 6:34 PM, Christian Thalinger wrote:
>>>
>>> On Oct 3, 2013, at 4:15 PM, Vladimir Kozlov wrote:
>>>
>>>> Christian,
>>>>
>>>> Can you explain how _metadata pointer could be NULL if it was just created and there is check h_m()->method_data() != NULL?
>>>
>>> You are right. Since we cannot reproduce this bug it's a guessing game.
>>>
>>> Your comment made me go back and look again. The reported error happened with a tier 2 compile and there is a different code path in LIRGenerator::increment_event_counter_impl() for CompLevel_limited_profile compiles:
>>>
>>> if (level == CompLevel_limited_profile) {
>>> address counters_adr = method->ensure_method_counters();
>>> counter_holder = new_pointer_register();
>>> __ move(LIR_OprFact::intptrConst(counters_adr), counter_holder);
>>>
>>> Method::ensure_method_counters() tries to build a MethodCounters data structure if it's null but:
>>>
>>> counter = Method::build_method_counters(mh(), CHECK_AND_CLEAR_NULL);
>>>
>>> it clears the exception and returns null!
>>
>> Right. This is it! And the only place where result is checked for null callers of get_method_counters(). All other places which call build_method_counters() do not check.
>>
>> Vladimir
>>
>>>
>>> I really want C++ exceptions in the compiler?
>>>
>>>>
>>>> Thanks,
>>>> Vladimir
>>>>
>>>> On 10/2/13 8:17 PM, Christian Thalinger wrote:
>>>>> https://bugs.openjdk.java.net/browse/JDK-8025566
>>>>> http://cr.openjdk.java.net/~twisti/8025566
>>>>>
>>>>> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
>>>>> Reviewed-by:
>>>>>
>>>>> The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
>>>>>
>>>>> I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
>>>>>
>>>
>
From christian.thalinger at oracle.com Fri Oct 4 17:14:03 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Fri, 4 Oct 2013 17:14:03 -0700
Subject: RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1
String.valueOf method
In-Reply-To: <524F44A3.9030102@oracle.com>
References:
<524DFAA3.1070303@oracle.com>
<0FC21397-D08E-4BD2-95BE-6B2C27E64909@oracle.com>
<524E2188.6030103@oracle.com>
<524F44A3.9030102@oracle.com>
Message-ID: <00B64DD1-3419-4D03-956D-9F7B59FAB17B@oracle.com>
On Oct 4, 2013, at 3:43 PM, Vladimir Kozlov wrote:
> On 10/4/13 2:52 PM, Christian Thalinger wrote:
>> Here is the (hopefully) correct fix for this problem:
>>
>> http://cr.openjdk.java.net/~twisti/8025566/webrev.01/
>>
>> I've made ciMethod::ensure_method_counters() call Method::get_method_counters() because they did the same job.
>>
>> For C1 I can provoke the failure situation and C1 bails out of the compilation just fine:
>>
>> 1652 157 2 java.io.FilterInputStream::read (11 bytes)
>> compilation bailout: method counters allocation failed
>> 1652 157 2 java.io.FilterInputStream::read (11 bytes) COMPILE SKIPPED: method counters allocation failed (retry at different tier)
>>
>> For C2 I wasn't able to get to the point where the code in question is executed. I opted for a more conservative way: record a failure but continue the compile. If we'd return straightaway the graph might be in a bad state and we could crash somewhere else. When continuing the compile we can be sure the graph is sane and another failing() check somewhere will bail out for us eventually.
>
> It is used only when C2 generates profiling code (SAP).
Ahh! That explains why I couldn't trigger it.
> I think you should return from increment_and_test_invocation_counter() if counters_adr is NULL - don't generate increment code.
Ok.
> The code path after that has failing() check so I agree that you don't need to add new one.
>
> There is other place missing NULL check: ciReplay::initialize()
Thanks for catching that. I used Method::get_method_counters() there as well and a guarantee because if we cannot allocate the method counters it doesn't make sense to continue.
http://cr.openjdk.java.net/~twisti/8025566/webrev.02/
>
> Thanks,
> Vladimir
>
>>
>> On Oct 3, 2013, at 7:01 PM, Vladimir Kozlov wrote:
>>
>>> On 10/3/13 6:34 PM, Christian Thalinger wrote:
>>>>
>>>> On Oct 3, 2013, at 4:15 PM, Vladimir Kozlov wrote:
>>>>
>>>>> Christian,
>>>>>
>>>>> Can you explain how _metadata pointer could be NULL if it was just created and there is check h_m()->method_data() != NULL?
>>>>
>>>> You are right. Since we cannot reproduce this bug it's a guessing game.
>>>>
>>>> Your comment made me go back and look again. The reported error happened with a tier 2 compile and there is a different code path in LIRGenerator::increment_event_counter_impl() for CompLevel_limited_profile compiles:
>>>>
>>>> if (level == CompLevel_limited_profile) {
>>>> address counters_adr = method->ensure_method_counters();
>>>> counter_holder = new_pointer_register();
>>>> __ move(LIR_OprFact::intptrConst(counters_adr), counter_holder);
>>>>
>>>> Method::ensure_method_counters() tries to build a MethodCounters data structure if it's null but:
>>>>
>>>> counter = Method::build_method_counters(mh(), CHECK_AND_CLEAR_NULL);
>>>>
>>>> it clears the exception and returns null!
>>>
>>> Right. This is it! And the only place where result is checked for null callers of get_method_counters(). All other places which call build_method_counters() do not check.
>>>
>>> Vladimir
>>>
>>>>
>>>> I really want C++ exceptions in the compiler?
>>>>
>>>>>
>>>>> Thanks,
>>>>> Vladimir
>>>>>
>>>>> On 10/2/13 8:17 PM, Christian Thalinger wrote:
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8025566
>>>>>> http://cr.openjdk.java.net/~twisti/8025566
>>>>>>
>>>>>> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
>>>>>> Reviewed-by:
>>>>>>
>>>>>> The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
>>>>>>
>>>>>> I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
>>>>>>
>>>>
>>
From vladimir.kozlov at oracle.com Fri Oct 4 17:59:51 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Fri, 04 Oct 2013 17:59:51 -0700
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
Message-ID: <524F6487.8030606@oracle.com>
Roland,
I need more time to go through methoddate.?pp changes.
Here some preliminary comments.
I think you need to use orptr(mdo_adr, obj) when storing klass first
time to preserve sticky bit null_seen which could be set by other thread
during small window. But it is still not atomic.
It would be even better if you set these sticking flags in a separate
field (may be in stack_slot_entry which does not change, may be split in
2 field). Or may be use atomic cmpxchg.
Then we would not worry about concurrent updates from different threads.
c1_LIRAssembler_x86.cpp: could you clean up ifdefs?:
+ if (do_update) {
+ #ifndef ASSERT
+ __ jmpb(next);
+ #else
+ __ jmp(next);
+ #endif
+ }
+ } else {
+ #ifdef ASSERT
+ __ testptr(tmp, tmp);
+ __ jccb(Assembler::notZero, update);
+ __ stop("unexpect null obj");
+ #endif
+ }
for example:
+ if (do_update) {
+ #ifndef ASSERT
+ __ jmpb(next);
+ }
+ #else
+ __ jmp(next);
+ }
+ } else {
+ __ testptr(tmp, tmp);
+ __ jccb(Assembler::notZero, update);
+ __ stop("unexpect null obj");
+ #endif
+ }
Indention in c1_LIRGenerator.cpp in sig_next_klass():
+ if (first_sig_k != NULL) {
+ sig_k = first_sig_k;
+ first_sig_k = NULL;
java.cpp can you also print mdo size per method before (or after)
invocation counters? I assume you want to print more statistic with new
flag later. If it is only size then we may not need a new flag (we have
too many of them already).
TypeProfile is very general name and can be confusing. Current code
already does type profiling: UseTypeProfile. TypeProfileLeveL?
Also add new flags into /* compiler */ section of globals.hpp where
other TypeProfile flags are defined.
Thanks,
Vladimir
On 10/2/13 10:02 AM, Roland Westrelin wrote:
> Here is a new webrev for the new profiling points, only profiling of arguments at calls this time. This one includes tiered support on 32bit and 64bit x86.
>
> http://cr.openjdk.java.net/~roland/8023657/webrev.01/
>
> The output of -XX:+PrintMethodData is:
>
> 6 invokevirtual 2
> 0 bci: 6 VirtualCallData count(0) entries(1)
> 'TestProfiling'(4746 1.00)
> argument types 0: stack(1) 'TestProfiling$C'
> 1: stack(2) unknown (null seen)
>
> Profiling can either be off, on only for jsr292 related calls (invokedynamic, invokehandle or all invokes in a lambda form) or on for all methods and invokes. -XX:TypeProfile={0,1,2} is used to pick a level of profiling.
> Once all profiling is in (arguments, parameters, return value), in order to limit the number of options my plan is to use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each. TypeProfile=111, Typeprofile=222 etc.
> Profiling is by default on only for jsr292 related calls in order to not impact startup/footprint of standard java apps.
>
> Roland.
>
>
From vladimir.kozlov at oracle.com Fri Oct 4 18:03:27 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Fri, 04 Oct 2013 18:03:27 -0700
Subject: RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by
C1 String.valueOf method
In-Reply-To: <00B64DD1-3419-4D03-956D-9F7B59FAB17B@oracle.com>
References:
<524DFAA3.1070303@oracle.com>
<0FC21397-D08E-4BD2-95BE-6B2C27E64909@oracle.com>
<524E2188.6030103@oracle.com>
<524F44A3.9030102@oracle.com>
<00B64DD1-3419-4D03-956D-9F7B59FAB17B@oracle.com>
Message-ID: <524F655F.1000808@oracle.com>
I think it is good.
Thanks,
Vladimir
On 10/4/13 5:14 PM, Christian Thalinger wrote:
>
> On Oct 4, 2013, at 3:43 PM, Vladimir Kozlov wrote:
>
>> On 10/4/13 2:52 PM, Christian Thalinger wrote:
>>> Here is the (hopefully) correct fix for this problem:
>>>
>>> http://cr.openjdk.java.net/~twisti/8025566/webrev.01/
>>>
>>> I've made ciMethod::ensure_method_counters() call Method::get_method_counters() because they did the same job.
>>>
>>> For C1 I can provoke the failure situation and C1 bails out of the compilation just fine:
>>>
>>> 1652 157 2 java.io.FilterInputStream::read (11 bytes)
>>> compilation bailout: method counters allocation failed
>>> 1652 157 2 java.io.FilterInputStream::read (11 bytes) COMPILE SKIPPED: method counters allocation failed (retry at different tier)
>>>
>>> For C2 I wasn't able to get to the point where the code in question is executed. I opted for a more conservative way: record a failure but continue the compile. If we'd return straightaway the graph might be in a bad state and we could crash somewhere else. When continuing the compile we can be sure the graph is sane and another failing() check somewhere will bail out for us eventually.
>>
>> It is used only when C2 generates profiling code (SAP).
>
> Ahh! That explains why I couldn't trigger it.
>
>> I think you should return from increment_and_test_invocation_counter() if counters_adr is NULL - don't generate increment code.
>
> Ok.
>
>> The code path after that has failing() check so I agree that you don't need to add new one.
>>
>> There is other place missing NULL check: ciReplay::initialize()
>
> Thanks for catching that. I used Method::get_method_counters() there as well and a guarantee because if we cannot allocate the method counters it doesn't make sense to continue.
>
> http://cr.openjdk.java.net/~twisti/8025566/webrev.02/
>
>>
>> Thanks,
>> Vladimir
>>
>>>
>>> On Oct 3, 2013, at 7:01 PM, Vladimir Kozlov wrote:
>>>
>>>> On 10/3/13 6:34 PM, Christian Thalinger wrote:
>>>>>
>>>>> On Oct 3, 2013, at 4:15 PM, Vladimir Kozlov wrote:
>>>>>
>>>>>> Christian,
>>>>>>
>>>>>> Can you explain how _metadata pointer could be NULL if it was just created and there is check h_m()->method_data() != NULL?
>>>>>
>>>>> You are right. Since we cannot reproduce this bug it's a guessing game.
>>>>>
>>>>> Your comment made me go back and look again. The reported error happened with a tier 2 compile and there is a different code path in LIRGenerator::increment_event_counter_impl() for CompLevel_limited_profile compiles:
>>>>>
>>>>> if (level == CompLevel_limited_profile) {
>>>>> address counters_adr = method->ensure_method_counters();
>>>>> counter_holder = new_pointer_register();
>>>>> __ move(LIR_OprFact::intptrConst(counters_adr), counter_holder);
>>>>>
>>>>> Method::ensure_method_counters() tries to build a MethodCounters data structure if it's null but:
>>>>>
>>>>> counter = Method::build_method_counters(mh(), CHECK_AND_CLEAR_NULL);
>>>>>
>>>>> it clears the exception and returns null!
>>>>
>>>> Right. This is it! And the only place where result is checked for null callers of get_method_counters(). All other places which call build_method_counters() do not check.
>>>>
>>>> Vladimir
>>>>
>>>>>
>>>>> I really want C++ exceptions in the compiler?
>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Vladimir
>>>>>>
>>>>>> On 10/2/13 8:17 PM, Christian Thalinger wrote:
>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8025566
>>>>>>> http://cr.openjdk.java.net/~twisti/8025566
>>>>>>>
>>>>>>> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
>>>>>>> Reviewed-by:
>>>>>>>
>>>>>>> The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
>>>>>>>
>>>>>>> I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
>>>>>>>
>>>>>
>>>
>
From christian.thalinger at oracle.com Fri Oct 4 18:54:59 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Fri, 4 Oct 2013 18:54:59 -0700
Subject: RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1
String.valueOf method
In-Reply-To: <524F655F.1000808@oracle.com>
References:
<524DFAA3.1070303@oracle.com>
<0FC21397-D08E-4BD2-95BE-6B2C27E64909@oracle.com>
<524E2188.6030103@oracle.com>
<524F44A3.9030102@oracle.com>
<00B64DD1-3419-4D03-956D-9F7B59FAB17B@oracle.com>
<524F655F.1000808@oracle.com>
Message-ID:
Yeah, I think so too. Thank you, Vladimir.
On Oct 4, 2013, at 6:03 PM, Vladimir Kozlov wrote:
> I think it is good.
>
> Thanks,
> Vladimir
>
> On 10/4/13 5:14 PM, Christian Thalinger wrote:
>>
>> On Oct 4, 2013, at 3:43 PM, Vladimir Kozlov wrote:
>>
>>> On 10/4/13 2:52 PM, Christian Thalinger wrote:
>>>> Here is the (hopefully) correct fix for this problem:
>>>>
>>>> http://cr.openjdk.java.net/~twisti/8025566/webrev.01/
>>>>
>>>> I've made ciMethod::ensure_method_counters() call Method::get_method_counters() because they did the same job.
>>>>
>>>> For C1 I can provoke the failure situation and C1 bails out of the compilation just fine:
>>>>
>>>> 1652 157 2 java.io.FilterInputStream::read (11 bytes)
>>>> compilation bailout: method counters allocation failed
>>>> 1652 157 2 java.io.FilterInputStream::read (11 bytes) COMPILE SKIPPED: method counters allocation failed (retry at different tier)
>>>>
>>>> For C2 I wasn't able to get to the point where the code in question is executed. I opted for a more conservative way: record a failure but continue the compile. If we'd return straightaway the graph might be in a bad state and we could crash somewhere else. When continuing the compile we can be sure the graph is sane and another failing() check somewhere will bail out for us eventually.
>>>
>>> It is used only when C2 generates profiling code (SAP).
>>
>> Ahh! That explains why I couldn't trigger it.
>>
>>> I think you should return from increment_and_test_invocation_counter() if counters_adr is NULL - don't generate increment code.
>>
>> Ok.
>>
>>> The code path after that has failing() check so I agree that you don't need to add new one.
>>>
>>> There is other place missing NULL check: ciReplay::initialize()
>>
>> Thanks for catching that. I used Method::get_method_counters() there as well and a guarantee because if we cannot allocate the method counters it doesn't make sense to continue.
>>
>> http://cr.openjdk.java.net/~twisti/8025566/webrev.02/
>>
>>>
>>> Thanks,
>>> Vladimir
>>>
>>>>
>>>> On Oct 3, 2013, at 7:01 PM, Vladimir Kozlov wrote:
>>>>
>>>>> On 10/3/13 6:34 PM, Christian Thalinger wrote:
>>>>>>
>>>>>> On Oct 3, 2013, at 4:15 PM, Vladimir Kozlov wrote:
>>>>>>
>>>>>>> Christian,
>>>>>>>
>>>>>>> Can you explain how _metadata pointer could be NULL if it was just created and there is check h_m()->method_data() != NULL?
>>>>>>
>>>>>> You are right. Since we cannot reproduce this bug it's a guessing game.
>>>>>>
>>>>>> Your comment made me go back and look again. The reported error happened with a tier 2 compile and there is a different code path in LIRGenerator::increment_event_counter_impl() for CompLevel_limited_profile compiles:
>>>>>>
>>>>>> if (level == CompLevel_limited_profile) {
>>>>>> address counters_adr = method->ensure_method_counters();
>>>>>> counter_holder = new_pointer_register();
>>>>>> __ move(LIR_OprFact::intptrConst(counters_adr), counter_holder);
>>>>>>
>>>>>> Method::ensure_method_counters() tries to build a MethodCounters data structure if it's null but:
>>>>>>
>>>>>> counter = Method::build_method_counters(mh(), CHECK_AND_CLEAR_NULL);
>>>>>>
>>>>>> it clears the exception and returns null!
>>>>>
>>>>> Right. This is it! And the only place where result is checked for null callers of get_method_counters(). All other places which call build_method_counters() do not check.
>>>>>
>>>>> Vladimir
>>>>>
>>>>>>
>>>>>> I really want C++ exceptions in the compiler?
>>>>>>
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Vladimir
>>>>>>>
>>>>>>> On 10/2/13 8:17 PM, Christian Thalinger wrote:
>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8025566
>>>>>>>> http://cr.openjdk.java.net/~twisti/8025566
>>>>>>>>
>>>>>>>> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
>>>>>>>> Reviewed-by:
>>>>>>>>
>>>>>>>> The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
>>>>>>>>
>>>>>>>> I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
>>>>>>>>
>>>>>>
>>>>
>>
From niclas.adlertz at oracle.com Fri Oct 4 18:57:29 2013
From: niclas.adlertz at oracle.com (niclas.adlertz at oracle.com)
Date: Sat, 05 Oct 2013 01:57:29 +0000
Subject: hg: hsx/hotspot-comp/hotspot: 8025656:
compiler/8013496/Test8013496.sh fails on assert
Message-ID: <20131005015731.DC68562DA8@hg.openjdk.java.net>
Changeset: 1e814e391ee8
Author: anoll
Date: 2013-10-04 09:19 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/1e814e391ee8
8025656: compiler/8013496/Test8013496.sh fails on assert
Summary: Ensure the thread is in correct state; rewrote test in Java
Reviewed-by: kvn, twisti
! src/share/vm/compiler/compileBroker.cpp
- test/compiler/8013496/Test8013496.sh
+ test/compiler/codecache/CheckReservedInitialCodeCacheSizeArgOrder.java
From vladimir.kozlov at oracle.com Fri Oct 4 21:30:14 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Fri, 04 Oct 2013 21:30:14 -0700
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <524F6487.8030606@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
<524F6487.8030606@oracle.com>
Message-ID: <524F95D6.9090200@oracle.com>
On 10/4/13 5:59 PM, Vladimir Kozlov wrote:
> Roland,
>
> I need more time to go through methoddate.?pp changes.
> Here some preliminary comments.
>
> I think you need to use orptr(mdo_adr, obj) when storing klass first time to preserve sticky bit null_seen which could
> be set by other thread during small window. But it is still not atomic.
We can't use orptr for klass record because other thread may store an other klass. As result we will get garbage value.
So need to use mov. How expensive will be cmpxchg? I am just worried that we can't trust this type info due to concurrency.
Vladimir
> It would be even better if you set these sticking flags in a separate field (may be in stack_slot_entry which does not
> change, may be split in 2 field). Or may be use atomic cmpxchg.
> Then we would not worry about concurrent updates from different threads.
>
> c1_LIRAssembler_x86.cpp: could you clean up ifdefs?:
>
> + if (do_update) {
> + #ifndef ASSERT
> + __ jmpb(next);
> + #else
> + __ jmp(next);
> + #endif
> + }
> + } else {
> + #ifdef ASSERT
> + __ testptr(tmp, tmp);
> + __ jccb(Assembler::notZero, update);
> + __ stop("unexpect null obj");
> + #endif
> + }
>
> for example:
>
> + if (do_update) {
> + #ifndef ASSERT
> + __ jmpb(next);
> + }
> + #else
> + __ jmp(next);
> + }
> + } else {
> + __ testptr(tmp, tmp);
> + __ jccb(Assembler::notZero, update);
> + __ stop("unexpect null obj");
> + #endif
> + }
>
> Indention in c1_LIRGenerator.cpp in sig_next_klass():
>
> + if (first_sig_k != NULL) {
> + sig_k = first_sig_k;
> + first_sig_k = NULL;
>
>
> java.cpp can you also print mdo size per method before (or after) invocation counters? I assume you want to print more
> statistic with new flag later. If it is only size then we may not need a new flag (we have too many of them already).
>
> TypeProfile is very general name and can be confusing. Current code already does type profiling: UseTypeProfile.
> TypeProfileLeveL?
>
> Also add new flags into /* compiler */ section of globals.hpp where other TypeProfile flags are defined.
>
> Thanks,
> Vladimir
>
> On 10/2/13 10:02 AM, Roland Westrelin wrote:
>> Here is a new webrev for the new profiling points, only profiling of arguments at calls this time. This one includes
>> tiered support on 32bit and 64bit x86.
>>
>> http://cr.openjdk.java.net/~roland/8023657/webrev.01/
>>
>> The output of -XX:+PrintMethodData is:
>>
>> 6 invokevirtual 2
>> 0 bci: 6 VirtualCallData count(0) entries(1)
>> 'TestProfiling'(4746 1.00)
>> argument types 0: stack(1) 'TestProfiling$C'
>> 1: stack(2) unknown (null seen)
>>
>> Profiling can either be off, on only for jsr292 related calls (invokedynamic, invokehandle or all invokes in a lambda
>> form) or on for all methods and invokes. -XX:TypeProfile={0,1,2} is used to pick a level of profiling.
>> Once all profiling is in (arguments, parameters, return value), in order to limit the number of options my plan is to
>> use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each. TypeProfile=111, Typeprofile=222
>> etc.
>> Profiling is by default on only for jsr292 related calls in order to not impact startup/footprint of standard java apps.
>>
>> Roland.
>>
>>
From christian.thalinger at oracle.com Fri Oct 4 22:48:37 2013
From: christian.thalinger at oracle.com (christian.thalinger at oracle.com)
Date: Sat, 05 Oct 2013 05:48:37 +0000
Subject: hg: hsx/hotspot-comp/hotspot: 2 new changesets
Message-ID: <20131005054844.E23DD62DB2@hg.openjdk.java.net>
Changeset: 0c4c40f5c399
Author: twisti
Date: 2013-10-04 10:11 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/0c4c40f5c399
8011138: C2: stack overflow in compiler thread because of recursive inlining of lambda form methods
Reviewed-by: kvn, roland
! src/share/vm/opto/bytecodeInfo.cpp
! src/share/vm/opto/parse.hpp
Changeset: 5f1241525a01
Author: twisti
Date: 2013-10-04 19:05 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/5f1241525a01
Merge
From roland.westrelin at oracle.com Sat Oct 5 02:58:51 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Sat, 5 Oct 2013 11:58:51 +0200
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <524F95D6.9090200@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
<524F6487.8030606@oracle.com> <524F95D6.9090200@oracle.com>
Message-ID: <6501BAF7-D1C6-4777-BE47-F77047853B12@oracle.com>
On Oct 5, 2013, at 6:30 AM, Vladimir Kozlov wrote:
>
>
> On 10/4/13 5:59 PM, Vladimir Kozlov wrote:
>> Roland,
>>
>> I need more time to go through methoddate.?pp changes.
>> Here some preliminary comments.
>>
>> I think you need to use orptr(mdo_adr, obj) when storing klass first time to preserve sticky bit null_seen which could
>> be set by other thread during small window. But it is still not atomic.
>
> We can't use orptr for klass record because other thread may store an other klass. As result we will get garbage value. So need to use mov. How expensive will be cmpxchg? I am just worried that we can't trust this type info due to concurrency.
Why is it such concern in the case? Other profiling may also miss events due to concurrency (counter not updated, lost receiver at a call/type check). In the new code, we set the null bit only once, the recorded class only once, the unknown bit only once. It's true we can miss one of those events, but most likely the event will occur again and it can't be lost more than twice, I would say (because each of the events is recorded only once). So only a very rare event can be lost for good. We start profiling after several invocations of the method, so in practice we already risk loosing rare events. And in any case, we risk making a wrong assumption at compile time that we can recover from but not generate erroneous code.
To me, concurrency when counters are incremented must be much more of an issue. We risk repeatedly loosing events and end up with wrong relative frequencies.
Roland.
>
> Vladimir
>
>> It would be even better if you set these sticking flags in a separate field (may be in stack_slot_entry which does not
>> change, may be split in 2 field). Or may be use atomic cmpxchg.
>> Then we would not worry about concurrent updates from different threads.
>>
>> c1_LIRAssembler_x86.cpp: could you clean up ifdefs?:
>>
>> + if (do_update) {
>> + #ifndef ASSERT
>> + __ jmpb(next);
>> + #else
>> + __ jmp(next);
>> + #endif
>> + }
>> + } else {
>> + #ifdef ASSERT
>> + __ testptr(tmp, tmp);
>> + __ jccb(Assembler::notZero, update);
>> + __ stop("unexpect null obj");
>> + #endif
>> + }
>>
>> for example:
>>
>> + if (do_update) {
>> + #ifndef ASSERT
>> + __ jmpb(next);
>> + }
>> + #else
>> + __ jmp(next);
>> + }
>> + } else {
>> + __ testptr(tmp, tmp);
>> + __ jccb(Assembler::notZero, update);
>> + __ stop("unexpect null obj");
>> + #endif
>> + }
>>
>> Indention in c1_LIRGenerator.cpp in sig_next_klass():
>>
>> + if (first_sig_k != NULL) {
>> + sig_k = first_sig_k;
>> + first_sig_k = NULL;
>>
>>
>> java.cpp can you also print mdo size per method before (or after) invocation counters? I assume you want to print more
>> statistic with new flag later. If it is only size then we may not need a new flag (we have too many of them already).
>>
>> TypeProfile is very general name and can be confusing. Current code already does type profiling: UseTypeProfile.
>> TypeProfileLeveL?
>>
>> Also add new flags into /* compiler */ section of globals.hpp where other TypeProfile flags are defined.
>>
>> Thanks,
>> Vladimir
>>
>> On 10/2/13 10:02 AM, Roland Westrelin wrote:
>>> Here is a new webrev for the new profiling points, only profiling of arguments at calls this time. This one includes
>>> tiered support on 32bit and 64bit x86.
>>>
>>> http://cr.openjdk.java.net/~roland/8023657/webrev.01/
>>>
>>> The output of -XX:+PrintMethodData is:
>>>
>>> 6 invokevirtual 2
>>> 0 bci: 6 VirtualCallData count(0) entries(1)
>>> 'TestProfiling'(4746 1.00)
>>> argument types 0: stack(1) 'TestProfiling$C'
>>> 1: stack(2) unknown (null seen)
>>>
>>> Profiling can either be off, on only for jsr292 related calls (invokedynamic, invokehandle or all invokes in a lambda
>>> form) or on for all methods and invokes. -XX:TypeProfile={0,1,2} is used to pick a level of profiling.
>>> Once all profiling is in (arguments, parameters, return value), in order to limit the number of options my plan is to
>>> use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each. TypeProfile=111, Typeprofile=222
>>> etc.
>>> Profiling is by default on only for jsr292 related calls in order to not impact startup/footprint of standard java apps.
>>>
>>> Roland.
>>>
>>>
From rickard.backman at oracle.com Sun Oct 6 22:13:07 2013
From: rickard.backman at oracle.com (=?iso-8859-1?Q?Rickard_B=E4ckman?=)
Date: Mon, 7 Oct 2013 07:13:07 +0200
Subject: RFR(XS) 8025657: compiler/intrinsics/mathexact/ConstantTest.java
fails on assert in lcm.cpp on solaris x64
In-Reply-To: <524F0F29.3070800@oracle.com>
References: <0D129F1B-F0D2-408E-918D-A4D1C0932152@oracle.com>
<524F0F29.3070800@oracle.com>
Message-ID:
Vladimir,
both addExact and FlagsProj are in must_clone. It means they have to be close to use, but since there are 2
uses of addExact this seems to be problematic.
The code in schedule_pinned_nodes takes the addExact and FlagsProj and schedules them into the same block as the jump on overflow. It seems correct to me.
Thank you
/R
On Oct 4, 2013, at 8:55 PM, Vladimir Kozlov wrote:
> Rickard,
>
> addExact, should in must_clone[] list since it produce flag (I think your original changes have it). With that it should be scheduled near use (see PhaseCFG::schedule_late()). The problem could be it has 2 uses.
>
> FlagsProj should be scheduled near consumer of the flag (since it is also in must_clone[]). Otherwise flags state could be changes by other instructions. So moving it to addExact block is wrong. It should be opposite: addExact should at the same block as FlagsProj and conditional jump.
>
> Vladimir
>
> On 10/4/13 4:35 AM, Rickard B?ckman wrote:
>> Hi all,
>>
>> I would appreciate some reviews on this change.
>>
>> On some machines when running with -XX:+DeoptimizeALot a test (test/compiler/intrinsics/mathexact/ConstantTest.java) failed with an assert.
>> assert(idx >= 0) failed: index should be set
>>
>> It seems that gcm would put the addExact in a different block then the jump.
>> This change forces the producer of FlagsProjNode to be in the same block as
>> the consumer.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8025657
>> Webrev: http://cr.openjdk.java.net/~rbackman/8025657.1/
>>
>> Thanks
>> /R
>>
From vladimir.x.ivanov at oracle.com Mon Oct 7 05:59:54 2013
From: vladimir.x.ivanov at oracle.com (vladimir.x.ivanov at oracle.com)
Date: Mon, 07 Oct 2013 12:59:54 +0000
Subject: hg: hsx/hotspot-comp/hotspot: 4 new changesets
Message-ID: <20131007130006.DF1B862DFF@hg.openjdk.java.net>
Changeset: bf8a21c3ab3b
Author: vlivanov
Date: 2013-10-07 14:10 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/bf8a21c3ab3b
8025849: Redundant "pid" in VM log file name (e.g. hotspot_pidpid12345.log)
Reviewed-by: twisti, azeemj
! src/share/vm/utilities/ostream.cpp
Changeset: 5cc2d82aa82a
Author: vlivanov
Date: 2013-10-07 14:11 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/5cc2d82aa82a
8024943: ciReplay: fails to dump replay data during safepointing
Reviewed-by: kvn, twisti
! src/share/vm/ci/ciEnv.cpp
! src/share/vm/ci/ciEnv.hpp
! src/share/vm/ci/ciInstanceKlass.cpp
! src/share/vm/ci/ciMethod.cpp
! src/share/vm/ci/ciMethodData.cpp
! src/share/vm/utilities/vmError.cpp
Changeset: f478c98e8114
Author: vlivanov
Date: 2013-10-07 14:12 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/f478c98e8114
8024774: assert(_con < t->is_tuple()->cnt()) failed: ProjNode::_con must be in range
Reviewed-by: iveresov, roland, kvn, twisti
! src/share/vm/opto/parse2.cpp
Changeset: 5741fc86a2ee
Author: vlivanov
Date: 2013-10-07 14:13 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/5741fc86a2ee
8025845: Default methods are unnecessarily marked w/ force_inline directive in some situations
Reviewed-by: acorn, kvn
! src/share/vm/classfile/defaultMethods.cpp
From niclas.adlertz at oracle.com Mon Oct 7 07:00:12 2013
From: niclas.adlertz at oracle.com (Niclas Adlertz)
Date: Mon, 07 Oct 2013 16:00:12 +0200
Subject: RFR(XS) JDK-8013830: [parfait] Uninitialised pointer 'Reachblock'
may be used as argument
Message-ID: <5252BE6C.5070705@oracle.com>
Hi all,
The uninitialized pointer 'Reachblock' can be replaced with NULL at the call since the node we are re-materializing will not have any live range input (because of contains_no_live_range_input(def)).
WEBREV: http://cr.openjdk.java.net/~adlertz/JDK-8013830/webrev00/
JBS: https://bugs.openjdk.java.net/browse/JDK-8013830
Kind Regards,
Niclas Adlertz
From roland.westrelin at oracle.com Mon Oct 7 07:46:04 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Mon, 7 Oct 2013 16:46:04 +0200
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <524F6487.8030606@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
<524F6487.8030606@oracle.com>
Message-ID: <2C6936C4-ED19-41DB-A98B-28DCF18F88E1@oracle.com>
Vladimir, Thanks for your comments.
> I need more time to go through methoddate.?pp changes.
Sure. Here is a new webrev that addresses Christian's comments and yours below.
http://cr.openjdk.java.net/~roland/8023657/webrev.02/
> Here some preliminary comments.
>
> I think you need to use orptr(mdo_adr, obj) when storing klass first time to preserve sticky bit null_seen which could be set by other thread during small window. But it is still not atomic.
> It would be even better if you set these sticking flags in a separate field (may be in stack_slot_entry which does not change, may be split in 2 field). Or may be use atomic cmpxchg.
In one of the follow up changes I will do profiling of the type of return values. For them there's not need of keeping track of the stack slot so we can't assume that there's an extra entry in the MDO for each type.
Roland.
> Then we would not worry about concurrent updates from different threads.
>
> c1_LIRAssembler_x86.cpp: could you clean up ifdefs?:
>
> + if (do_update) {
> + #ifndef ASSERT
> + __ jmpb(next);
> + #else
> + __ jmp(next);
> + #endif
> + }
> + } else {
> + #ifdef ASSERT
> + __ testptr(tmp, tmp);
> + __ jccb(Assembler::notZero, update);
> + __ stop("unexpect null obj");
> + #endif
> + }
>
> for example:
>
> + if (do_update) {
> + #ifndef ASSERT
> + __ jmpb(next);
> + }
> + #else
> + __ jmp(next);
> + }
> + } else {
> + __ testptr(tmp, tmp);
> + __ jccb(Assembler::notZero, update);
> + __ stop("unexpect null obj");
> + #endif
> + }
>
> Indention in c1_LIRGenerator.cpp in sig_next_klass():
>
> + if (first_sig_k != NULL) {
> + sig_k = first_sig_k;
> + first_sig_k = NULL;
>
>
> java.cpp can you also print mdo size per method before (or after) invocation counters? I assume you want to print more statistic with new flag later. If it is only size then we may not need a new flag (we have too many of them already).
>
> TypeProfile is very general name and can be confusing. Current code already does type profiling: UseTypeProfile. TypeProfileLeveL?
>
> Also add new flags into /* compiler */ section of globals.hpp where other TypeProfile flags are defined.
>
> Thanks,
> Vladimir
>
> On 10/2/13 10:02 AM, Roland Westrelin wrote:
>> Here is a new webrev for the new profiling points, only profiling of arguments at calls this time. This one includes tiered support on 32bit and 64bit x86.
>>
>> http://cr.openjdk.java.net/~roland/8023657/webrev.01/
>>
>> The output of -XX:+PrintMethodData is:
>>
>> 6 invokevirtual 2
>> 0 bci: 6 VirtualCallData count(0) entries(1)
>> 'TestProfiling'(4746 1.00)
>> argument types 0: stack(1) 'TestProfiling$C'
>> 1: stack(2) unknown (null seen)
>>
>> Profiling can either be off, on only for jsr292 related calls (invokedynamic, invokehandle or all invokes in a lambda form) or on for all methods and invokes. -XX:TypeProfile={0,1,2} is used to pick a level of profiling.
>> Once all profiling is in (arguments, parameters, return value), in order to limit the number of options my plan is to use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each. TypeProfile=111, Typeprofile=222 etc.
>> Profiling is by default on only for jsr292 related calls in order to not impact startup/footprint of standard java apps.
>>
>> Roland.
>>
>>
From morris.meyer at oracle.com Mon Oct 7 08:51:26 2013
From: morris.meyer at oracle.com (Morris Meyer)
Date: Mon, 07 Oct 2013 11:51:26 -0400
Subject: RFR(S): 8008242: VerifyOops fails on SPARC
Message-ID: <5252D87E.5060605@oracle.com>
Folks,
Could I get a review of this P2 issue on SPARC? I had to fix some
branch relocation issues first, before relaxing the oop verify in
c1_LIRAssembler_sparc::type_profile_helper() and mem2reg().
This has been tested through JPRT.
Thanks.
--mm
JBS - https://bugs.openjdk.java.net/browse/JDK-8008242
WEBREV - http://cr.openjdk.java.net/~morris/8008242.01/
From roland.westrelin at oracle.com Mon Oct 7 09:11:27 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Mon, 7 Oct 2013 18:11:27 +0200
Subject: RFR(S): 8008242: VerifyOops fails on SPARC
In-Reply-To: <5252D87E.5060605@oracle.com>
References: <5252D87E.5060605@oracle.com>
Message-ID: <40E501F0-B2BD-4C74-BDCA-FCD580368B93@oracle.com>
Hi Morris,
> Could I get a review of this P2 issue on SPARC? I had to fix some branch relocation issues first, before relaxing the oop verify in c1_LIRAssembler_sparc::type_profile_helper() and mem2reg().
Why did you change:
1391 __ verify_oop(src);
in c1_LIRAssembler_sparc.cpp?
It appears verify_klass_ptr() doesn't do anything currently so that nothing fails with this changed doesn't really prove it's correct.
Roland.
From roland.westrelin at oracle.com Mon Oct 7 09:18:15 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Mon, 7 Oct 2013 18:18:15 +0200
Subject: RFR(XS) JDK-8013830: [parfait] Uninitialised pointer 'Reachblock'
may be used as argument
In-Reply-To: <5252BE6C.5070705@oracle.com>
References: <5252BE6C.5070705@oracle.com>
Message-ID: <967D916F-DCD6-4672-9960-782C95BA7B66@oracle.com>
Hi Niclas,
> The uninitialized pointer 'Reachblock' can be replaced with NULL at the call since the node we are re-materializing will not have any live range input (because of contains_no_live_range_input(def)).
>
> WEBREV: http://cr.openjdk.java.net/~adlertz/JDK-8013830/webrev00/
> JBS: https://bugs.openjdk.java.net/browse/JDK-8013830
Can you give more details? Which test in PhaseChaitin::split_Rematerialize() fails/succeeds so that we don't reach
378 assert(Reachblock != NULL, "Reachblock must be non-NULL");
379 Node *rdef = Reachblock[lrg2reach[lidx]];
when contains_no_live_range_input(def)is true?
Roland.
From niclas.adlertz at oracle.com Mon Oct 7 10:14:23 2013
From: niclas.adlertz at oracle.com (Niclas Adlertz)
Date: Mon, 07 Oct 2013 19:14:23 +0200
Subject: RFR(XS) JDK-8013830: [parfait] Uninitialised pointer 'Reachblock'
may be used as argument
In-Reply-To: <967D916F-DCD6-4672-9960-782C95BA7B66@oracle.com>
References: <5252BE6C.5070705@oracle.com>
<967D916F-DCD6-4672-9960-782C95BA7B66@oracle.com>
Message-ID: <5252EBEF.1030200@oracle.com>
Hi,
At row 1330 in reg_split.cpp we check if we can split by re-materializing 'def'. We only enter split_Rematerialize() at row 1341 if the 'def' node doesn't have any live range inputs (contains_no_live_range_input(def)).
This means that the condition at split_Rematerialize() at row 377 will never be true when entering from row 1341. Because of this we can pass in NULL at the call on row 1341 instead of the uninitialized pointer 'Reachblock'.
Kind Regards,
Niclas Adlertz
On 2013-10-07 18:18, Roland Westrelin wrote:
> Hi Niclas,
>
>> The uninitialized pointer 'Reachblock' can be replaced with NULL at the call since the node we are re-materializing will not have any live range input (because of contains_no_live_range_input(def)).
>>
>> WEBREV: http://cr.openjdk.java.net/~adlertz/JDK-8013830/webrev00/
>> JBS: https://bugs.openjdk.java.net/browse/JDK-8013830
>
> Can you give more details? Which test in PhaseChaitin::split_Rematerialize() fails/succeeds so that we don't reach
>
> 378 assert(Reachblock != NULL, "Reachblock must be non-NULL");
> 379 Node *rdef = Reachblock[lrg2reach[lidx]];
>
> when contains_no_live_range_input(def)is true?
>
> Roland.
>
From christian.thalinger at oracle.com Mon Oct 7 10:55:51 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Mon, 7 Oct 2013 10:55:51 -0700
Subject: RFR(S): 8008242: VerifyOops fails on SPARC
In-Reply-To: <40E501F0-B2BD-4C74-BDCA-FCD580368B93@oracle.com>
References: <5252D87E.5060605@oracle.com>
<40E501F0-B2BD-4C74-BDCA-FCD580368B93@oracle.com>
Message-ID: <358968F5-E7B8-4D1B-8134-8D118002EF0A@oracle.com>
On Oct 7, 2013, at 9:11 AM, Roland Westrelin wrote:
>
> Hi Morris,
>
>> Could I get a review of this P2 issue on SPARC? I had to fix some branch relocation issues first, before relaxing the oop verify in c1_LIRAssembler_sparc::type_profile_helper() and mem2reg().
>
> Why did you change:
>
> 1391 __ verify_oop(src);
>
> in c1_LIRAssembler_sparc.cpp?
I concur. Did you hit a problem here? The check is guarded by:
if (addr->base()->type() == T_OBJECT) {
- __ verify_oop(src);
+ __ verify_klass_ptr(src);
}
so this should trigger. If it does then we are propagating the wrong type somewhere.
>
> It appears verify_klass_ptr() doesn't do anything currently so that nothing fails with this changed doesn't really prove it's correct.
Correct; these methods are currently empty. When the runtime team removed perm-gen they added these methods but never implemented them. Not our issue. But the second change is definitely correct; the receiver is a Klass*.
>
> Roland.
>
From christian.thalinger at oracle.com Mon Oct 7 11:05:46 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Mon, 7 Oct 2013 11:05:46 -0700
Subject: RFR(XS) JDK-8013830: [parfait] Uninitialised pointer 'Reachblock'
may be used as argument
In-Reply-To: <5252EBEF.1030200@oracle.com>
References: <5252BE6C.5070705@oracle.com>
<967D916F-DCD6-4672-9960-782C95BA7B66@oracle.com>
<5252EBEF.1030200@oracle.com>
Message-ID: <7491BC5B-404E-459C-8F1C-2D3FEAF29EE5@oracle.com>
This seems to be ok. The thing that's non-obvious is that:
if (def->rematerialize() && contains_no_live_range_input(def)) {
and the logic in PhaseChaitin::split_Rematerialize with:
if (lidx < _lrg_map.max_lrg_id() && lrgs(lidx).reg() >= LRG::SPILL_REG) {
are equivalent. The assert helps, though.
On Oct 7, 2013, at 10:14 AM, Niclas Adlertz wrote:
> Hi,
>
> At row 1330 in reg_split.cpp we check if we can split by re-materializing 'def'. We only enter split_Rematerialize() at row 1341 if the 'def' node doesn't have any live range inputs (contains_no_live_range_input(def)).
> This means that the condition at split_Rematerialize() at row 377 will never be true when entering from row 1341. Because of this we can pass in NULL at the call on row 1341 instead of the uninitialized pointer 'Reachblock'.
>
> Kind Regards,
> Niclas Adlertz
>
>
> On 2013-10-07 18:18, Roland Westrelin wrote:
>> Hi Niclas,
>>
>>> The uninitialized pointer 'Reachblock' can be replaced with NULL at the call since the node we are re-materializing will not have any live range input (because of contains_no_live_range_input(def)).
>>>
>>> WEBREV: http://cr.openjdk.java.net/~adlertz/JDK-8013830/webrev00/
>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8013830
>>
>> Can you give more details? Which test in PhaseChaitin::split_Rematerialize() fails/succeeds so that we don't reach
>>
>> 378 assert(Reachblock != NULL, "Reachblock must be non-NULL");
>> 379 Node *rdef = Reachblock[lrg2reach[lidx]];
>>
>> when contains_no_live_range_input(def)is true?
>>
>> Roland.
>>
>
From albert.noll at oracle.com Mon Oct 7 11:15:11 2013
From: albert.noll at oracle.com (Albert Noll)
Date: Mon, 07 Oct 2013 20:15:11 +0200
Subject: RFR(XS): 8024008: Nashorn V8 (Crypto) benchmark crashes with
small CodeCache size
In-Reply-To: <524DC536.5030602@oracle.com>
References: <522DD453.4010809@oracle.com>
<522E09C4.1070700@oracle.com> <522EC44F.2060005@oracle.com>
<522F1612.4030606@oracle.com> <522FA629.10509@oracle.com>
<524DB4B6.7040201@oracle.com> <524DC536.5030602@oracle.com>
Message-ID: <5252FA2F.6050102@oracle.com>
Hi Valdimir,
thanks for you feedback. If the generation of the AdapterHandlerLibrary
wrapper is optional, the following changes in compileBroker.cpp should work:
// If the compiler is shut off due to code cache getting full
// fail out now so blocking compiles dont hang the java thread
// if ( !should_compile_new_jobs()) {
// CompilationPolicy::policy()->delay_compilation(method());
// return NULL;
// }
// do the compilation
if (method->is_native()) {
if (!PreferInterpreterNativeStubs ||
method->is_method_handle_intrinsic()) {
// Acquire our lock.
// int compile_id;
// {
// MutexLocker locker(MethodCompileQueue_lock, THREAD);
// compile_id = assign_compile_id(method, standard_entry_bci);
// }
// (void) AdapterHandlerLibrary::create_native_wrapper(method,
compile_id);
} else {
return NULL;
}
} else {
compile_method_base(method, osr_bci, comp_level, hot_method,
hot_count, comment, THREAD);
}
However, with the changes above, I get the "i2c adapter must return to
an interpreter frame" even
if the code cache is not full and compilation remains enabled. Something
seems really broken here.
Irrespective of the current bug, it seems that checking whether we
should compile new methods
in line 1304 in compileBroker.cpp does not make much sense, since this
bit can change asynchronously
any time. It made more sense before 8020151, but now I think it is time
to remove it.
Best,
Albert
On 03.10.2013 21:27, Vladimir Kozlov wrote:
> Albert,
>
> I don't see connection between not generating wrapper (which is fine,
> it is only needed for hot calls to native method) and wrong return
> address when calling i2c adapter (failed message). Can you find what
> return address is?
>
> It could be a different problem (or not) from what this bug about.
> Several things can go bad when codecache is full. Also attached to bug
> report hs_err files shows different crushes.
>
> Was you able to reproduce it with fastdebug VM? Switch off
> -XX:-CheckCompressedOops to get the same code generation as with
> product 64-bit VM. And switch off -XX:-VerifyDependencies to speed
> testing (10x, this test is very expensive).
>
> Also can you try to run with latest VM version which has fixes to
> produce more info for call stack in hs_err. To have only next lines is
> not useful:
>
> C 0x0000000648baace0
> [error occurred during error reporting (printing native stack), id 0xb]
>
> Thanks,
> Vladimir
>
> On 10/3/13 11:17 AM, Albert Noll wrote:
>> Hi,
>>
>> I think I found the reason for the crash. Please forget the previous
>> suggestions.
>>
>> See the following webrev:
>>
>> Problem:
>> http://cr.openjdk.java.net/~anoll/8024008/webrev.02/
>>
>> If the code cache gets full, this code in compileBroker.cpp is not
>> executed.
>>
>> 1318 (void)
>> AdapterHandlerLibrary::create_native_wrapper(method, compile_id);
>>
>> As a result, we get the following error "i2c adapter must return to
>> an interpreter frame"
>> if the JVM is called with "-XX:+UnlockDiagnosticVMOptions
>> -XX:+VerifyAdapterCalls"
>>
>> I do not yet fully understand why that's the case, so please if you
>> know let me know.
>>
>> Solution:
>> Move the code cache is full-check after line 1318.
>>
>> Many thanks,
>> Albert
>>
>>
>> Am 11.09.2013 01:07, schrieb Vladimir Kozlov:
>>> Albert,
>>>
>>> I would suggest to run as many tests as possible to verify correctness
>>> of changes because this code is very important.
>>>
>>> Thanks,
>>> Vladimir
>>>
>>> On 9/10/13 5:52 AM, Albert Noll wrote:
>>>> Hi,
>>>>
>>>> the current version causes a serious performance regression.
>>>> I have to figure out what's wrong.
>>>>
>>>> Best,
>>>> Albert
>>>>
>>>> On 10.09.2013 09:03, Albert Noll wrote:
>>>>> Hi Vladimir,
>>>>>
>>>>> thanks for looking at this. I checked all call sites of
>>>>> 'make_not_entrant()' and 'make_zombie()'. I do not see any problems.
>>>>> The worst thing that can happen is that an nmethod for which the call
>>>>> returns fals gets removed later than expected.
>>>>>
>>>>> I updated the comment and did some minor code refactoring.
>>>>>
>>>>> Also I think that it is worth considering to backport this change,
>>>>> since the bug can appear any time
>>>>> the code cache fills up. If that bug appears, it is extremely hard to
>>>>> reproduce and debug.
>>>>>
>>>>> Here is the updated webrev.
>>>>> http://cr.openjdk.java.net/~anoll/8024008/webrev.01/
>>>>>
>>>>>
>>>>> Best,
>>>>> Albert
>>>>>
>>>>>
>>>>>
>>>>> On 09.09.2013 19:47, Vladimir Kozlov wrote:
>>>>>> Several places in sources do not check returned result of
>>>>>> make_not_entrant_or_zombie(). And they may assume that method marked
>>>>>> as non-entrant, for example, because before we returned 'false' only
>>>>>> when an other thread already changed the state to one we need.
>>>>>>
>>>>>> Can you check all call sites to make sure they work correctly with
>>>>>> this change?
>>>>>>
>>>>>> Thanks,
>>>>>> Vladimir
>>>>>>
>>>>>> On 9/9/13 6:59 AM, Albert Noll wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> thanks for reviewing this patch.
>>>>>>>
>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8024008
>>>>>>> http://cr.openjdk.java.net/~anoll/8024008/webrev.00/
>>>>>>>
>>>>>>>
>>>>>>> Many thanks in advance,
>>>>>>> Albert
>>>>>>>
>>>>>>> Problem:
>>>>>>> The state of nmethods that are currently locked by the VM must not
>>>>>>> change.
>>>>>>> Some operations such as setting ICs (e.g.,
>>>>>>> SharedRuntime::resolve_sub_helper())
>>>>>>> rely on this fact. 'nmethod::make_not_entrant_or_zombie does not
>>>>>>> make this
>>>>>>> check.
>>>>>>>
>>>>>>> Solution:
>>>>>>> Do method state unchanged of nmethod is locked by the VM.
>>>>>>>
>>>>>>> Testing: Run Octane benchmarks on top of Nashorn with small code
>>>>>>> cache size (16m).
>>>>>>>
>>>>>
>>>>
>>
From vladimir.kozlov at oracle.com Mon Oct 7 12:31:08 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Mon, 07 Oct 2013 12:31:08 -0700
Subject: RFR(XS) 8025657: compiler/intrinsics/mathexact/ConstantTest.java
fails on assert in lcm.cpp on solaris x64
In-Reply-To:
References: <0D129F1B-F0D2-408E-918D-A4D1C0932152@oracle.com>
<524F0F29.3070800@oracle.com>
Message-ID: <52530BFC.9040201@oracle.com>
Rickard,
Your code is correct. What I am trying to understand is it possible to
make it more general and not just hack for mathExact.
Also if we set control edge to addExact node (for example, during
final_graph_reshape). And make its machnode pinned (in adlc
InstructForm::is_pinned()). Will current gcm code work then?
Speaking of cotrol edge for these nodes. You allow gvn these nodes (you
have hash() method). But is this correct? What happens for duplicated
code when inputs are the same?
addExact(x,y)
addExact(x,y)
Thanks,
Vladimir
On 10/6/13 10:13 PM, Rickard B?ckman wrote:
> Vladimir,
>
> both addExact and FlagsProj are in must_clone. It means they have to be close to use, but since there are 2
> uses of addExact this seems to be problematic.
>
> The code in schedule_pinned_nodes takes the addExact and FlagsProj and schedules them into the same block as the jump on overflow. It seems correct to me.
>
> Thank you
> /R
>
> On Oct 4, 2013, at 8:55 PM, Vladimir Kozlov wrote:
>
>> Rickard,
>>
>> addExact, should in must_clone[] list since it produce flag (I think your original changes have it). With that it should be scheduled near use (see PhaseCFG::schedule_late()). The problem could be it has 2 uses.
>>
>> FlagsProj should be scheduled near consumer of the flag (since it is also in must_clone[]). Otherwise flags state could be changes by other instructions. So moving it to addExact block is wrong. It should be opposite: addExact should at the same block as FlagsProj and conditional jump.
>>
>> Vladimir
>>
>> On 10/4/13 4:35 AM, Rickard B?ckman wrote:
>>> Hi all,
>>>
>>> I would appreciate some reviews on this change.
>>>
>>> On some machines when running with -XX:+DeoptimizeALot a test (test/compiler/intrinsics/mathexact/ConstantTest.java) failed with an assert.
>>> assert(idx >= 0) failed: index should be set
>>>
>>> It seems that gcm would put the addExact in a different block then the jump.
>>> This change forces the producer of FlagsProjNode to be in the same block as
>>> the consumer.
>>>
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8025657
>>> Webrev: http://cr.openjdk.java.net/~rbackman/8025657.1/
>>>
>>> Thanks
>>> /R
>>>
>
From vladimir.kozlov at oracle.com Mon Oct 7 12:46:23 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Mon, 07 Oct 2013 12:46:23 -0700
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <6501BAF7-D1C6-4777-BE47-F77047853B12@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
<524F6487.8030606@oracle.com> <524F95D6.9090200@oracle.com>
<6501BAF7-D1C6-4777-BE47-F77047853B12@oracle.com>
Message-ID: <52530F8F.8060800@oracle.com>
On 10/5/13 2:58 AM, Roland Westrelin wrote:
>
> On Oct 5, 2013, at 6:30 AM, Vladimir Kozlov wrote:
>
>>
>>
>> On 10/4/13 5:59 PM, Vladimir Kozlov wrote:
>>> Roland,
>>>
>>> I need more time to go through methoddate.?pp changes.
>>> Here some preliminary comments.
>>>
>>> I think you need to use orptr(mdo_adr, obj) when storing klass first time to preserve sticky bit null_seen which could
>>> be set by other thread during small window. But it is still not atomic.
>>
>> We can't use orptr for klass record because other thread may store an other klass. As result we will get garbage value. So need to use mov. How expensive will be cmpxchg? I am just worried that we can't trust this type info due to concurrency.
>
> Why is it such concern in the case? Other profiling may also miss events due to concurrency (counter not updated, lost receiver at a call/type check). In the new code, we set the null bit only once, the recorded class only once, the unknown bit only once. It's true we can miss one of those events, but most likely the event will occur again and it can't be lost more than twice, I would say (because each of the events is recorded only once). So only a very rare event can be lost for good. We start profiling after several invocations of the method, so in practice we already risk loosing rare events. And in any case, we risk making a wrong assumption at compile time that we can recover from but not generate erroneous code.
> To me, concurrency when counters are incremented must be much more of an issue. We risk repeatedly loosing events and end up with wrong relative frequencies.
I agree with you about klass recording because we will generate klass
check so the code will be correct even if recording is wrong (we go slow
path). The same about unknown bit.
I looked on never_see_null code in GraphKit::null_check_oop() and we
generate uncommon trap otherwise merged result could be NULL. So it
seems we will hit uncommon trap if we lost null_seen bit.
Looks like we fine.
Thanks,
Vladimir
>
> Roland.
>
>>
>> Vladimir
>>
>>> It would be even better if you set these sticking flags in a separate field (may be in stack_slot_entry which does not
>>> change, may be split in 2 field). Or may be use atomic cmpxchg.
>>> Then we would not worry about concurrent updates from different threads.
>>>
>>> c1_LIRAssembler_x86.cpp: could you clean up ifdefs?:
>>>
>>> + if (do_update) {
>>> + #ifndef ASSERT
>>> + __ jmpb(next);
>>> + #else
>>> + __ jmp(next);
>>> + #endif
>>> + }
>>> + } else {
>>> + #ifdef ASSERT
>>> + __ testptr(tmp, tmp);
>>> + __ jccb(Assembler::notZero, update);
>>> + __ stop("unexpect null obj");
>>> + #endif
>>> + }
>>>
>>> for example:
>>>
>>> + if (do_update) {
>>> + #ifndef ASSERT
>>> + __ jmpb(next);
>>> + }
>>> + #else
>>> + __ jmp(next);
>>> + }
>>> + } else {
>>> + __ testptr(tmp, tmp);
>>> + __ jccb(Assembler::notZero, update);
>>> + __ stop("unexpect null obj");
>>> + #endif
>>> + }
>>>
>>> Indention in c1_LIRGenerator.cpp in sig_next_klass():
>>>
>>> + if (first_sig_k != NULL) {
>>> + sig_k = first_sig_k;
>>> + first_sig_k = NULL;
>>>
>>>
>>> java.cpp can you also print mdo size per method before (or after) invocation counters? I assume you want to print more
>>> statistic with new flag later. If it is only size then we may not need a new flag (we have too many of them already).
>>>
>>> TypeProfile is very general name and can be confusing. Current code already does type profiling: UseTypeProfile.
>>> TypeProfileLeveL?
>>>
>>> Also add new flags into /* compiler */ section of globals.hpp where other TypeProfile flags are defined.
>>>
>>> Thanks,
>>> Vladimir
>>>
>>> On 10/2/13 10:02 AM, Roland Westrelin wrote:
>>>> Here is a new webrev for the new profiling points, only profiling of arguments at calls this time. This one includes
>>>> tiered support on 32bit and 64bit x86.
>>>>
>>>> http://cr.openjdk.java.net/~roland/8023657/webrev.01/
>>>>
>>>> The output of -XX:+PrintMethodData is:
>>>>
>>>> 6 invokevirtual 2
>>>> 0 bci: 6 VirtualCallData count(0) entries(1)
>>>> 'TestProfiling'(4746 1.00)
>>>> argument types 0: stack(1) 'TestProfiling$C'
>>>> 1: stack(2) unknown (null seen)
>>>>
>>>> Profiling can either be off, on only for jsr292 related calls (invokedynamic, invokehandle or all invokes in a lambda
>>>> form) or on for all methods and invokes. -XX:TypeProfile={0,1,2} is used to pick a level of profiling.
>>>> Once all profiling is in (arguments, parameters, return value), in order to limit the number of options my plan is to
>>>> use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each. TypeProfile=111, Typeprofile=222
>>>> etc.
>>>> Profiling is by default on only for jsr292 related calls in order to not impact startup/footprint of standard java apps.
>>>>
>>>> Roland.
>>>>
>>>>
>
From christian.thalinger at oracle.com Mon Oct 7 13:49:56 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Mon, 7 Oct 2013 13:49:56 -0700
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <2C6936C4-ED19-41DB-A98B-28DCF18F88E1@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
<524F6487.8030606@oracle.com>
<2C6936C4-ED19-41DB-A98B-28DCF18F88E1@oracle.com>
Message-ID: <60593E1C-9B90-494F-A62A-4A9D2F40EAAC@oracle.com>
src/share/vm/ci/ciStreams.hpp:
+ if (_holder != NULL) {
+ sig_k = _holder;
+ _holder = NULL;
+ } else {
Instead of clearing _holder can you use pos to see if we are at the first position?
src/share/vm/runtime/signature.cpp:
+ int SignatureStream::reference_parameter_count(int max) {
Don't pass in max. This is only applicable to your use case. Do the max check inline.
+ profiled_k = TypeEntries::with_status((intptr_t)result, profiled_k);
+ return TypeEntries::with_status((intptr_t)klass, k);
These two still use the intptr_t version.
On Oct 7, 2013, at 7:46 AM, Roland Westrelin wrote:
> Vladimir, Thanks for your comments.
>
>> I need more time to go through methoddate.?pp changes.
>
> Sure. Here is a new webrev that addresses Christian's comments and yours below.
>
> http://cr.openjdk.java.net/~roland/8023657/webrev.02/
>
>> Here some preliminary comments.
>>
>> I think you need to use orptr(mdo_adr, obj) when storing klass first time to preserve sticky bit null_seen which could be set by other thread during small window. But it is still not atomic.
>> It would be even better if you set these sticking flags in a separate field (may be in stack_slot_entry which does not change, may be split in 2 field). Or may be use atomic cmpxchg.
>
> In one of the follow up changes I will do profiling of the type of return values. For them there's not need of keeping track of the stack slot so we can't assume that there's an extra entry in the MDO for each type.
>
> Roland.
>
>> Then we would not worry about concurrent updates from different threads.
>>
>> c1_LIRAssembler_x86.cpp: could you clean up ifdefs?:
>>
>> + if (do_update) {
>> + #ifndef ASSERT
>> + __ jmpb(next);
>> + #else
>> + __ jmp(next);
>> + #endif
>> + }
>> + } else {
>> + #ifdef ASSERT
>> + __ testptr(tmp, tmp);
>> + __ jccb(Assembler::notZero, update);
>> + __ stop("unexpect null obj");
>> + #endif
>> + }
>>
>> for example:
>>
>> + if (do_update) {
>> + #ifndef ASSERT
>> + __ jmpb(next);
>> + }
>> + #else
>> + __ jmp(next);
>> + }
>> + } else {
>> + __ testptr(tmp, tmp);
>> + __ jccb(Assembler::notZero, update);
>> + __ stop("unexpect null obj");
>> + #endif
>> + }
>>
>> Indention in c1_LIRGenerator.cpp in sig_next_klass():
>>
>> + if (first_sig_k != NULL) {
>> + sig_k = first_sig_k;
>> + first_sig_k = NULL;
>>
>>
>> java.cpp can you also print mdo size per method before (or after) invocation counters? I assume you want to print more statistic with new flag later. If it is only size then we may not need a new flag (we have too many of them already).
>>
>> TypeProfile is very general name and can be confusing. Current code already does type profiling: UseTypeProfile. TypeProfileLeveL?
>>
>> Also add new flags into /* compiler */ section of globals.hpp where other TypeProfile flags are defined.
>>
>> Thanks,
>> Vladimir
>>
>> On 10/2/13 10:02 AM, Roland Westrelin wrote:
>>> Here is a new webrev for the new profiling points, only profiling of arguments at calls this time. This one includes tiered support on 32bit and 64bit x86.
>>>
>>> http://cr.openjdk.java.net/~roland/8023657/webrev.01/
>>>
>>> The output of -XX:+PrintMethodData is:
>>>
>>> 6 invokevirtual 2
>>> 0 bci: 6 VirtualCallData count(0) entries(1)
>>> 'TestProfiling'(4746 1.00)
>>> argument types 0: stack(1) 'TestProfiling$C'
>>> 1: stack(2) unknown (null seen)
>>>
>>> Profiling can either be off, on only for jsr292 related calls (invokedynamic, invokehandle or all invokes in a lambda form) or on for all methods and invokes. -XX:TypeProfile={0,1,2} is used to pick a level of profiling.
>>> Once all profiling is in (arguments, parameters, return value), in order to limit the number of options my plan is to use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each. TypeProfile=111, Typeprofile=222 etc.
>>> Profiling is by default on only for jsr292 related calls in order to not impact startup/footprint of standard java apps.
>>>
>>> Roland.
>>>
>>>
>
From roland.westrelin at oracle.com Mon Oct 7 14:09:03 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Mon, 7 Oct 2013 23:09:03 +0200
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <60593E1C-9B90-494F-A62A-4A9D2F40EAAC@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
<524F6487.8030606@oracle.com>
<2C6936C4-ED19-41DB-A98B-28DCF18F88E1@oracle.com>
<60593E1C-9B90-494F-A62A-4A9D2F40EAAC@oracle.com>
Message-ID: <4AEE1470-BFBA-421E-9E09-155B9B0D7CBC@oracle.com>
On Oct 7, 2013, at 10:49 PM, Christian Thalinger wrote:
> src/share/vm/ci/ciStreams.hpp:
>
> + if (_holder != NULL) {
> + sig_k = _holder;
> + _holder = NULL;
> + } else {
>
> Instead of clearing _holder can you use pos to see if we are at the first position?
if _holder != NULL, then _pos = 0 is first true when it returns _holder and then _pos = 0 is true again for the actual first position in the signature so it's not that simple. You need a way to know you've done the _holder at the previous call and this call is for _pos = 0;
> src/share/vm/runtime/signature.cpp:
>
> + int SignatureStream::reference_parameter_count(int max) {
>
> Don't pass in max. This is only applicable to your use case. Do the max check inline.
I'm not sure what you mean by "inline".
Iterate over the entire signature and keep the MIN of the value returned and TypeProfileArgsLimit?
Passing max doesn't look that bad to me.
> + profiled_k = TypeEntries::with_status((intptr_t)result, profiled_k);
>
> + return TypeEntries::with_status((intptr_t)klass, k);
>
> These two still use the intptr_t version.
Because they are passed a ciKlass* and not Klass*. One more version with ciKlass* would be needed.
Roland.
>
> On Oct 7, 2013, at 7:46 AM, Roland Westrelin wrote:
>
>> Vladimir, Thanks for your comments.
>>
>>> I need more time to go through methoddate.?pp changes.
>>
>> Sure. Here is a new webrev that addresses Christian's comments and yours below.
>>
>> http://cr.openjdk.java.net/~roland/8023657/webrev.02/
>>
>>> Here some preliminary comments.
>>>
>>> I think you need to use orptr(mdo_adr, obj) when storing klass first time to preserve sticky bit null_seen which could be set by other thread during small window. But it is still not atomic.
>>> It would be even better if you set these sticking flags in a separate field (may be in stack_slot_entry which does not change, may be split in 2 field). Or may be use atomic cmpxchg.
>>
>> In one of the follow up changes I will do profiling of the type of return values. For them there's not need of keeping track of the stack slot so we can't assume that there's an extra entry in the MDO for each type.
>>
>> Roland.
>>
>>> Then we would not worry about concurrent updates from different threads.
>>>
>>> c1_LIRAssembler_x86.cpp: could you clean up ifdefs?:
>>>
>>> + if (do_update) {
>>> + #ifndef ASSERT
>>> + __ jmpb(next);
>>> + #else
>>> + __ jmp(next);
>>> + #endif
>>> + }
>>> + } else {
>>> + #ifdef ASSERT
>>> + __ testptr(tmp, tmp);
>>> + __ jccb(Assembler::notZero, update);
>>> + __ stop("unexpect null obj");
>>> + #endif
>>> + }
>>>
>>> for example:
>>>
>>> + if (do_update) {
>>> + #ifndef ASSERT
>>> + __ jmpb(next);
>>> + }
>>> + #else
>>> + __ jmp(next);
>>> + }
>>> + } else {
>>> + __ testptr(tmp, tmp);
>>> + __ jccb(Assembler::notZero, update);
>>> + __ stop("unexpect null obj");
>>> + #endif
>>> + }
>>>
>>> Indention in c1_LIRGenerator.cpp in sig_next_klass():
>>>
>>> + if (first_sig_k != NULL) {
>>> + sig_k = first_sig_k;
>>> + first_sig_k = NULL;
>>>
>>>
>>> java.cpp can you also print mdo size per method before (or after) invocation counters? I assume you want to print more statistic with new flag later. If it is only size then we may not need a new flag (we have too many of them already).
>>>
>>> TypeProfile is very general name and can be confusing. Current code already does type profiling: UseTypeProfile. TypeProfileLeveL?
>>>
>>> Also add new flags into /* compiler */ section of globals.hpp where other TypeProfile flags are defined.
>>>
>>> Thanks,
>>> Vladimir
>>>
>>> On 10/2/13 10:02 AM, Roland Westrelin wrote:
>>>> Here is a new webrev for the new profiling points, only profiling of arguments at calls this time. This one includes tiered support on 32bit and 64bit x86.
>>>>
>>>> http://cr.openjdk.java.net/~roland/8023657/webrev.01/
>>>>
>>>> The output of -XX:+PrintMethodData is:
>>>>
>>>> 6 invokevirtual 2
>>>> 0 bci: 6 VirtualCallData count(0) entries(1)
>>>> 'TestProfiling'(4746 1.00)
>>>> argument types 0: stack(1) 'TestProfiling$C'
>>>> 1: stack(2) unknown (null seen)
>>>>
>>>> Profiling can either be off, on only for jsr292 related calls (invokedynamic, invokehandle or all invokes in a lambda form) or on for all methods and invokes. -XX:TypeProfile={0,1,2} is used to pick a level of profiling.
>>>> Once all profiling is in (arguments, parameters, return value), in order to limit the number of options my plan is to use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each. TypeProfile=111, Typeprofile=222 etc.
>>>> Profiling is by default on only for jsr292 related calls in order to not impact startup/footprint of standard java apps.
>>>>
>>>> Roland.
>>>>
>>>>
>>
>
From christian.thalinger at oracle.com Mon Oct 7 15:04:34 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Mon, 7 Oct 2013 15:04:34 -0700
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <4AEE1470-BFBA-421E-9E09-155B9B0D7CBC@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
<524F6487.8030606@oracle.com>
<2C6936C4-ED19-41DB-A98B-28DCF18F88E1@oracle.com>
<60593E1C-9B90-494F-A62A-4A9D2F40EAAC@oracle.com>
<4AEE1470-BFBA-421E-9E09-155B9B0D7CBC@oracle.com>
Message-ID:
On Oct 7, 2013, at 2:09 PM, Roland Westrelin wrote:
>
> On Oct 7, 2013, at 10:49 PM, Christian Thalinger wrote:
>
>> src/share/vm/ci/ciStreams.hpp:
>>
>> + if (_holder != NULL) {
>> + sig_k = _holder;
>> + _holder = NULL;
>> + } else {
>>
>> Instead of clearing _holder can you use pos to see if we are at the first position?
>
>
> if _holder != NULL, then _pos = 0 is first true when it returns _holder and then _pos = 0 is true again for the actual first position in the signature so it's not that simple. You need a way to know you've done the _holder at the previous call and this call is for _pos = 0;
Right. I missed that. I thought it would be nice for debugging to keep the holder around.
>
>> src/share/vm/runtime/signature.cpp:
>>
>> + int SignatureStream::reference_parameter_count(int max) {
>>
>> Don't pass in max. This is only applicable to your use case. Do the max check inline.
>
> I'm not sure what you mean by "inline".
> Iterate over the entire signature and keep the MIN of the value returned and TypeProfileArgsLimit?
Just return the number of reference parameters.
> Passing max doesn't look that bad to me.
Passing a max doesn't make sense for anyone else using this method in the future. The only answer I want back is the number of reference parameters.
>
>> + profiled_k = TypeEntries::with_status((intptr_t)result, profiled_k);
>>
>> + return TypeEntries::with_status((intptr_t)klass, k);
>>
>> These two still use the intptr_t version.
>
> Because they are passed a ciKlass* and not Klass*. One more version with ciKlass* would be needed.
Please add that one too.
>
> Roland.
>
>>
>> On Oct 7, 2013, at 7:46 AM, Roland Westrelin wrote:
>>
>>> Vladimir, Thanks for your comments.
>>>
>>>> I need more time to go through methoddate.?pp changes.
>>>
>>> Sure. Here is a new webrev that addresses Christian's comments and yours below.
>>>
>>> http://cr.openjdk.java.net/~roland/8023657/webrev.02/
>>>
>>>> Here some preliminary comments.
>>>>
>>>> I think you need to use orptr(mdo_adr, obj) when storing klass first time to preserve sticky bit null_seen which could be set by other thread during small window. But it is still not atomic.
>>>> It would be even better if you set these sticking flags in a separate field (may be in stack_slot_entry which does not change, may be split in 2 field). Or may be use atomic cmpxchg.
>>>
>>> In one of the follow up changes I will do profiling of the type of return values. For them there's not need of keeping track of the stack slot so we can't assume that there's an extra entry in the MDO for each type.
>>>
>>> Roland.
>>>
>>>> Then we would not worry about concurrent updates from different threads.
>>>>
>>>> c1_LIRAssembler_x86.cpp: could you clean up ifdefs?:
>>>>
>>>> + if (do_update) {
>>>> + #ifndef ASSERT
>>>> + __ jmpb(next);
>>>> + #else
>>>> + __ jmp(next);
>>>> + #endif
>>>> + }
>>>> + } else {
>>>> + #ifdef ASSERT
>>>> + __ testptr(tmp, tmp);
>>>> + __ jccb(Assembler::notZero, update);
>>>> + __ stop("unexpect null obj");
>>>> + #endif
>>>> + }
>>>>
>>>> for example:
>>>>
>>>> + if (do_update) {
>>>> + #ifndef ASSERT
>>>> + __ jmpb(next);
>>>> + }
>>>> + #else
>>>> + __ jmp(next);
>>>> + }
>>>> + } else {
>>>> + __ testptr(tmp, tmp);
>>>> + __ jccb(Assembler::notZero, update);
>>>> + __ stop("unexpect null obj");
>>>> + #endif
>>>> + }
>>>>
>>>> Indention in c1_LIRGenerator.cpp in sig_next_klass():
>>>>
>>>> + if (first_sig_k != NULL) {
>>>> + sig_k = first_sig_k;
>>>> + first_sig_k = NULL;
>>>>
>>>>
>>>> java.cpp can you also print mdo size per method before (or after) invocation counters? I assume you want to print more statistic with new flag later. If it is only size then we may not need a new flag (we have too many of them already).
>>>>
>>>> TypeProfile is very general name and can be confusing. Current code already does type profiling: UseTypeProfile. TypeProfileLeveL?
>>>>
>>>> Also add new flags into /* compiler */ section of globals.hpp where other TypeProfile flags are defined.
>>>>
>>>> Thanks,
>>>> Vladimir
>>>>
>>>> On 10/2/13 10:02 AM, Roland Westrelin wrote:
>>>>> Here is a new webrev for the new profiling points, only profiling of arguments at calls this time. This one includes tiered support on 32bit and 64bit x86.
>>>>>
>>>>> http://cr.openjdk.java.net/~roland/8023657/webrev.01/
>>>>>
>>>>> The output of -XX:+PrintMethodData is:
>>>>>
>>>>> 6 invokevirtual 2
>>>>> 0 bci: 6 VirtualCallData count(0) entries(1)
>>>>> 'TestProfiling'(4746 1.00)
>>>>> argument types 0: stack(1) 'TestProfiling$C'
>>>>> 1: stack(2) unknown (null seen)
>>>>>
>>>>> Profiling can either be off, on only for jsr292 related calls (invokedynamic, invokehandle or all invokes in a lambda form) or on for all methods and invokes. -XX:TypeProfile={0,1,2} is used to pick a level of profiling.
>>>>> Once all profiling is in (arguments, parameters, return value), in order to limit the number of options my plan is to use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each. TypeProfile=111, Typeprofile=222 etc.
>>>>> Profiling is by default on only for jsr292 related calls in order to not impact startup/footprint of standard java apps.
>>>>>
>>>>> Roland.
>>>>>
>>>>>
>>>
>>
>
From christian.thalinger at oracle.com Mon Oct 7 15:19:04 2013
From: christian.thalinger at oracle.com (christian.thalinger at oracle.com)
Date: Mon, 07 Oct 2013 22:19:04 +0000
Subject: hg: hsx/hotspot-comp/hotspot: 8025566: EXCEPTION_ACCESS_VIOLATION in
compiled by C1 String.valueOf method
Message-ID: <20131007221909.56A9762E17@hg.openjdk.java.net>
Changeset: c775af091fe9
Author: twisti
Date: 2013-10-07 10:41 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/c775af091fe9
8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
Reviewed-by: kvn
! src/share/vm/c1/c1_LIRGenerator.cpp
! src/share/vm/ci/ciMethod.cpp
! src/share/vm/ci/ciMethod.hpp
! src/share/vm/ci/ciMethodData.cpp
! src/share/vm/ci/ciMethodData.hpp
! src/share/vm/ci/ciReplay.cpp
! src/share/vm/oops/method.hpp
! src/share/vm/opto/parseHelper.cpp
From vladimir.kozlov at oracle.com Mon Oct 7 18:40:35 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Mon, 07 Oct 2013 18:40:35 -0700
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <2C6936C4-ED19-41DB-A98B-28DCF18F88E1@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
<524F6487.8030606@oracle.com>
<2C6936C4-ED19-41DB-A98B-28DCF18F88E1@oracle.com>
Message-ID: <52536293.6030606@oracle.com>
Roland,
I looked through code in methoddate.?pp and I think it is fine.
Assembler code also good. So changes are fine from what I see. And we
already discussed recorded state.
Thanks,
Vladimir
On 10/7/13 7:46 AM, Roland Westrelin wrote:
> Vladimir, Thanks for your comments.
>
>> I need more time to go through methoddate.?pp changes.
>
> Sure. Here is a new webrev that addresses Christian's comments and yours below.
>
> http://cr.openjdk.java.net/~roland/8023657/webrev.02/
>
>> Here some preliminary comments.
>>
>> I think you need to use orptr(mdo_adr, obj) when storing klass first time to preserve sticky bit null_seen which could be set by other thread during small window. But it is still not atomic.
>> It would be even better if you set these sticking flags in a separate field (may be in stack_slot_entry which does not change, may be split in 2 field). Or may be use atomic cmpxchg.
>
> In one of the follow up changes I will do profiling of the type of return values. For them there's not need of keeping track of the stack slot so we can't assume that there's an extra entry in the MDO for each type.
>
> Roland.
>
>> Then we would not worry about concurrent updates from different threads.
>>
>> c1_LIRAssembler_x86.cpp: could you clean up ifdefs?:
>>
>> + if (do_update) {
>> + #ifndef ASSERT
>> + __ jmpb(next);
>> + #else
>> + __ jmp(next);
>> + #endif
>> + }
>> + } else {
>> + #ifdef ASSERT
>> + __ testptr(tmp, tmp);
>> + __ jccb(Assembler::notZero, update);
>> + __ stop("unexpect null obj");
>> + #endif
>> + }
>>
>> for example:
>>
>> + if (do_update) {
>> + #ifndef ASSERT
>> + __ jmpb(next);
>> + }
>> + #else
>> + __ jmp(next);
>> + }
>> + } else {
>> + __ testptr(tmp, tmp);
>> + __ jccb(Assembler::notZero, update);
>> + __ stop("unexpect null obj");
>> + #endif
>> + }
>>
>> Indention in c1_LIRGenerator.cpp in sig_next_klass():
>>
>> + if (first_sig_k != NULL) {
>> + sig_k = first_sig_k;
>> + first_sig_k = NULL;
>>
>>
>> java.cpp can you also print mdo size per method before (or after) invocation counters? I assume you want to print more statistic with new flag later. If it is only size then we may not need a new flag (we have too many of them already).
>>
>> TypeProfile is very general name and can be confusing. Current code already does type profiling: UseTypeProfile. TypeProfileLeveL?
>>
>> Also add new flags into /* compiler */ section of globals.hpp where other TypeProfile flags are defined.
>>
>> Thanks,
>> Vladimir
>>
>> On 10/2/13 10:02 AM, Roland Westrelin wrote:
>>> Here is a new webrev for the new profiling points, only profiling of arguments at calls this time. This one includes tiered support on 32bit and 64bit x86.
>>>
>>> http://cr.openjdk.java.net/~roland/8023657/webrev.01/
>>>
>>> The output of -XX:+PrintMethodData is:
>>>
>>> 6 invokevirtual 2
>>> 0 bci: 6 VirtualCallData count(0) entries(1)
>>> 'TestProfiling'(4746 1.00)
>>> argument types 0: stack(1) 'TestProfiling$C'
>>> 1: stack(2) unknown (null seen)
>>>
>>> Profiling can either be off, on only for jsr292 related calls (invokedynamic, invokehandle or all invokes in a lambda form) or on for all methods and invokes. -XX:TypeProfile={0,1,2} is used to pick a level of profiling.
>>> Once all profiling is in (arguments, parameters, return value), in order to limit the number of options my plan is to use TypeProfile=xyz, with x,y,z in {0,1,2} to select the level of profiling for each. TypeProfile=111, Typeprofile=222 etc.
>>> Profiling is by default on only for jsr292 related calls in order to not impact startup/footprint of standard java apps.
>>>
>>> Roland.
>>>
>>>
>
From roland.westrelin at oracle.com Tue Oct 8 03:03:31 2013
From: roland.westrelin at oracle.com (roland.westrelin at oracle.com)
Date: Tue, 08 Oct 2013 10:03:31 +0000
Subject: hg: hsx/hotspot-comp/hotspot: 8024067: Missing replace_in_map() calls
following null checks
Message-ID: <20131008100350.54D2262E28@hg.openjdk.java.net>
Changeset: d9043b88eeb3
Author: roland
Date: 2013-10-03 10:55 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/d9043b88eeb3
8024067: Missing replace_in_map() calls following null checks
Summary: add replace_in_map() calls following some null checks in type checks
Reviewed-by: kvn
! src/share/vm/opto/graphKit.cpp
! src/share/vm/opto/graphKit.hpp
From roland.westrelin at oracle.com Tue Oct 8 05:06:49 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Tue, 8 Oct 2013 14:06:49 +0200
Subject: RFR(XS) JDK-8013830: [parfait] Uninitialised pointer 'Reachblock'
may be used as argument
In-Reply-To: <5252EBEF.1030200@oracle.com>
References: <5252BE6C.5070705@oracle.com>
<967D916F-DCD6-4672-9960-782C95BA7B66@oracle.com>
<5252EBEF.1030200@oracle.com>
Message-ID:
> At row 1330 in reg_split.cpp we check if we can split by re-materializing 'def'. We only enter split_Rematerialize() at row 1341 if the 'def' node doesn't have any live range inputs (contains_no_live_range_input(def)).
> This means that the condition at split_Rematerialize() at row 377 will never be true when entering from row 1341. Because of this we can pass in NULL at the call on row 1341 instead of the uninitialized pointer 'Reachblock'.
Thanks for the explanation. That looks good to me then.
Roland.
From roland.westrelin at oracle.com Tue Oct 8 05:11:50 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Tue, 8 Oct 2013 14:11:50 +0200
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To:
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
<524F6487.8030606@oracle.com>
<2C6936C4-ED19-41DB-A98B-28DCF18F88E1@oracle.com>
<60593E1C-9B90-494F-A62A-4A9D2F40EAAC@oracle.com>
<4AEE1470-BFBA-421E-9E09-155B9B0D7CBC@oracle.com>
Message-ID: <1E39D79B-5562-465F-9FE4-F02CB5B34B04@oracle.com>
Here is a new webrev with Chris' last suggestions:
http://cr.openjdk.java.net/~roland/8023657/webrev.03/
Roland.
From roland.westrelin at oracle.com Tue Oct 8 05:12:07 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Tue, 8 Oct 2013 14:12:07 +0200
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <52536293.6030606@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
<524F6487.8030606@oracle.com>
<2C6936C4-ED19-41DB-A98B-28DCF18F88E1@oracle.com>
<52536293.6030606@oracle.com>
Message-ID: <48D9C2AC-A8B8-4ECD-9D51-F9B0596ADD31@oracle.com>
> I looked through code in methoddate.?pp and I think it is fine.
> Assembler code also good. So changes are fine from what I see. And we already discussed recorded state.
Thanks, Vladimir.
Roland.
From niclas.adlertz at oracle.com Tue Oct 8 06:11:28 2013
From: niclas.adlertz at oracle.com (Niclas Adlertz)
Date: Tue, 08 Oct 2013 15:11:28 +0200
Subject: RFR(XS) JDK-8013830: [parfait] Uninitialised pointer 'Reachblock'
may be used as argument
In-Reply-To:
References: <5252BE6C.5070705@oracle.com>
<967D916F-DCD6-4672-9960-782C95BA7B66@oracle.com>
<5252EBEF.1030200@oracle.com>
Message-ID: <52540480.6070503@oracle.com>
Thank you Roland.
Kind Regards,
Niclas Adlertz
On 2013-10-08 14:06, Roland Westrelin wrote:
>> At row 1330 in reg_split.cpp we check if we can split by re-materializing 'def'. We only enter split_Rematerialize() at row 1341 if the 'def' node doesn't have any live range inputs (contains_no_live_range_input(def)).
>> This means that the condition at split_Rematerialize() at row 377 will never be true when entering from row 1341. Because of this we can pass in NULL at the call on row 1341 instead of the uninitialized pointer 'Reachblock'.
>
> Thanks for the explanation. That looks good to me then.
>
> Roland.
>
From morris.meyer at oracle.com Tue Oct 8 06:34:00 2013
From: morris.meyer at oracle.com (Morris Meyer)
Date: Tue, 08 Oct 2013 09:34:00 -0400
Subject: RFR(S): 8008242: VerifyOops fails on SPARC
In-Reply-To: <358968F5-E7B8-4D1B-8134-8D118002EF0A@oracle.com>
References: <5252D87E.5060605@oracle.com>
<40E501F0-B2BD-4C74-BDCA-FCD580368B93@oracle.com>
<358968F5-E7B8-4D1B-8134-8D118002EF0A@oracle.com>
Message-ID: <525409C8.8080801@oracle.com>
Thanks for the bringing that up Roland and Christian. I fixed this
issue and re-ran the change through JPRT.
Here's the patch.
--morris
WEBREV - http://cr.openjdk.java.net/8008242.02
On 10/7/13, 1:55 PM, Christian Thalinger wrote:
> On Oct 7, 2013, at 9:11 AM, Roland Westrelin wrote:
>
>> Hi Morris,
>>
>>> Could I get a review of this P2 issue on SPARC? I had to fix some branch relocation issues first, before relaxing the oop verify in c1_LIRAssembler_sparc::type_profile_helper() and mem2reg().
>> Why did you change:
>>
>> 1391 __ verify_oop(src);
>>
>> in c1_LIRAssembler_sparc.cpp?
> I concur. Did you hit a problem here? The check is guarded by:
>
> if (addr->base()->type() == T_OBJECT) {
> - __ verify_oop(src);
> + __ verify_klass_ptr(src);
> }
>
> so this should trigger. If it does then we are propagating the wrong type somewhere.
>
>> It appears verify_klass_ptr() doesn't do anything currently so that nothing fails with this changed doesn't really prove it's correct.
> Correct; these methods are currently empty. When the runtime team removed perm-gen they added these methods but never implemented them. Not our issue. But the second change is definitely correct; the receiver is a Klass*.
>
>> Roland.
>>
From vladimir.kozlov at oracle.com Tue Oct 8 09:18:52 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Tue, 08 Oct 2013 09:18:52 -0700
Subject: RFR(XS) JDK-8013830: [parfait] Uninitialised pointer 'Reachblock'
may be used as argument
In-Reply-To: <5252BE6C.5070705@oracle.com>
References: <5252BE6C.5070705@oracle.com>
Message-ID: <5254306C.1050208@oracle.com>
Good.
Vladimir
On 10/7/13 7:00 AM, Niclas Adlertz wrote:
> Hi all,
>
> The uninitialized pointer 'Reachblock' can be replaced with NULL at the
> call since the node we are re-materializing will not have any live range
> input (because of contains_no_live_range_input(def)).
>
> WEBREV: http://cr.openjdk.java.net/~adlertz/JDK-8013830/webrev00/
> JBS: https://bugs.openjdk.java.net/browse/JDK-8013830
>
> Kind Regards,
> Niclas Adlertz
>
From roland.westrelin at oracle.com Tue Oct 8 09:22:13 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Tue, 8 Oct 2013 18:22:13 +0200
Subject: RFR(L) 8026054: New type profiling points: type of return values at
calls
Message-ID: <6408A42B-61B5-494B-8DD8-CA6C88E11464@oracle.com>
http://cr.openjdk.java.net/~roland/8026054/webrev.00/
Follow up to 8023657: New type profiling points: arguments to call
8023657 introduced TypeStackSlotEntries to keep track of types of arguments. This change adds a couple more similar classes: TypeEntriesAtCall and ReturnTypeEntry which is maybe the confusing part of the change. ReturnTypeEntry keeps track of types of return values, TypeStackSlotEntries of types of arguments. In the next type profiling change, TypeStackSlotEntries will be used for parameter type profiling. TypeEntriesAtCall is ReturnTypeEntry + TypeStackSlotEntries to do the profiling at invokes. The number of cells needed at invokes is kept in TypeEntriesAtCall (to count cells for arguments and return value) and some methods in TypeStackSlotEntries were moved to TypeEntriesAtCall as a consequence.
The output of PrintMethodData is:
17 invokevirtual 3
16 bci: 17 VirtualCallData count(0) entries(1)
'TestProfiling'(4744 1.00)
argument types 0: stack(1) 'TestProfiling$C'
1: stack(2) 'TestProfiling$B'
return type 'TestProfiling$C'
Roland.
From roland.westrelin at oracle.com Tue Oct 8 09:31:31 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Tue, 8 Oct 2013 18:31:31 +0200
Subject: RFR(S): 8008242: VerifyOops fails on SPARC
In-Reply-To: <525409C8.8080801@oracle.com>
References: <5252D87E.5060605@oracle.com>
<40E501F0-B2BD-4C74-BDCA-FCD580368B93@oracle.com>
<358968F5-E7B8-4D1B-8134-8D118002EF0A@oracle.com>
<525409C8.8080801@oracle.com>
Message-ID: <8EE536BC-8694-4537-B731-8F0A1EEC3CF1@oracle.com>
Hi Morris,
> Thanks for the bringing that up Roland and Christian. I fixed this issue and re-ran the change through JPRT.
Why do you need to remove it entirely? Has this check caused failures? To me the check looks good and should be kept as it is.
Also in your previous change:
2568 __ verify_oop(tmp1);
became:
2568 __ verify_klass_ptr(tmp1);
and that was good.
Roland.
From roland.westrelin at oracle.com Tue Oct 8 09:35:24 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Tue, 8 Oct 2013 18:35:24 +0200
Subject: RFR(L): 8024070: C2 needs some form of type speculation
In-Reply-To: <52377337.2090105@oracle.com>
References: <48654079-0FC8-4765-967F-2617D8E7A9F4@oracle.com>
<5227C753.4080306@oracle.com>
<42A1CA68-F41C-46FC-848B-F8BFFCACB91D@oracle.com>
<52291E6A.5020605@oracle.com> <52295D6E.9040602@oracle.com>
<43E27E99-D76E-4ADA-A21F-3F490C0A98AC@oracle.com>
<522A5314.2060408@oracle.com> <52326202.1020807@oracle.com>
<6E39E6D7-F989-4E62-8267-DBAE76E4F76F@oracle.com>
<52377337.2090105@oracle.com>
Message-ID: <185B61AA-F326-4257-BD08-7AC04488723A@oracle.com>
Hi Vladimir,
>>> You need to add jtreg tests to verify these changes for different cases (especially merge points with different profile types).
>>
>> Do you mean tests that show an improvement (artificially pollute profiling at a call site and verify that some profiling that dominates the call site helps for instance)? I have such tests but they need manual inspection of the resulting code or inlining. Given the effect of the change has no visible effects at the java level how would I automate testing? Run with -XX:+PrintInlining and parse the output? Have we done that before on other tests?
>
> No. I just want to test correctness. Something like merging array and instance types, reflection, constant types etc. To make sure your new code in C2 types works correctly (correct inlining). Use test cases which you think can be problematic. Even if a test doesn't fail with your current changes we need it.
This is still not clear to me.
Do you want tests to test correctness as in no VM crash or correctness as in correctly optimized?
Maybe you can sketch a example test?
Roland.
From morris.meyer at oracle.com Tue Oct 8 09:45:36 2013
From: morris.meyer at oracle.com (Morris Meyer)
Date: Tue, 08 Oct 2013 12:45:36 -0400
Subject: RFR(S): 8008242: VerifyOops fails on SPARC
In-Reply-To: <8EE536BC-8694-4537-B731-8F0A1EEC3CF1@oracle.com>
References: <5252D87E.5060605@oracle.com>
<40E501F0-B2BD-4C74-BDCA-FCD580368B93@oracle.com>
<358968F5-E7B8-4D1B-8134-8D118002EF0A@oracle.com>
<525409C8.8080801@oracle.com>
<8EE536BC-8694-4537-B731-8F0A1EEC3CF1@oracle.com>
Message-ID: <525436B0.10305@oracle.com>
Roland,
The x86 version of LIR_Assembler::type_profile_helper() does not have a
verify_oop() and I removed the SPARC version accordingly.
--mm
On 10/8/13, 12:31 PM, Roland Westrelin wrote:
> Hi Morris,
>
>> Thanks for the bringing that up Roland and Christian. I fixed this issue and re-ran the change through JPRT.
> Why do you need to remove it entirely? Has this check caused failures? To me the check looks good and should be kept as it is.
>
> Also in your previous change:
>
> 2568 __ verify_oop(tmp1);
>
> became:
>
> 2568 __ verify_klass_ptr(tmp1);
>
> and that was good.
>
> Roland.
From christian.thalinger at oracle.com Tue Oct 8 10:12:32 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Tue, 8 Oct 2013 10:12:32 -0700
Subject: RFR(L): 8023657: New type profiling points: arguments to call
In-Reply-To: <1E39D79B-5562-465F-9FE4-F02CB5B34B04@oracle.com>
References:
<5217E692.8090308@oracle.com>
<4A2E28CD-6E92-49E7-B97A-4FCD2D3C5D83@oracle.com>
<522A7CC1.9050603@oracle.com>
<522E0395.2030906@oracle.com>
<8C258BCC-0109-4A6B-9117-501EE62D3AA4@oracle.com>
<541BDE20-900D-437A-8A1D-A1201AE2A6EA@oracle.com>
<524F6487.8030606@oracle.com>
<2C6936C4-ED19-41DB-A98B-28DCF18F88E1@oracle.com>
<60593E1C-9B90-494F-A62A-4A9D2F40EAAC@oracle.com>
<4AEE1470-BFBA-421E-9E09-155B9B0D7CBC@oracle.com>
<1E39D79B-5562-465F-9FE4-F02CB5B34B04@oracle.com>
Message-ID: <94FB1181-B497-4EFC-B594-F9E481FA320C@oracle.com>
Thank you. Looks good.
On Oct 8, 2013, at 5:11 AM, Roland Westrelin wrote:
>
> Here is a new webrev with Chris' last suggestions:
> http://cr.openjdk.java.net/~roland/8023657/webrev.03/
>
> Roland.
From christian.thalinger at oracle.com Tue Oct 8 10:20:59 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Tue, 8 Oct 2013 10:20:59 -0700
Subject: RFR(S): 8008242: VerifyOops fails on SPARC
In-Reply-To: <525436B0.10305@oracle.com>
References: <5252D87E.5060605@oracle.com>
<40E501F0-B2BD-4C74-BDCA-FCD580368B93@oracle.com>
<358968F5-E7B8-4D1B-8134-8D118002EF0A@oracle.com>
<525409C8.8080801@oracle.com>
<8EE536BC-8694-4537-B731-8F0A1EEC3CF1@oracle.com>
<525436B0.10305@oracle.com>
Message-ID: <9BF6FAEC-7728-45C5-BE43-9C45957A31C8@oracle.com>
On Oct 8, 2013, at 9:45 AM, Morris Meyer wrote:
> Roland,
>
> The x86 version of LIR_Assembler::type_profile_helper() does not have a verify_oop() and I removed the SPARC version accordingly.
Well, the reason that x86 doesn't have that check is because on x86 we can do a memory compare:
__ cmpptr(recv, Address(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i))));
So we don't have the value in a register to do the check. Please but the verify_klass_ptr check back.
>
> --mm
>
>
> On 10/8/13, 12:31 PM, Roland Westrelin wrote:
>> Hi Morris,
>>
>>> Thanks for the bringing that up Roland and Christian. I fixed this issue and re-ran the change through JPRT.
>> Why do you need to remove it entirely? Has this check caused failures? To me the check looks good and should be kept as it is.
>>
>> Also in your previous change:
>>
>> 2568 __ verify_oop(tmp1);
>>
>> became:
>>
>> 2568 __ verify_klass_ptr(tmp1);
>>
>> and that was good.
>>
>> Roland.
>
From christian.thalinger at oracle.com Tue Oct 8 10:30:29 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Tue, 8 Oct 2013 10:30:29 -0700
Subject: RFR(S): 8008242: VerifyOops fails on SPARC
In-Reply-To: <525409C8.8080801@oracle.com>
References: <5252D87E.5060605@oracle.com>
<40E501F0-B2BD-4C74-BDCA-FCD580368B93@oracle.com>
<358968F5-E7B8-4D1B-8134-8D118002EF0A@oracle.com>
<525409C8.8080801@oracle.com>
Message-ID: <6F84855B-10D9-4F36-A69C-2018AA728ECA@oracle.com>
We don't need this check (which is wrong btw.):
+ if (type == T_OBJECT) {
+ __ verify_oop(dest->as_register());
+ }
LIR_Assembler::load methods already do that:
if (type == T_ARRAY || type == T_OBJECT) {
__ verify_oop(to_reg->as_register());
}
Once more, why did you remove this one?
1390 if (addr->base()->type() == T_OBJECT) {
1391 __ verify_oop(src);
1392 }
On Oct 8, 2013, at 6:34 AM, Morris Meyer wrote:
> Thanks for the bringing that up Roland and Christian. I fixed this issue and re-ran the change through JPRT.
>
> Here's the patch.
>
> --morris
>
> WEBREV - http://cr.openjdk.java.net/8008242.02
>
> On 10/7/13, 1:55 PM, Christian Thalinger wrote:
>> On Oct 7, 2013, at 9:11 AM, Roland Westrelin wrote:
>>
>>> Hi Morris,
>>>
>>>> Could I get a review of this P2 issue on SPARC? I had to fix some branch relocation issues first, before relaxing the oop verify in c1_LIRAssembler_sparc::type_profile_helper() and mem2reg().
>>> Why did you change:
>>>
>>> 1391 __ verify_oop(src);
>>>
>>> in c1_LIRAssembler_sparc.cpp?
>> I concur. Did you hit a problem here? The check is guarded by:
>>
>> if (addr->base()->type() == T_OBJECT) {
>> - __ verify_oop(src);
>> + __ verify_klass_ptr(src);
>> }
>>
>> so this should trigger. If it does then we are propagating the wrong type somewhere.
>>
>>> It appears verify_klass_ptr() doesn't do anything currently so that nothing fails with this changed doesn't really prove it's correct.
>> Correct; these methods are currently empty. When the runtime team removed perm-gen they added these methods but never implemented them. Not our issue. But the second change is definitely correct; the receiver is a Klass*.
>>
>>> Roland.
>>>
>
From vladimir.kozlov at oracle.com Tue Oct 8 10:34:14 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Tue, 08 Oct 2013 10:34:14 -0700
Subject: RFR(L): 8024070: C2 needs some form of type speculation
In-Reply-To: <185B61AA-F326-4257-BD08-7AC04488723A@oracle.com>
References: <48654079-0FC8-4765-967F-2617D8E7A9F4@oracle.com>
<5227C753.4080306@oracle.com>
<42A1CA68-F41C-46FC-848B-F8BFFCACB91D@oracle.com>
<52291E6A.5020605@oracle.com> <52295D6E.9040602@oracle.com>
<43E27E99-D76E-4ADA-A21F-3F490C0A98AC@oracle.com>
<522A5314.2060408@oracle.com> <52326202.1020807@oracle.com>
<6E39E6D7-F989-4E62-8267-DBAE76E4F76F@oracle.com>
<52377337.2090105@oracle.com>
<185B61AA-F326-4257-BD08-7AC04488723A@oracle.com>
Message-ID: <52544216.7060503@oracle.com>
Test produce correct results (1+2==3; the result could be wrong, for
example, when an incorrect method is inlined because incorrect receiver
type was used) and no assert (crushes). I don't ask to verify
inlining/not_inlining decisions.
thanks,
Vladimir
On 10/8/13 9:35 AM, Roland Westrelin wrote:
> Hi Vladimir,
>
>>>> You need to add jtreg tests to verify these changes for different cases (especially merge points with different profile types).
>>>
>>> Do you mean tests that show an improvement (artificially pollute profiling at a call site and verify that some profiling that dominates the call site helps for instance)? I have such tests but they need manual inspection of the resulting code or inlining. Given the effect of the change has no visible effects at the java level how would I automate testing? Run with -XX:+PrintInlining and parse the output? Have we done that before on other tests?
>>
>> No. I just want to test correctness. Something like merging array and instance types, reflection, constant types etc. To make sure your new code in C2 types works correctly (correct inlining). Use test cases which you think can be problematic. Even if a test doesn't fail with your current changes we need it.
>
> This is still not clear to me.
> Do you want tests to test correctness as in no VM crash or correctness as in correctly optimized?
> Maybe you can sketch a example test?
>
> Roland.
>
From roland.westrelin at oracle.com Tue Oct 8 10:45:57 2013
From: roland.westrelin at oracle.com (Roland Westrelin)
Date: Tue, 8 Oct 2013 19:45:57 +0200
Subject: RFR(S): 8008242: VerifyOops fails on SPARC
In-Reply-To: <9BF6FAEC-7728-45C5-BE43-9C45957A31C8@oracle.com>
References: <5252D87E.5060605@oracle.com>
<40E501F0-B2BD-4C74-BDCA-FCD580368B93@oracle.com>
<358968F5-E7B8-4D1B-8134-8D118002EF0A@oracle.com>
<525409C8.8080801@oracle.com>
<8EE536BC-8694-4537-B731-8F0A1EEC3CF1@oracle.com>
<525436B0.10305@oracle.com>
<9BF6FAEC-7728-45C5-BE43-9C45957A31C8@oracle.com>
Message-ID: <402AD379-4674-4D34-BDEF-CF7186FB6906@oracle.com>
>> The x86 version of LIR_Assembler::type_profile_helper() does not have a verify_oop() and I removed the SPARC version accordingly.
>
> Well, the reason that x86 doesn't have that check is because on x86 we can do a memory compare:
>
> __ cmpptr(recv, Address(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i))));
>
> So we don't have the value in a register to do the check. Please but the verify_klass_ptr check back.
I think you need to put the one in LIR_Assembler::mem2reg() back as well. If we need to remove it for some test to pass then it means there's another bug somewhere and we shouldn't hide it.
Roland.
From igor.veresov at oracle.com Tue Oct 8 10:47:29 2013
From: igor.veresov at oracle.com (igor.veresov at oracle.com)
Date: Tue, 08 Oct 2013 17:47:29 +0000
Subject: hg: hsx/hotspot-comp/hotspot: 50 new changesets
Message-ID: <20131008174916.1936A62E4D@hg.openjdk.java.net>
Changeset: 586fa1919a89
Author: bpittore
Date: 2013-09-20 15:06 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/586fa1919a89
8014911: Should use SUPPORTS_NATIVE_CX8 define to help C/C++ compiler elide blocks of code
Summary: If SUPPORTS_NATIVE_CX8 true then supports_cx8() function hard coded to return 'true'
Reviewed-by: kvn, twisti, dholmes
! src/share/vm/runtime/vm_version.hpp
Changeset: 504d8f519adf
Author: jiangli
Date: 2013-09-20 20:19 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/504d8f519adf
Merge
Changeset: d682c6e24fe3
Author: bdelsart
Date: 2013-09-26 01:30 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/d682c6e24fe3
Merge
Changeset: 60a2d625db36
Author: bdelsart
Date: 2013-09-26 04:00 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/60a2d625db36
Merge
Changeset: 2c022e432e10
Author: stefank
Date: 2013-09-20 10:53 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/2c022e432e10
8024974: Incorrect use of GC_locker::is_active()
Summary: SymbolTable and StringTable can make calls to GC_locker::is_active() outside a safepoint. This isn't safe because the GC_locker active state (lock count) is only updated at a safepoint and only remains valid as long as _needs_gc is true. However, outside a safepoint_needs_gc can change to false at any time, which makes it impossible to do a correct call to is_active() in that context. In this case these calls can just be removed since the input argument to basic_add() should never be on the heap and so there's no need to check the GC_locker state. This change also adjusts the assert() in is_active() to makes sure all calls to this function are always done under a safepoint.
Reviewed-by: brutisso, dcubed
Contributed-by: per.liden at oracle.com
! src/share/vm/classfile/symbolTable.cpp
! src/share/vm/memory/gcLocker.cpp
! src/share/vm/memory/gcLocker.hpp
Changeset: 9361de86a50f
Author: stefank
Date: 2013-09-20 11:00 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/9361de86a50f
8025059: Metspace::should_expand mixes bytes and words in check against MaxMetaspaceSize
Reviewed-by: coleenp, brutisso, mgerdin, jmasa
! src/share/vm/memory/metaspace.cpp
Changeset: b960c9df4f11
Author: stefank
Date: 2013-09-21 10:09 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/b960c9df4f11
8025096: Move the ChunkManager instances out of the VirtualSpaceLists
Reviewed-by: coleenp, mgerdin, jmasa
! src/share/vm/memory/metaspace.cpp
! src/share/vm/memory/metaspace.hpp
Changeset: 10cc3b624f8f
Author: tschatzl
Date: 2013-09-24 10:14 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/10cc3b624f8f
Merge
- test/runtime/6878713/Test6878713.sh
- test/runtime/6878713/testcase.jar
- test/runtime/7020373/Test7020373.sh
- test/runtime/7020373/testcase.jar
Changeset: a19bea467577
Author: tschatzl
Date: 2013-09-25 13:25 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/a19bea467577
7163191: G1: introduce a "heap spanning table" abstraction
Summary: Add G1BiasedArray that is an array where each element represents a fixed-sized subdivision of the heap. Use this abstraction to refactor the HeapRegionSeq class.
Reviewed-by: brutisso
! make/excludeSrc.make
+ src/share/vm/gc_implementation/g1/g1BiasedArray.cpp
+ src/share/vm/gc_implementation/g1/g1BiasedArray.hpp
! src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
! src/share/vm/gc_implementation/g1/heapRegionSeq.cpp
! src/share/vm/gc_implementation/g1/heapRegionSeq.hpp
! src/share/vm/gc_implementation/g1/heapRegionSeq.inline.hpp
! src/share/vm/gc_implementation/g1/vmStructs_g1.hpp
! src/share/vm/prims/jni.cpp
Changeset: 03f493ce3a71
Author: brutisso
Date: 2013-09-25 17:23 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/03f493ce3a71
8025228: assert(new_entry->reserved_words() == vs_word_size) fails in nightly
Reviewed-by: mgerdin, tschatzl, jmasa
! src/share/vm/memory/metaspace.cpp
! src/share/vm/prims/jni.cpp
Changeset: 461159cd7a91
Author: tschatzl
Date: 2013-09-26 12:18 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/461159cd7a91
Merge
! src/share/vm/classfile/symbolTable.cpp
Changeset: 3da9fad1391e
Author: tschatzl
Date: 2013-09-26 06:34 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/3da9fad1391e
Merge
Changeset: c81dd5393a5e
Author: tbell
Date: 2013-09-25 12:23 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/c81dd5393a5e
8025411: JPRT to switch to the new Win platforms for JDK8 builds this week
Reviewed-by: ksrini, katleman
! make/jprt.properties
Changeset: fff4842215d1
Author: cl
Date: 2013-09-26 10:43 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/fff4842215d1
Added tag jdk8-b109 for changeset c81dd5393a5e
! .hgtags
Changeset: 58043478c26d
Author: amurillo
Date: 2013-09-26 13:33 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/58043478c26d
Merge
Changeset: 6209b0ed51c0
Author: amurillo
Date: 2013-09-26 13:33 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/6209b0ed51c0
Added tag hs25-b52 for changeset 58043478c26d
! .hgtags
Changeset: 24250c363d7f
Author: amurillo
Date: 2013-09-26 13:41 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/24250c363d7f
8025536: new hotspot build - hs25-b53
Reviewed-by: jcoomes
! make/hotspot_version
Changeset: 899ecf76b570
Author: dsimms
Date: 2013-09-25 13:58 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/899ecf76b570
8023956: Provide a work-around to broken Linux 32 bit "Exec Shield" using CS for NX emulation (crashing with SI_KERNEL)
Summary: Execute some code at a high virtual address value, and keep mapped
Reviewed-by: coleenp, zgu
! src/os/linux/vm/os_linux.cpp
! src/os_cpu/linux_x86/vm/os_linux_x86.cpp
! src/os_cpu/linux_x86/vm/os_linux_x86.hpp
Changeset: 5b1191bf0b4b
Author: ctornqvi
Date: 2013-09-25 17:47 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/5b1191bf0b4b
8024677: [TESTBUG] Move tests for classes in /testlibrary
Summary: Moved the tests to /testlibrary_tests and updated TEST.groups
Reviewed-by: dholmes, sla
! test/TEST.groups
- test/testlibrary/AssertsTest.java
- test/testlibrary/OutputAnalyzerReportingTest.java
- test/testlibrary/OutputAnalyzerTest.java
+ test/testlibrary_tests/AssertsTest.java
+ test/testlibrary_tests/OutputAnalyzerReportingTest.java
+ test/testlibrary_tests/OutputAnalyzerTest.java
Changeset: c1fbf21c7397
Author: ctornqvi
Date: 2013-09-25 17:47 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/c1fbf21c7397
8024492: [TESTBUG] Test library class Platform.java needs to include methods for missing OS's and architectures
Summary: Added methods for 32bit, arm, ppc, x64 and x86
Reviewed-by: zgu, hseigel, mseledtsov
! test/testlibrary/com/oracle/java/testlibrary/Platform.java
Changeset: 190899198332
Author: hseigel
Date: 2013-09-26 10:25 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/190899198332
7195622: CheckUnhandledOops has limited usefulness now
Summary: Enable CHECK_UNHANDLED_OOPS in fastdebug builds across all supported platforms.
Reviewed-by: coleenp, hseigel, dholmes, stefank, twisti, ihse, rdurbin
Contributed-by: lois.foltan at oracle.com
! make/bsd/makefiles/fastdebug.make
! make/linux/makefiles/fastdebug.make
! make/windows/makefiles/fastdebug.make
! src/cpu/sparc/vm/frame_sparc.cpp
! src/cpu/sparc/vm/nativeInst_sparc.cpp
! src/cpu/x86/vm/frame_x86.cpp
! src/cpu/x86/vm/methodHandles_x86.cpp
! src/cpu/x86/vm/x86_32.ad
! src/cpu/x86/vm/x86_64.ad
! src/share/vm/c1/c1_Runtime1.cpp
! src/share/vm/classfile/classLoaderData.cpp
! src/share/vm/classfile/dictionary.hpp
! src/share/vm/classfile/symbolTable.cpp
! src/share/vm/code/nmethod.cpp
! src/share/vm/compiler/oopMap.cpp
! src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
! src/share/vm/gc_implementation/g1/concurrentMark.cpp
! src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
! src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
! src/share/vm/gc_implementation/g1/g1OopClosures.hpp
! src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp
! src/share/vm/gc_implementation/g1/heapRegion.cpp
! src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp
! src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
! src/share/vm/gc_implementation/parNew/parOopClosures.inline.hpp
! src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp
! src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp
! src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp
! src/share/vm/gc_implementation/parallelScavenge/psScavenge.inline.hpp
! src/share/vm/interpreter/bytecodeTracer.cpp
! src/share/vm/interpreter/linkResolver.cpp
! src/share/vm/memory/heapInspection.hpp
! src/share/vm/memory/referenceProcessor.cpp
! src/share/vm/oops/constantPool.cpp
! src/share/vm/oops/cpCache.cpp
! src/share/vm/oops/instanceKlass.cpp
! src/share/vm/oops/instanceMirrorKlass.hpp
! src/share/vm/oops/instanceRefKlass.cpp
! src/share/vm/oops/methodData.hpp
! src/share/vm/oops/oop.inline.hpp
! src/share/vm/oops/oopsHierarchy.hpp
! src/share/vm/opto/machnode.cpp
! src/share/vm/prims/jvmtiTagMap.cpp
! src/share/vm/prims/unsafe.cpp
! src/share/vm/runtime/biasedLocking.cpp
! src/share/vm/runtime/deoptimization.cpp
! src/share/vm/runtime/frame.cpp
! src/share/vm/runtime/javaCalls.cpp
! src/share/vm/runtime/safepoint.cpp
! src/share/vm/runtime/sharedRuntime.cpp
! src/share/vm/runtime/synchronizer.cpp
! src/share/vm/runtime/thread.cpp
! src/share/vm/runtime/thread.hpp
! src/share/vm/runtime/vframeArray.cpp
! src/share/vm/services/classLoadingService.cpp
! src/share/vm/services/heapDumper.cpp
! src/share/vm/services/memoryManager.cpp
! src/share/vm/services/memoryPool.cpp
! src/share/vm/utilities/globalDefinitions.hpp
! src/share/vm/utilities/globalDefinitions_visCPP.hpp
! src/share/vm/utilities/hashtable.cpp
! src/share/vm/utilities/taskqueue.hpp
Changeset: a5ac0873476c
Author: zgu
Date: 2013-09-27 10:08 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/a5ac0873476c
Merge
! src/share/vm/classfile/symbolTable.cpp
! src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
! src/share/vm/runtime/sharedRuntime.cpp
Changeset: 36b97be47bde
Author: acorn
Date: 2013-10-01 08:10 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/36b97be47bde
8011311: Private interface methods. Default conflicts:ICCE. no erased_super_default.
Reviewed-by: coleenp, bharadwaj, minqi
! src/share/vm/classfile/classFileParser.cpp
! src/share/vm/classfile/defaultMethods.cpp
! src/share/vm/classfile/defaultMethods.hpp
! src/share/vm/interpreter/linkResolver.cpp
! src/share/vm/oops/instanceKlass.cpp
! src/share/vm/oops/klassVtable.cpp
Changeset: de059a14e159
Author: zgu
Date: 2013-10-01 08:54 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/de059a14e159
8022187: Missing ResourceMark crash when assertion using FormatBufferResource fails
Summary: Uses stack for the format buffer instead of resource memory
Reviewed-by: kvn, coleenp
! src/share/vm/utilities/array.hpp
Changeset: 90b27e931639
Author: zgu
Date: 2013-10-01 09:21 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/90b27e931639
Merge
Changeset: 31f0118ea584
Author: zgu
Date: 2013-10-01 11:06 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/31f0118ea584
Merge
Changeset: 268e7a2178d7
Author: iveresov
Date: 2013-10-03 16:38 +0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/268e7a2178d7
Merge
! src/cpu/x86/vm/methodHandles_x86.cpp
! src/cpu/x86/vm/x86_32.ad
! src/cpu/x86/vm/x86_64.ad
! src/share/vm/classfile/classFileParser.cpp
! src/share/vm/classfile/defaultMethods.cpp
! src/share/vm/code/nmethod.cpp
! src/share/vm/runtime/safepoint.cpp
! src/share/vm/services/classLoadingService.cpp
Changeset: d68894a09c7c
Author: jiangli
Date: 2013-09-27 13:49 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/d68894a09c7c
8024990: JT_JDK: 11 failures with SIGSEGV on arm-sflt platforms in nightly fastdebug build.
Summary: Enable patching for load_appendix_id.
Reviewed-by: kvn, dlong, bdelsart
! src/share/vm/c1/c1_Runtime1.cpp
Changeset: 5186dcaca431
Author: jiangli
Date: 2013-09-27 13:53 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/5186dcaca431
Merge
! src/share/vm/c1/c1_Runtime1.cpp
- test/gc/metaspace/ClassMetaspaceSizeInJmapHeap.java
- test/runtime/6878713/Test6878713.sh
- test/runtime/6878713/testcase.jar
- test/runtime/7020373/Test7020373.sh
- test/runtime/7020373/testcase.jar
Changeset: d0cfa6502dfe
Author: jprovino
Date: 2013-10-03 10:25 -0400
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/d0cfa6502dfe
Merge
! src/share/vm/c1/c1_Runtime1.cpp
Changeset: 100614790c1e
Author: vladidan
Date: 2013-10-03 10:35 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/100614790c1e
Merge
Changeset: c319b188c7b2
Author: tschatzl
Date: 2013-09-26 12:49 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/c319b188c7b2
8014078: G1: improve remembered set summary information by providing per region type information
Summary: Add memory consumption breakdown on a per region type in the G1 remembered set summary statistics. This simplifies remembered set memory consumption analysis.
Reviewed-by: brutisso
! src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
! src/share/vm/gc_implementation/g1/g1RemSet.cpp
! src/share/vm/gc_implementation/g1/g1RemSet.hpp
! src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp
! test/gc/g1/TestSummarizeRSetStats.java
+ test/gc/g1/TestSummarizeRSetStatsPerRegion.java
+ test/gc/g1/TestSummarizeRSetStatsTools.java
Changeset: bc918fd1e584
Author: mgerdin
Date: 2013-09-27 10:23 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/bc918fd1e584
8025279: metaspace/flags/maxMetaspaceSize throws OOM: out of Compressed Klass space
Summary: Only put "Compressed class space" as OOM cause if actually using Compressed class space
Reviewed-by: jwilhelm, stefank, ehelin, coleenp
! src/share/vm/memory/metaspace.cpp
! src/share/vm/memory/metaspace.hpp
Changeset: 4fa18058548e
Author: tschatzl
Date: 2013-09-27 11:18 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/4fa18058548e
Merge
Changeset: ccef6e165e8b
Author: tschatzl
Date: 2013-09-27 13:41 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/ccef6e165e8b
Merge
Changeset: d55c004e1d4d
Author: mgerdin
Date: 2013-09-24 14:46 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/d55c004e1d4d
8025305: Cleanup CardTableModRefBS usage in G1
Summary: Move some G1 specific code from CardTableModRefBS to G1SATBCardTableModRefBS.
Reviewed-by: brutisso, tschatzl, ehelin
! src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp
! src/share/vm/gc_implementation/g1/g1CardCounts.cpp
! src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
! src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
! src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp
! src/share/vm/gc_implementation/g1/g1EvacFailure.hpp
! src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
! src/share/vm/gc_implementation/g1/g1RemSet.cpp
! src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp
! src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp
! src/share/vm/memory/cardTableModRefBS.cpp
! src/share/vm/memory/cardTableModRefBS.hpp
Changeset: 7ec10139bf37
Author: tschatzl
Date: 2013-09-30 12:43 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/7ec10139bf37
8025441: G1: assert "assert(thread < _num_vtimes) failed: just checking" fails when G1ConcRefinementThreads > ParallelGCThreads
Summary: The initialization for the remembered set summary data structures used the wrong thread count, i.e. number of worker threads instead of number of refinement threads.
Reviewed-by: brutisso
! src/share/vm/gc_implementation/g1/g1RemSet.cpp
! src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp
! src/share/vm/gc_implementation/g1/g1RemSetSummary.hpp
+ test/gc/g1/TestSummarizeRSetStatsThreads.java
Changeset: 9de9169ddde6
Author: brutisso
Date: 2013-10-01 07:52 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/9de9169ddde6
8025605: G1: Heap expansion logging misleading for fully expanded heap
Reviewed-by: tschatzl, jwilhelm, jmasa
! src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
Changeset: 9ecd6d3782b1
Author: ehelin
Date: 2013-10-01 15:21 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/9ecd6d3782b1
8025313: MetaspaceMemoryPool incorrectly reports undefined size for max
Reviewed-by: stefank, tschatzl
! src/share/vm/memory/collectorPolicy.cpp
Changeset: 77a774ab3cf0
Author: mgerdin
Date: 2013-10-02 14:33 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/77a774ab3cf0
8012525: gc/metaspace/G1AddMetaspaceDependency.java Test fails a safepoint timeout assertion or hangs.
Reviewed-by: brutisso, tschatzl
! test/gc/metaspace/G1AddMetaspaceDependency.java
Changeset: 6e22e7042433
Author: ehelin
Date: 2013-09-30 11:39 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/6e22e7042433
8025226: TestPerfCountersAndMemoryPools.java fails with -Xmixed or -Xcomp
Reviewed-by: brutisso, mgerdin
! test/gc/metaspace/TestPerfCountersAndMemoryPools.java
Changeset: 379ef2cc19c0
Author: ehelin
Date: 2013-10-02 18:24 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/379ef2cc19c0
Merge
Changeset: ab68fc0101ce
Author: jwilhelm
Date: 2013-10-03 13:19 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/ab68fc0101ce
8025855: Simplify GenRemSet code slightly
Summary: Remove a few redundant switch-statements
Reviewed-by: jcoomes, tschatzl
! src/share/vm/memory/collectorPolicy.cpp
! src/share/vm/memory/genRemSet.cpp
Changeset: c49c7f835e8d
Author: jwilhelm
Date: 2013-10-03 17:16 +0200
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/c49c7f835e8d
8025853: Remove unnecessary uses of GenerationSizer
Summary: Removed stray includes and some minor cleanup of GenerationSizer
Reviewed-by: tschatzl, jcoomes
! src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp
! src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp
! src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp
! src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp
! src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
! src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp
Changeset: 798522662fcd
Author: jcoomes
Date: 2013-10-04 13:37 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/798522662fcd
Merge
! src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
! src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
! src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp
Changeset: ebfa5793d349
Author: katleman
Date: 2013-10-02 13:26 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/ebfa5793d349
Added tag jdk8-b110 for changeset 6209b0ed51c0
! .hgtags
Changeset: 562a3d356de6
Author: amurillo
Date: 2013-10-04 14:10 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/562a3d356de6
Merge
- test/testlibrary/AssertsTest.java
- test/testlibrary/OutputAnalyzerReportingTest.java
- test/testlibrary/OutputAnalyzerTest.java
Changeset: f6962730bbde
Author: amurillo
Date: 2013-10-04 14:10 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/f6962730bbde
Added tag hs25-b53 for changeset 562a3d356de6
! .hgtags
Changeset: deec468baebd
Author: amurillo
Date: 2013-10-04 14:19 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/deec468baebd
8025859: new hotspot build - hs25-b54
Reviewed-by: jcoomes
! make/hotspot_version
Changeset: 17cda06bcb7d
Author: iveresov
Date: 2013-10-08 07:08 -0700
URL: http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/17cda06bcb7d
Merge
! src/share/vm/classfile/defaultMethods.cpp
- test/compiler/8013496/Test8013496.sh
From vladimir.kozlov at oracle.com Tue Oct 8 12:02:07 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Tue, 08 Oct 2013 12:02:07 -0700
Subject: RFR (L): 8015774: Add support for multiple code heaps
In-Reply-To:
References:
Message-ID: <525456AF.7050602@oracle.com>
ProfiledCodeHeapSize value is missleading because part of it will be cut
for non_method section:
profile_size = ProfiledCodeHeapSize - non_method_size;
And you hided default non_method_size (8Mb) inside the code:
+ size_t non_method_size =
ReservedCodeSpace::allocation_align_size_up(MIN2(ReservedCodeCacheSize,
8*M));
It is not good. If in future we add more stubs, for example, 8Mb could
be not enough and it will be hard to find this place. May be
NonProfiledCodeHeapSize + ProfiledCodeHeapSize == ReservedCodeCacheSize
+ 8Mb
So the size could be adjusted by setting 2 flags.
Why you need all heaps for Client VM (only C1 is available)?
+bool CodeCache::heap_available(CodeBlobType bt) {
+ if (TieredCompilation || bt == btNonMethod) {
+ // Use all heaps for TieredCompilation
+ return true;
+ } else {
+#ifdef COMPILER2
+ // We only need the heap for C2
+ return (bt == btMethodNoProfile);
+#else
+ // We need both heaps
+ return true;
+#endif
+ }
}
report_codemem_full(). When I discussed this feature with Igor, he told
me that if you failed allocate in one heap you can allocate in an other
heap. Or you can move boundary. The longer you run "stable" application
the less ProfiledCodeHeap will be used (could be changed later when we
add code to fall back to profiled code during nmethod deoptimization).
It would be nice to redirect its space for NonProfiledCodeHeap. For this
purpose layout of heaps should be reversed.
It would be strange to see free space in whole codecache but not able to
allocate.
Next message is incorrect now since you need heap's specific flag:
+ warning("Try increasing the code cache size using
-XX:ReservedCodeCacheSize=");
thanks,
Vladimir
On 10/2/13 7:06 AM, Tobias Hartmann wrote:
> Hi,
>
> please review the following change.
>
> bug: https://bugs.openjdk.java.net/browse/JDK-8015774
> webrev: http://cr.openjdk.java.net/~anoll/8015774/webrev.00/
>
> This change implements support for multiple code heaps in the code
> cache. The interface of the code cache was changed accordingly and
> references from other components of the VM were adapted. This includes
> the indirect references from:
> - the Serviceability Agent: vmStructs and the Java code cache interface
> (sun.jvm.hotspot.code.CodeCache)
> - the dtrace ustack helper script (jhelper.d)
> - the pstack support library libjvm_db.c
>
> Currently the code cache contains the following three code heaps each of
> which contains CodeBlobs of a specific type:
> - Non-Profiled methods: nmethods that are not profiled, i.e., those
> compiled at tier 1 or 4 and native methods
> - Profiled methods: nmethods that are profiled, i.e., those compiled at
> tier 2 or 3
> - Non-methods: Non-methods like Buffers, Adapters and Runtime Stubs
>
> By default, 2/3 of the ReservedCodeCacheSize is used for the
> non-profiled heap and 1/3 is used for the profiled heap. Experiments
> with a small code cache size have shown that this configuration performs
> best (see [1]). Sizes can be configured using the
> NonProfiledCodeHeapSize and ProfiledCodeHeapSize parameters. By now the
> non-method heap has a fixed size of 8mb. More tests have to be performed
> to determine reasonable default values for different build and runtime
> configurations. It would be also possible to add an additional heap for
> the CodeBlobs needed during VM startup (adapters, stubs, interpreter,
> ...) and use the non-method heap for non-method blobs allocated during
> runtime.
>
> The main benefit of this allocation is that functions operating on
> nmethods can now be optimized to only iterate over CodeBlobs on the
> nmethod heaps, avoiding a full scan of the code cache including the
> non-methods. Performance evaluation shows that this results in a great
> reduction of the sweeping time. Further it is now possible to extend the
> sweeper to selectively sweep nmethods of different compilation levels.
> Because it is more expensive to recompile a highly optimized method, it
> makes sense to first sweep those compiled at a lower level. Possible
> future optimizations may also include multithreaded sweeping and
> separation of nmethod code and metadata.
>
> The code was tested using Nashorn + Octane, DaCapo, SPECJvm2008 and jprt.
>
> Benchmark results:
> - [2] shows the score of the old and new version running Nashorn with
> the Octane benchmark at different code cache sizes (10 runs each, sizes
> < 32mb crash with the old version). An performance improvement of around
> 15% is reached.
> - [3] shows the sweep time of the NMethodSweeper during runs of the
> Octane benchmark with different code cache sizes (10 runs each). The
> time is greatly reduced with the new version.
> - [4] shows the time ratio (TOld / TNew - 1) of the DaCapo benchmarks
> with a code cache size of 64mb (30 runs with 20 warmups each). With the
> time differences being smaller than the confidence intervals it is not
> possible determine a difference between the two versions.
> - Multiple runs of the SPECJvm2008 benchmark with different code cache
> sizes did not show a difference between the two versions. This is
> probably due to the fact that not much code is compiled at runtime
> compared to Nashorn with the Octane benchmark.
>
> The error bars at each data point show the 95% confidence interval.
>
> [1] https://bugs.openjdk.java.net/secure/attachment/16372/OctaneRatio.png
> [2]
> https://bugs.openjdk.java.net/secure/attachment/16374/OctaneCCSizes_new.png
> [3]
> https://bugs.openjdk.java.net/secure/attachment/16373/OctaneSweepTime_new.png
> [4]
> https://bugs.openjdk.java.net/secure/attachment/16371/DaCapoCCSizes_64.png
>
> Thanks and best regards,
>
> Tobias
From christian.thalinger at oracle.com Tue Oct 8 12:08:19 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Tue, 8 Oct 2013 12:08:19 -0700
Subject: RFR (XXS): 8007923: Tests on references fails
Message-ID:
https://bugs.openjdk.java.net/browse/JDK-8007923
http://cr.openjdk.java.net/~twisti/8007923/webrev.00/
8007923: Tests on references fails
Reviewed-by:
Escape analysis treats java.lang.ref.Reference as any other object and tries to scalarize it. In this particular fail one Reference does not escape but the other one does. When it comes to a pointer equality check the pointer comparison optimization falsely assumes that the non-escaped Reference cannot escape but in fact it can when the garbage collector enqueues the Reference in the queue.
After more internal discussion we decided to exclude java.lang.ref.Reference from being scalarized since they can escape globally any time.
From christian.thalinger at oracle.com Tue Oct 8 12:25:28 2013
From: christian.thalinger at oracle.com (Christian Thalinger)
Date: Tue, 8 Oct 2013 12:25:28 -0700
Subject: RFR(L) 8026054: New type profiling points: type of return values
at calls
In-Reply-To: <6408A42B-61B5-494B-8DD8-CA6C88E11464@oracle.com>
References: <6408A42B-61B5-494B-8DD8-CA6C88E11464@oracle.com>
Message-ID: <5E3AFA1B-FA91-4FF1-A73E-45D82FBDF8F2@oracle.com>
src/share/vm/c1/c1_GraphBuilder.cpp:
+ void profile_return_type(Value ret, ciMethod* callee, ciMethod* m = NULL, int bci = -1);
+void GraphBuilder::profile_return_type(Value ret, ciMethod* callee, ciMethod* m, int invoke_bci) {
+ assert((m == NULL) == (invoke_bci < 0), "invalid method and invalid bci together");
+ if (m == NULL) {
+ m = method();
+ }
+ if (invoke_bci < 0) {
+ invoke_bci = bci();
+ }
Is there potentially a problem if somehow InvocationEntryBci or InvalidOSREntryBci are passed in:
enum MethodCompilation {
InvocationEntryBci = -1, // i.e., not a on-stack replacement compilation
InvalidOSREntryBci = -2
};
?
+ int bci = invoke_bci;
Why are you having a new variable here?
+ ciTypeEntriesAtCall* args_and_ret = data->is_CallTypeData() ? ((ciCallTypeData*)data)->args_and_ret() : ((ciVirtualCallTypeData*)data)->args_and_ret();
! const TypeEntriesAtCall* args_and_ret() const { return &_args_and_ret; }
I should've mentioned this in the previous review but can't we make args_and_ret() a virtual method?
src/share/vm/oops/methodData.cpp:
159 int TypeStackSlotEntries::compute_cell_count(Symbol* signature, int max) {
160 int args_count = 0;
161 ResourceMark rm;
162 SignatureStream ss(signature);
163 args_count += MIN2(ss.reference_parameter_count(), max);
164 return args_count * per_arg_cell_count;
165 }
Why are you using args_count += now? Before you had:
164 ResourceMark rm;
165 SignatureStream ss(inv.signature());
166 int args_count = MIN2(ss.reference_parameter_count(), max);
! void TypeStackSlotEntries::post_initialize(Symbol* signature, bool has_receiver) {
ResourceMark rm;
+ int start = 0;
+ ArgumentOffsetComputer aos(signature, _nb_entries-start);
+ aos.total();
+ for (int i = start; i < _nb_entries; i++) {
+ set_stack_slot(i, aos.off_at(i-start) + (has_receiver ? 1 : 0));
+ set_type(i, type_none());
+ }
+ }
I don't see start being changed. Any reason to have it in a local? If you want to keep it for clarity make it a const int.
src/share/vm/oops/methodData.hpp:
753 protected:
754 const int _nb_entries;
I'd advocate for not abbreviating to ambiguous letters. Use the word you wanted to use.
On Oct 8, 2013, at 9:22 AM, Roland Westrelin wrote:
> http://cr.openjdk.java.net/~roland/8026054/webrev.00/
>
> Follow up to 8023657: New type profiling points: arguments to call
>
> 8023657 introduced TypeStackSlotEntries to keep track of types of arguments. This change adds a couple more similar classes: TypeEntriesAtCall and ReturnTypeEntry which is maybe the confusing part of the change. ReturnTypeEntry keeps track of types of return values, TypeStackSlotEntries of types of arguments. In the next type profiling change, TypeStackSlotEntries will be used for parameter type profiling. TypeEntriesAtCall is ReturnTypeEntry + TypeStackSlotEntries to do the profiling at invokes. The number of cells needed at invokes is kept in TypeEntriesAtCall (to count cells for arguments and return value) and some methods in TypeStackSlotEntries were moved to TypeEntriesAtCall as a consequence.
>
> The output of PrintMethodData is:
>
> 17 invokevirtual 3
> 16 bci: 17 VirtualCallData count(0) entries(1)
> 'TestProfiling'(4744 1.00)
> argument types 0: stack(1) 'TestProfiling$C'
> 1: stack(2) 'TestProfiling$B'
> return type 'TestProfiling$C'
>
> Roland.
From vladimir.kozlov at oracle.com Tue Oct 8 12:35:08 2013
From: vladimir.kozlov at oracle.com (Vladimir Kozlov)
Date: Tue, 08 Oct 2013 12:35:08 -0700
Subject: RFR (XXS): 8007923: Tests on references fails
In-Reply-To:
References:
Message-ID: <52545E6C.5010108@oracle.com>
Please, fix assert in ciKlass::is_subtype_of() too.
thanks,
Vladimir
On 10/8/13 12:08 PM, Christian Thalinger wrote:
> https://bugs.openjdk.java.net/browse/JDK-8007923
> http://cr.openjdk.java.net/~twisti/8007923/webrev.00/
>
> 8007923: Tests on references fails
> Reviewed-by:
>
> Escape analysis treats java.lang.ref.Reference as any other object and tries to scalarize it. In this particular fail one Reference does not escape but the other one does. When it comes to a pointer equality check the pointer comparison optimization falsely assumes that the non-escaped Reference cannot escape but in fact it can when the garbage collector enqueues the Reference in the queue.
>
> After more internal discussion we decided to exclude java.lang.ref.Reference from being scalarized since they can escape globally any time.
>
From vladimir.x.ivanov at oracle.com Tue Oct 8 12:41:23 2013
From: vladimir.x.ivanov at oracle.com (Vladimir Ivanov)
Date: Tue, 08 Oct 2013 23:41:23 +0400
Subject: RFR (XXS): 8007923: Tests on references fails
In-Reply-To: | |