< prev index next >
src/share/vm/opto/library_call.cpp
Print this page
rev 9944 : 8145336: PPC64: fix string intrinsics after CompactStrings change
@@ -969,12 +969,14 @@
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, cnt1, ae);
+ str1_start, str2_start, cnt2->is_Con() ? cnt2 : cnt1, ae);
break;
default:
ShouldNotReachHere();
return NULL;
}
@@ -1129,11 +1131,11 @@
return true;
}
//------------------------------inline_string_indexOf------------------------
bool LibraryCallKit::inline_string_indexOf(StrIntrinsicNode::ArgEnc ae) {
- if (!Matcher::has_match_rule(Op_StrIndexOf) || !UseSSE42Intrinsics) {
+ if (!Matcher::match_rule_supported(Op_StrIndexOf)) {
return false;
}
Node* src = argument(0);
Node* tgt = argument(1);
@@ -1173,11 +1175,11 @@
//-----------------------------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) {
+ 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,11 +1260,11 @@
//-----------------------------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)) {
+ 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 >