@@ -450,9 +450,17 @@ class LateInlineVectorCallGenerator : public LateInlineCallGenerator {
450450 LateInlineCallGenerator (method, intrinsic_cg) , _inline_cg(inline_cg) {}
451451
452452 CallGenerator* inline_cg2 () const { return _inline_cg; }
453- virtual bool is_vector_late_inline () const { return true ; }
453+ bool inline_fallback ();
454+ virtual bool is_vector_late_inline () const { return true ; }
454455};
455456
457+ bool LateInlineVectorCallGenerator::inline_fallback () {
458+ switch (method ()->intrinsic_id ()) {
459+ case vmIntrinsics::_VectorSlice: return true ;
460+ default : return false ;
461+ }
462+ }
463+
456464CallGenerator* CallGenerator::for_vector_late_inline (ciMethod* m, CallGenerator* intrinsic_cg, CallGenerator* inline_cg) {
457465 return new LateInlineVectorCallGenerator (m, intrinsic_cg, inline_cg);
458466}
@@ -690,8 +698,14 @@ void CallGenerator::do_late_inline_helper() {
690698
691699 // Now perform the inlining using the synthesized JVMState
692700 JVMState* new_jvms = inline_cg ()->generate (jvms);
693- new_jvms = new_jvms == nullptr && is_vector_late_inline () ?
694- static_cast <const LateInlineVectorCallGenerator*>(this )->inline_cg2 ()->generate (jvms) : new_jvms;
701+ // Attempt inlining fallback implementation in case of
702+ // intrinsification failure.
703+ if (new_jvms == nullptr && is_vector_late_inline ()) {
704+ LateInlineVectorCallGenerator* late_inline_vec_cg = static_cast <LateInlineVectorCallGenerator*>(this );
705+ if (late_inline_vec_cg->inline_fallback ()) {
706+ new_jvms = late_inline_vec_cg->inline_cg2 ()->generate (jvms);
707+ }
708+ }
695709 if (new_jvms == nullptr ) return ; // no change
696710 if (C->failing ()) return ;
697711
0 commit comments