< prev index next >

src/share/vm/opto/library_call.cpp

Print this page
rev 9944 : 8145336: PPC64: fix string intrinsics after CompactStrings change

*** 969,980 **** case Op_StrComp: result = new StrCompNode(control(), memory(TypeAryPtr::BYTES), str1_start, cnt1, str2_start, cnt2, ae); break; case Op_StrEquals: result = new StrEqualsNode(control(), memory(TypeAryPtr::BYTES), ! str1_start, str2_start, cnt1, ae); break; default: ShouldNotReachHere(); return NULL; } --- 969,982 ---- case Op_StrComp: result = new StrCompNode(control(), memory(TypeAryPtr::BYTES), str1_start, cnt1, str2_start, cnt2, ae); break; case Op_StrEquals: + // We already know that cnt1 == cnt2 here (checked in 'inline_string_equals'). + // Use the constant length if there is one because optimzed match rule may exist. result = new StrEqualsNode(control(), memory(TypeAryPtr::BYTES), ! str1_start, str2_start, cnt2->is_Con() ? cnt2 : cnt1, ae); break; default: ShouldNotReachHere(); return NULL; }
*** 1129,1139 **** return true; } //------------------------------inline_string_indexOf------------------------ bool LibraryCallKit::inline_string_indexOf(StrIntrinsicNode::ArgEnc ae) { ! if (!Matcher::has_match_rule(Op_StrIndexOf) || !UseSSE42Intrinsics) { return false; } Node* src = argument(0); Node* tgt = argument(1); --- 1131,1141 ---- return true; } //------------------------------inline_string_indexOf------------------------ bool LibraryCallKit::inline_string_indexOf(StrIntrinsicNode::ArgEnc ae) { ! if (!Matcher::match_rule_supported(Op_StrIndexOf)) { return false; } Node* src = argument(0); Node* tgt = argument(1);
*** 1173,1183 **** //-----------------------------inline_string_indexOf----------------------- bool LibraryCallKit::inline_string_indexOfI(StrIntrinsicNode::ArgEnc ae) { if (too_many_traps(Deoptimization::Reason_intrinsic)) { return false; } ! if (!Matcher::has_match_rule(Op_StrIndexOf) || !UseSSE42Intrinsics) { return false; } assert(callee()->signature()->size() == 5, "String.indexOf() has 5 arguments"); Node* src = argument(0); // byte[] Node* src_count = argument(1); // char count --- 1175,1185 ---- //-----------------------------inline_string_indexOf----------------------- bool LibraryCallKit::inline_string_indexOfI(StrIntrinsicNode::ArgEnc ae) { if (too_many_traps(Deoptimization::Reason_intrinsic)) { return false; } ! if (!Matcher::match_rule_supported(Op_StrIndexOf)) { return false; } assert(callee()->signature()->size() == 5, "String.indexOf() has 5 arguments"); Node* src = argument(0); // byte[] Node* src_count = argument(1); // char count
*** 1258,1268 **** //-----------------------------inline_string_indexOfChar----------------------- bool LibraryCallKit::inline_string_indexOfChar() { if (too_many_traps(Deoptimization::Reason_intrinsic)) { return false; } ! if (!Matcher::has_match_rule(Op_StrIndexOfChar) || !(UseSSE > 4)) { return false; } assert(callee()->signature()->size() == 4, "String.indexOfChar() has 4 arguments"); Node* src = argument(0); // byte[] Node* tgt = argument(1); // tgt is int ch --- 1260,1270 ---- //-----------------------------inline_string_indexOfChar----------------------- bool LibraryCallKit::inline_string_indexOfChar() { if (too_many_traps(Deoptimization::Reason_intrinsic)) { return false; } ! if (!Matcher::match_rule_supported(Op_StrIndexOfChar)) { return false; } assert(callee()->signature()->size() == 4, "String.indexOfChar() has 4 arguments"); Node* src = argument(0); // byte[] Node* tgt = argument(1); // tgt is int ch
< prev index next >