Skip to content

Commit a98557d

Browse files
committed
Removes unnecessary zero init on new arrays
Removes zero initialization for trusted String methods that are known never to read elements that were not initialized. This includes: java_lang_String_encode8859_1 java_lang_String_encodeASCII java_lang_String_encodeUTF8_UTF16 java_lang_String_init_int_String_int_String_String java_lang_String_init_String_char java_lang_String_newStringUTF8NoRepl java_lang_String_repeat java_lang_StringLatin1_replace_CharSequence java_lang_StringLatin1_toBytes java_lang_StringLatin1_toBytes_III java_lang_StringLatin1_toChars java_lang_StringLatin1_toLowerCase java_lang_StringLatin1_toUpperCase java_lang_StringUTF16_compress_BII java_lang_StringUTF16_compress_CII java_lang_StringUTF16_compress_III java_lang_StringUTF16_replace_CharSequence java_lang_StringUTF16_toBytes_C java_lang_StringUTF16_toBytesSup java_lang_StringUTF16_toChars The zero initialization can be restored by setting the TR_DisableStringZeroInitSkips envvar. Cleans up formatting for code related to recognized String methods to make it easier to read. Signed-off-by: jimmyk <jimmyk@ca.ibm.com>
1 parent 16776fb commit a98557d

3 files changed

Lines changed: 314 additions & 164 deletions

File tree

runtime/compiler/codegen/J9RecognizedMethodsEnum.hpp

Lines changed: 112 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -74,43 +74,119 @@ FirstJ9Method = LastOMRMethod + 1,
7474
java_lang_Boolean_booleanValue, java_lang_Byte_byteValue, java_lang_Character_charValue, java_lang_Short_shortValue,
7575
java_lang_Integer_intValue, java_lang_Long_longValue, java_lang_Float_floatValue, java_lang_Double_doubleValue,
7676

