comparison src/share/vm/opto/doCall.cpp @ 20312:922c87c9aed4

8035605: Expand functionality of PredictedIntrinsicGenerator Summary: Allow several predicates and separate intrinsic methods per one intrinsified (virtual) method. Reviewed-by: roland
author kvn
date Tue, 10 Jun 2014 12:28:06 -0700
parents dda2ae6f9557
children 411e30e5fbb8
comparison
equal deleted inserted replaced
20311:b1bc1af04c6e 20312:922c87c9aed4
113 // intrinsics handle strict f.p. correctly. 113 // intrinsics handle strict f.p. correctly.
114 CallGenerator* cg_intrinsic = NULL; 114 CallGenerator* cg_intrinsic = NULL;
115 if (allow_inline && allow_intrinsics) { 115 if (allow_inline && allow_intrinsics) {
116 CallGenerator* cg = find_intrinsic(callee, call_does_dispatch); 116 CallGenerator* cg = find_intrinsic(callee, call_does_dispatch);
117 if (cg != NULL) { 117 if (cg != NULL) {
118 if (cg->is_predicted()) { 118 if (cg->is_predicated()) {
119 // Code without intrinsic but, hopefully, inlined. 119 // Code without intrinsic but, hopefully, inlined.
120 CallGenerator* inline_cg = this->call_generator(callee, 120 CallGenerator* inline_cg = this->call_generator(callee,
121 vtable_index, call_does_dispatch, jvms, allow_inline, prof_factor, speculative_receiver_type, false); 121 vtable_index, call_does_dispatch, jvms, allow_inline, prof_factor, speculative_receiver_type, false);
122 if (inline_cg != NULL) { 122 if (inline_cg != NULL) {
123 cg = CallGenerator::for_predicted_intrinsic(cg, inline_cg); 123 cg = CallGenerator::for_predicated_intrinsic(cg, inline_cg);
124 } 124 }
125 } 125 }
126 126
127 // If intrinsic does the virtual dispatch, we try to use the type profile 127 // If intrinsic does the virtual dispatch, we try to use the type profile
128 // first, and hopefully inline it as the regular virtual call below. 128 // first, and hopefully inline it as the regular virtual call below.