summaryrefslogtreecommitdiff
path: root/compiler/optimizing/nodes.h
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/optimizing/nodes.h')
-rw-r--r--compiler/optimizing/nodes.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h
index 23cc3704e9..ffddd25843 100644
--- a/compiler/optimizing/nodes.h
+++ b/compiler/optimizing/nodes.h
@@ -4912,6 +4912,7 @@ class HInvokePolymorphic final : public HInvoke {
public:
HInvokePolymorphic(ArenaAllocator* allocator,
uint32_t number_of_arguments,
+ uint32_t number_of_other_inputs,
DataType::Type return_type,
uint32_t dex_pc,
MethodReference method_reference,
@@ -4924,7 +4925,7 @@ class HInvokePolymorphic final : public HInvoke {
: HInvoke(kInvokePolymorphic,
allocator,
number_of_arguments,
- /* number_of_other_inputs= */ 0u,
+ number_of_other_inputs,
return_type,
dex_pc,
method_reference,
@@ -4938,6 +4939,12 @@ class HInvokePolymorphic final : public HInvoke {
dex::ProtoIndex GetProtoIndex() { return proto_idx_; }
+ bool CanTargetInvokeVirtual() const {
+ return GetIntrinsic() == Intrinsics::kMethodHandleInvokeExact &&
+ GetNumberOfArguments() >= 2 &&
+ InputAt(1)->GetType() == DataType::Type::kReference;
+ }
+
DECLARE_INSTRUCTION(InvokePolymorphic);
protected: