Skip to content

Commit 3f5fdf1

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 21a124f commit 3f5fdf1

3 files changed

Lines changed: 297 additions & 158 deletions

File tree

runtime/compiler/codegen/J9RecognizedMethodsEnum.hpp

Lines changed: 109 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -74,43 +74,118 @@ 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_indexOf, java_lang_StringLatin1_indexOf_BB,
100-
java_lang_StringLatin1_indexOf_BIII, java_lang_StringLatin1_indexOfChar, java_lang_StringLatin1_inflate_BIBII,
101-
java_lang_StringLatin1_inflate_BICII, java_lang_StringLatin1_lastIndexOf, java_lang_StringLatin1_newString,
102-
java_lang_StringLatin1_replace_char, java_lang_StringLatin1_replace_CharSequence, java_lang_StringLatin1_toBytes,
103-
java_lang_StringLatin1_toChars, java_lang_StringLatin1_toLowerCase, java_lang_StringLatin1_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_indexOf,
145+
java_lang_StringLatin1_indexOf_BB,
146+
java_lang_StringLatin1_indexOf_BIII,
147+
java_lang_StringLatin1_indexOfChar,
148+
java_lang_StringLatin1_inflate_BIBII,
149+
java_lang_StringLatin1_inflate_BICII,
150+
java_lang_StringLatin1_lastIndexOf,
151+
java_lang_StringLatin1_newString,
152+
java_lang_StringLatin1_replace_char,
153+
java_lang_StringLatin1_replace_CharSequence,
154+
java_lang_StringLatin1_toBytes,
155+
java_lang_StringLatin1_toBytes_III,
156+
java_lang_StringLatin1_toChars,
157+
java_lang_StringLatin1_toLowerCase,
158+
java_lang_StringLatin1_toUpperCase,
104159
java_lang_StringLatin1_trim,
105160

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,
161+
java_lang_StringUTF16_charAt,
162+
java_lang_StringUTF16_checkIndex,
163+
java_lang_StringUTF16_compareCodePointCI,
164+
java_lang_StringUTF16_compareToCIImpl,
165+
java_lang_StringUTF16_compareValues,
166+
java_lang_StringUTF16_compress_BII,
167+
java_lang_StringUTF16_compress_CII,
168+
java_lang_StringUTF16_compress_III,
169+
java_lang_StringUTF16_getChar,
170+
java_lang_StringUTF16_getChars_ByteArray,
171+
java_lang_StringUTF16_getChars_Integer,
172+
java_lang_StringUTF16_getChars_Long,
173+
java_lang_StringUTF16_indexOf,
174+
java_lang_StringUTF16_indexOfCharUnsafe,
175+
java_lang_StringUTF16_indexOfUnsafe,
176+
java_lang_StringUTF16_length,
177+
java_lang_StringUTF16_newBytesFor,
178+
java_lang_StringUTF16_putChar,
179+
java_lang_StringUTF16_replace_char,
180+
java_lang_StringUTF16_replace_CharSequence,
181+
java_lang_StringUTF16_toBytes,
182+
java_lang_StringUTF16_toBytes_C,
183+
java_lang_StringUTF16_toBytesSup,
184+
java_lang_StringUTF16_toChars,
185+
java_lang_StringUTF16_toLowerCase,
186+
java_lang_StringUTF16_toUpperCase,
113187
java_lang_StringUTF16_trim,
188+
// clang-format on
114189

115190
java_lang_StringConcatHelper_newArray,
116191

0 commit comments

Comments
 (0)