Review comments resolutions

This commit is contained in:
Jatin Bhateja 2026-04-17 06:21:33 +00:00
parent c59500317c
commit 46fcc9acc0
3 changed files with 18 additions and 30 deletions

View File

@ -440,26 +440,25 @@ CallGenerator* CallGenerator::for_mh_late_inline(ciMethod* caller, ciMethod* cal
class LateInlineVectorCallGenerator : public LateInlineCallGenerator {
protected:
bool _use_fallback_generator;
CallGenerator* _inline_cg;
CallGenerator* _inline_cg2;
public:
LateInlineVectorCallGenerator(ciMethod* method, CallGenerator* intrinsic_cg, CallGenerator* inline_cg) :
LateInlineCallGenerator(method, intrinsic_cg) , _inline_cg(inline_cg) {
LateInlineCallGenerator(method, intrinsic_cg) , _inline_cg2(inline_cg) {
_use_fallback_generator = false;
}
CallGenerator* inline_cg2() const { return _inline_cg; }
bool inline_fallback();
bool is_fallback_generation() {
return _use_fallback_generator;
virtual CallGenerator* inline_cg() const {
return _use_fallback_generator ? _inline_cg2 : _inline_cg;
}
virtual bool inline_fallback() const;
virtual bool is_vector_late_inline() const { return true; }
virtual void enable_fallback_generation() {
_use_fallback_generator = true;
}
};
bool LateInlineVectorCallGenerator::inline_fallback() {
bool LateInlineVectorCallGenerator::inline_fallback() const {
switch (method()->intrinsic_id()) {
case vmIntrinsics::_VectorSlice: return true;
default : return false;
@ -705,28 +704,8 @@ void CallGenerator::do_late_inline_helper() {
C->set_default_node_notes(entry_nn);
}
CallGenerator* cg = inline_cg();
LateInlineVectorCallGenerator* late_inline_vec_cg = nullptr;
if (is_vector_late_inline()) {
late_inline_vec_cg = static_cast<LateInlineVectorCallGenerator*>(this);
if (late_inline_vec_cg->is_fallback_generation() && late_inline_vec_cg->inline_fallback()) {
cg = late_inline_vec_cg->inline_cg2();
}
}
// Now perform the inlining using the synthesized JVMState
JVMState* new_jvms = cg->generate(jvms);
// Bookkeep call generator for lazy inlining fallback implementation in case of
// intrinsification failure.
if (late_inline_vec_cg != nullptr && !late_inline_vec_cg->is_fallback_generation()) {
if (new_jvms == nullptr) {
C->vector_late_inlines()->append_if_missing(this);
} else {
C->vector_late_inlines()->remove_if_existing(this);
}
}
JVMState* new_jvms = inline_cg()->generate(jvms);
if (new_jvms == nullptr) return; // no change
if (C->failing()) return;

View File

@ -76,6 +76,7 @@ class CallGenerator : public ArenaObj {
virtual bool is_mh_late_inline() const { return false; }
virtual bool is_string_late_inline() const { return false; }
virtual bool is_vector_late_inline() const { return false; }
virtual bool inline_fallback() const { return false; }
virtual void enable_fallback_generation() { return; }
virtual bool is_boxing_late_inline() const { return false; }
virtual bool is_vector_reboxing_late_inline() const { return false; }

View File

@ -2016,8 +2016,10 @@ void Compile::inline_vector_fallback(PhaseIterGVN& igvn) {
while (_vector_late_inlines.length() > 0) {
CallGenerator* cg = _vector_late_inlines.pop();
assert(cg->is_vector_late_inline(), "");
cg->enable_fallback_generation();
cg->do_late_inline();
if (cg->inline_fallback()) {
cg->enable_fallback_generation();
cg->do_late_inline();
}
if (failing()) return;
}
_vector_late_inlines.trunc_to(0);
@ -2116,6 +2118,9 @@ bool Compile::inline_incrementally_one() {
} else if (inlining_progress()) {
_late_inlines_pos = i+1; // restore the position in case new elements were inserted
print_method(PHASE_INCREMENTAL_INLINE_STEP, 3, cg->call_node());
if (cg->is_vector_late_inline()) {
C->vector_late_inlines()->remove_if_existing(cg);
}
break; // process one call site at a time
} else {
bool is_scheduled_for_igvn_after = C->igvn_worklist()->member(cg->call_node());
@ -2126,6 +2131,9 @@ bool Compile::inline_incrementally_one() {
// Ensure call node has not disappeared from IGVN worklist during a failed inlining attempt
assert(!is_scheduled_for_igvn_before || is_scheduled_for_igvn_after, "call node removed from IGVN list during inlining pass");
cg->call_node()->set_generator(cg);
if (cg->is_vector_late_inline()) {
C->vector_late_inlines()->append_if_missing(cg);
}
}
}
} else {