48 CallGenerator(ciMethod* method) : _method(method) {} 49 50 public: 51 // Accessors 52 ciMethod* method() const { return _method; } 53 54 // is_inline: At least some code implementing the method is copied here. 55 virtual bool is_inline() const { return false; } 56 // is_intrinsic: There's a method-specific way of generating the inline code. 57 virtual bool is_intrinsic() const { return false; } 58 // is_parse: Bytecodes implementing the specific method are copied here. 59 virtual bool is_parse() const { return false; } 60 // is_virtual: The call uses the receiver type to select or check the method. 61 virtual bool is_virtual() const { return false; } 62 // is_deferred: The decision whether to inline or not is deferred. 63 virtual bool is_deferred() const { return false; } 64 // is_predicted: Uses an explicit check against a predicted type. 65 virtual bool is_predicted() const { return false; } 66 // is_trap: Does not return to the caller. (E.g., uncommon trap.) 67 virtual bool is_trap() const { return false; } 68 69 // is_late_inline: supports conversion of call into an inline 70 virtual bool is_late_inline() const { return false; } 71 // same but for method handle calls 72 virtual bool is_mh_late_inline() const { return false; } 73 74 // for method handle calls: have we tried inlinining the call already? 75 virtual bool already_attempted() const { ShouldNotReachHere(); return false; } 76 77 // Replace the call with an inline version of the code 78 virtual void do_late_inline() { ShouldNotReachHere(); } 79 80 virtual CallStaticJavaNode* call_node() const { ShouldNotReachHere(); return NULL; } 81 82 // Note: It is possible for a CG to be both inline and virtual. 83 // (The hashCode intrinsic does a vtable check and an inlined fast path.) 84 85 // Utilities: 86 const TypeFunc* tf() const; 87 | 48 CallGenerator(ciMethod* method) : _method(method) {} 49 50 public: 51 // Accessors 52 ciMethod* method() const { return _method; } 53 54 // is_inline: At least some code implementing the method is copied here. 55 virtual bool is_inline() const { return false; } 56 // is_intrinsic: There's a method-specific way of generating the inline code. 57 virtual bool is_intrinsic() const { return false; } 58 // is_parse: Bytecodes implementing the specific method are copied here. 59 virtual bool is_parse() const { return false; } 60 // is_virtual: The call uses the receiver type to select or check the method. 61 virtual bool is_virtual() const { return false; } 62 // is_deferred: The decision whether to inline or not is deferred. 63 virtual bool is_deferred() const { return false; } 64 // is_predicted: Uses an explicit check against a predicted type. 65 virtual bool is_predicted() const { return false; } 66 // is_trap: Does not return to the caller. (E.g., uncommon trap.) 67 virtual bool is_trap() const { return false; } 68 // does_virtual_dispatch: Should try inlining as normal method first. 69 virtual bool does_virtual_dispatch() const { return false; } 70 71 // is_late_inline: supports conversion of call into an inline 72 virtual bool is_late_inline() const { return false; } 73 // same but for method handle calls 74 virtual bool is_mh_late_inline() const { return false; } 75 76 // for method handle calls: have we tried inlinining the call already? 77 virtual bool already_attempted() const { ShouldNotReachHere(); return false; } 78 79 // Replace the call with an inline version of the code 80 virtual void do_late_inline() { ShouldNotReachHere(); } 81 82 virtual CallStaticJavaNode* call_node() const { ShouldNotReachHere(); return NULL; } 83 84 // Note: It is possible for a CG to be both inline and virtual. 85 // (The hashCode intrinsic does a vtable check and an inlined fast path.) 86 87 // Utilities: 88 const TypeFunc* tf() const; 89 |