# HG changeset patch # User skuksenko # Date 1557251681 25200 # Tue May 07 10:54:41 2019 -0700 # Node ID bdd8efbc370abe09fbaaf2c358a65d170791f619 # Parent 0f798f21e8c2b8961ce13e538c6ebc8b747ac2c6 force inline of iterator() methods for better scalar replacement of iterators diff --git a/src/hotspot/share/classfile/systemDictionary.hpp b/src/hotspot/share/classfile/systemDictionary.hpp --- a/src/hotspot/share/classfile/systemDictionary.hpp +++ b/src/hotspot/share/classfile/systemDictionary.hpp @@ -129,6 +129,7 @@ do_klass(StackOverflowError_klass, java_lang_StackOverflowError ) \ do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException ) \ do_klass(Reference_klass, java_lang_ref_Reference ) \ + do_klass(Iterator_klass, java_util_Iterator ) \ \ /* ref klasses and set reference types */ \ do_klass(SoftReference_klass, java_lang_ref_SoftReference ) \ diff --git a/src/hotspot/share/classfile/vmSymbols.hpp b/src/hotspot/share/classfile/vmSymbols.hpp --- a/src/hotspot/share/classfile/vmSymbols.hpp +++ b/src/hotspot/share/classfile/vmSymbols.hpp @@ -126,6 +126,7 @@ template(getBootClassPathEntryForClass_name, "getBootClassPathEntryForClass") \ template(jdk_internal_vm_PostVMInitHook, "jdk/internal/vm/PostVMInitHook") \ template(sun_net_www_ParseUtil, "sun/net/www/ParseUtil") \ + template(java_util_Iterator, "java/util/Iterator") \ \ template(jdk_internal_loader_ClassLoaders_AppClassLoader, "jdk/internal/loader/ClassLoaders$AppClassLoader") \ template(jdk_internal_loader_ClassLoaders_PlatformClassLoader, "jdk/internal/loader/ClassLoaders$PlatformClassLoader") \ @@ -449,6 +450,7 @@ template(page_size_name, "PAGE_SIZE") \ template(big_endian_name, "BIG_ENDIAN") \ template(use_unaligned_access_name, "UNALIGNED_ACCESS") \ + template(iterator_name, "iterator") \ \ /* name symbols needed by intrinsics */ \ VM_INTRINSICS_DO(VM_INTRINSIC_IGNORE, VM_SYMBOL_IGNORE, template, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE) \ diff --git a/src/hotspot/share/opto/bytecodeInfo.cpp b/src/hotspot/share/opto/bytecodeInfo.cpp --- a/src/hotspot/share/opto/bytecodeInfo.cpp +++ b/src/hotspot/share/opto/bytecodeInfo.cpp @@ -77,6 +77,7 @@ * Return true when EA is ON and a java constructor is called or * a super constructor is called from an inlined java constructor. * Also return true for boxing methods. + * Also return true for Iterable::iterator() invocation that is essential for forall-loops performance. */ static bool is_init_with_ea(ciMethod* callee_method, ciMethod* caller_method, Compile* C) { @@ -94,6 +95,12 @@ if (C->eliminate_boxing() && callee_method->is_boxing_method()) { return true; } + if (callee_method->name() == ciSymbol::iterator_name()) { + ciType *retType = callee_method->signature()->return_type(); + if(retType->is_klass() && retType->as_klass()->is_subtype_of(C->env()->Iterator_klass())) { + return true; + } + } return false; } # HG changeset patch # User skuksenko # Date 1557346502 25200 # Wed May 08 13:15:02 2019 -0700 # Node ID 3c207aaa4f5a8826a4c10199c863d0cfd0e555d2 # Parent bdd8efbc370abe09fbaaf2c358a65d170791f619 force inline of iterator() methods for better scalar replacement of iterators, v2.0 diff --git a/src/hotspot/share/classfile/systemDictionary.hpp b/src/hotspot/share/classfile/systemDictionary.hpp --- a/src/hotspot/share/classfile/systemDictionary.hpp +++ b/src/hotspot/share/classfile/systemDictionary.hpp @@ -129,7 +129,6 @@ do_klass(StackOverflowError_klass, java_lang_StackOverflowError ) \ do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException ) \ do_klass(Reference_klass, java_lang_ref_Reference ) \ - do_klass(Iterator_klass, java_util_Iterator ) \ \ /* ref klasses and set reference types */ \ do_klass(SoftReference_klass, java_lang_ref_SoftReference ) \ @@ -215,6 +214,9 @@ do_klass(Integer_klass, java_lang_Integer ) \ do_klass(Long_klass, java_lang_Long ) \ \ + /* force inline of iterators */ \ + do_klass(Iterator_klass, java_util_Iterator ) \ + \ /*end*/ diff --git a/src/hotspot/share/classfile/vmSymbols.hpp b/src/hotspot/share/classfile/vmSymbols.hpp --- a/src/hotspot/share/classfile/vmSymbols.hpp +++ b/src/hotspot/share/classfile/vmSymbols.hpp @@ -126,7 +126,7 @@ template(getBootClassPathEntryForClass_name, "getBootClassPathEntryForClass") \ template(jdk_internal_vm_PostVMInitHook, "jdk/internal/vm/PostVMInitHook") \ template(sun_net_www_ParseUtil, "sun/net/www/ParseUtil") \ - template(java_util_Iterator, "java/util/Iterator") \ + template(java_util_Iterator, "java/util/Iterator") \ \ template(jdk_internal_loader_ClassLoaders_AppClassLoader, "jdk/internal/loader/ClassLoaders$AppClassLoader") \ template(jdk_internal_loader_ClassLoaders_PlatformClassLoader, "jdk/internal/loader/ClassLoaders$PlatformClassLoader") \ diff --git a/src/hotspot/share/opto/bytecodeInfo.cpp b/src/hotspot/share/opto/bytecodeInfo.cpp --- a/src/hotspot/share/opto/bytecodeInfo.cpp +++ b/src/hotspot/share/opto/bytecodeInfo.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -96,8 +96,7 @@ return true; } if (callee_method->name() == ciSymbol::iterator_name()) { - ciType *retType = callee_method->signature()->return_type(); - if(retType->is_klass() && retType->as_klass()->is_subtype_of(C->env()->Iterator_klass())) { + if (callee_method->signature()->return_type()->is_subtype_of(C->env()->Iterator_klass())) { return true; } }