77-
java_lang_String_charAt, java_lang_String_charAtInternal_I, java_lang_String_charAtInternal_IB,
78-
java_lang_String_checkBoundsBeginEnd, java_lang_String_checkIndex, java_lang_String_coder,
79-
java_lang_String_compareTo, java_lang_String_compareToIgnoreCase, java_lang_String_compressedArrayCopy_BIBII,
80-
java_lang_String_compressedArrayCopy_BICII, java_lang_String_compressedArrayCopy_CIBII,
81-
java_lang_String_compressedArrayCopy_CICII, java_lang_String_concat, java_lang_String_decodeUTF8_UTF16,
82-
java_lang_String_decompressedArrayCopy_BIBII, java_lang_String_decompressedArrayCopy_BICII,
83-
java_lang_String_decompressedArrayCopy_CIBII, java_lang_String_decompressedArrayCopy_CICII,
84-
java_lang_String_deduplicateStrings, java_lang_String_encodeASCII, java_lang_String_equalsIgnoreCase,
85-
java_lang_String_getBytes, java_lang_String_getBytes_subString, java_lang_String_getChars_byteArray,
86-
java_lang_String_getChars_charArray, java_lang_String_hashCode, java_lang_String_hashCodeImplCompressed,
87-
java_lang_String_hashCodeImplDecompressed, java_lang_String_indexOf_char, java_lang_String_indexOf_fast,
88-
java_lang_String_indexOf_native, java_lang_String_indexOf_String, java_lang_String_indexOf_String_int,
89-
java_lang_String_init_AbstractStringBuilder_Void, java_lang_String_init_int_int_char_boolean,
90-
java_lang_String_init_int_String_int_String_String, java_lang_String_init_String, java_lang_String_init_String_char,
91-
java_lang_String_init_StringBuilder, java_lang_String_isCompressed, java_lang_String_isLatin1,
92-
java_lang_String_lastIndexOf, java_lang_String_length, java_lang_String_lengthInternal,
93-
java_lang_String_regionMatches, java_lang_String_regionMatches_bool, java_lang_String_regionMatchesInternal,
94-
java_lang_String_replace, java_lang_String_split_str_int, java_lang_String_startsWith, java_lang_String_subString,
95-
java_lang_String_toCharArray, java_lang_String_toLowerCase, java_lang_String_toLowerCaseCore,
96-
java_lang_String_toUpperCase, java_lang_String_toUpperCaseCore, java_lang_String_trim,
97-
java_lang_String_unsafeCharAt, java_lang_String_valueOf_C,
98-
99-
java_lang_StringLatin1_charAt, java_lang_StringLatin1_compareTo_BBII, java_lang_StringLatin1_indexOf,
100-
java_lang_StringLatin1_indexOf_BB, java_lang_StringLatin1_indexOf_BIII, java_lang_StringLatin1_indexOfChar,
101-
java_lang_StringLatin1_inflate_BIBII, java_lang_StringLatin1_inflate_BICII, java_lang_StringLatin1_lastIndexOf,
102-
java_lang_StringLatin1_newString, java_lang_StringLatin1_replace_char, java_lang_StringLatin1_replace_CharSequence,
103-
java_lang_StringLatin1_toBytes, java_lang_StringLatin1_toChars, java_lang_StringLatin1_toLowerCase,
104-
java_lang_StringLatin1_toUpperCase, java_lang_StringLatin1_trim,
105-
106-
java_lang_StringUTF16_charAt, java_lang_StringUTF16_checkIndex, java_lang_StringUTF16_compareCodePointCI,
107-
java_lang_StringUTF16_compareToCIImpl, java_lang_StringUTF16_compareValues, java_lang_StringUTF16_getChar,
108-
java_lang_StringUTF16_getChars_ByteArray, java_lang_StringUTF16_getChars_Integer,
109-
java_lang_StringUTF16_getChars_Long, java_lang_StringUTF16_indexOf, java_lang_StringUTF16_indexOfCharUnsafe,
110-
java_lang_StringUTF16_indexOfUnsafe, java_lang_StringUTF16_length, java_lang_StringUTF16_newBytesFor,
111-
java_lang_StringUTF16_putChar, java_lang_StringUTF16_replace_char, java_lang_StringUTF16_replace_CharSequence,
112-
java_lang_StringUTF16_toBytes, java_lang_StringUTF16_toLowerCase, java_lang_StringUTF16_toUpperCase,
77+
// clang-format off
78+
java_lang_String_charAt,
79+
java_lang_String_charAtInternal_I,
80+
java_lang_String_charAtInternal_IB,
81+
java_lang_String_checkBoundsBeginEnd,
82+
java_lang_String_checkIndex,
83+
java_lang_String_coder,
84+
java_lang_String_compareTo,
85+
java_lang_String_compareToIgnoreCase,
86+
java_lang_String_compressedArrayCopy_BIBII,
87+
java_lang_String_compressedArrayCopy_BICII,
88+
java_lang_String_compressedArrayCopy_CIBII,
89+
java_lang_String_compressedArrayCopy_CICII,
90+
java_lang_String_concat,
91+
java_lang_String_decodeUTF8_UTF16,
92+
java_lang_String_decompressedArrayCopy_BIBII,
93+
java_lang_String_decompressedArrayCopy_BICII,
94+
java_lang_String_decompressedArrayCopy_CIBII,
95+
java_lang_String_decompressedArrayCopy_CICII,
96+
java_lang_String_deduplicateStrings,
97+
java_lang_String_encode8859_1,
98+
java_lang_String_encodeASCII,
99+
java_lang_String_encodeUTF8_UTF16,
100+
java_lang_String_equalsIgnoreCase,
101+
java_lang_String_getBytes,
102+
java_lang_String_getBytes_subString,
103+
java_lang_String_getChars_byteArray,
104+
java_lang_String_getChars_charArray,
105+
java_lang_String_hashCode,
106+
java_lang_String_hashCodeImplCompressed,
107+
java_lang_String_hashCodeImplDecompressed,
108+
java_lang_String_indexOf_char,
109+
java_lang_String_indexOf_fast,
110+
java_lang_String_indexOf_native,
111+
java_lang_String_indexOf_String,
112+
java_lang_String_indexOf_String_int,
113+
java_lang_String_init_AbstractStringBuilder_Void,
114+
java_lang_String_init_int_int_char_boolean,
115+
java_lang_String_init_int_String_int_String_String,
116+
java_lang_String_init_String,
117+
java_lang_String_init_String_char,
118+
java_lang_String_init_StringBuilder,
119+
java_lang_String_isCompressed,
120+
java_lang_String_isLatin1,
121+
java_lang_String_lastIndexOf,
122+
java_lang_String_length,
123+
java_lang_String_lengthInternal,
124+
java_lang_String_newStringUTF8NoRepl,
125+
java_lang_String_regionMatches,
126+
java_lang_String_regionMatches_bool,
127+
java_lang_String_regionMatchesInternal,
128+
java_lang_String_repeat,
129+
java_lang_String_replace,
130+
java_lang_String_split_CIZ,
131+
java_lang_String_split_str_int,
132+
java_lang_String_startsWith,
133+
java_lang_String_subString,
134+
java_lang_String_toCharArray,
135+
java_lang_String_toLowerCase,
136+
java_lang_String_toLowerCaseCore,
137+
java_lang_String_toUpperCase,
138+
java_lang_String_toUpperCaseCore,
139+
java_lang_String_trim,
140+
java_lang_String_unsafeCharAt,
141+
java_lang_String_valueOf_C,
142+
143+
java_lang_StringLatin1_charAt,
144+
java_lang_StringLatin1_compareTo_BBII,
145+
java_lang_StringLatin1_indexOf,
146+
java_lang_StringLatin1_indexOf_BB,
147+
java_lang_StringLatin1_indexOf_BIII,
148+
java_lang_StringLatin1_indexOfChar,
149+
java_lang_StringLatin1_inflate_BIBII,
150+
java_lang_StringLatin1_inflate_BICII,
151+
java_lang_StringLatin1_lastIndexOf,
152+
java_lang_StringLatin1_newString,
153+
java_lang_StringLatin1_replace_char,
154+
java_lang_StringLatin1_replace_CharSequence,
155+
java_lang_StringLatin1_toBytes,
156+
java_lang_StringLatin1_toBytes_III,
157+
java_lang_StringLatin1_toChars,
158+
java_lang_StringLatin1_toLowerCase,
159+
java_lang_StringLatin1_toUpperCase,
160+
java_lang_StringLatin1_trim,
161+
162+
java_lang_StringUTF16_charAt,
163+
java_lang_StringUTF16_checkIndex,
164+
java_lang_StringUTF16_compareCodePointCI,
165+
java_lang_StringUTF16_compareToCIImpl,
166+
java_lang_StringUTF16_compareValues,
167+
java_lang_StringUTF16_compress_BII,
168+
java_lang_StringUTF16_compress_CII,
169+
java_lang_StringUTF16_compress_III,
170+
java_lang_StringUTF16_getChar,
171+
java_lang_StringUTF16_getChars_ByteArray,
172+
java_lang_StringUTF16_getChars_Integer,
173+
java_lang_StringUTF16_getChars_Long,
174+
java_lang_StringUTF16_indexOf,
175+
java_lang_StringUTF16_indexOfCharUnsafe,
176+
java_lang_StringUTF16_indexOfUnsafe,
177+
java_lang_StringUTF16_length,
178+
java_lang_StringUTF16_newBytesFor,
179+
java_lang_StringUTF16_putChar,
180+
java_lang_StringUTF16_replace_char,
181+
java_lang_StringUTF16_replace_CharSequence,
182+
java_lang_StringUTF16_toBytes,
183+
java_lang_StringUTF16_toBytes_C,
184+
java_lang_StringUTF16_toBytesSup,
185+
java_lang_StringUTF16_toChars,
186+
java_lang_StringUTF16_toLowerCase,
187+
java_lang_StringUTF16_toUpperCase,
113188
java_lang_StringUTF16_trim,
189+
// clang-format on
114190

115191
java_lang_StringConcatHelper_newArray,
116192

0 commit comments

Comments
 (0)