RISCV: [Codegen] Add VisitInvokeVirtual
Test: m test-art-host-gtest
Bug: 283082089
Change-Id: Iba11242c634a401f9d797e81526d735bab66d6dc
Signed-off-by: Lifang Xia <lifang_xia@linux.alibaba.com>
Signed-off-by: Wendong Wang <wangwd@xcvmbyte.com>
diff --git a/compiler/optimizing/code_generator_riscv64.cc b/compiler/optimizing/code_generator_riscv64.cc
index 2f25388..9280ad4 100644
--- a/compiler/optimizing/code_generator_riscv64.cc
+++ b/compiler/optimizing/code_generator_riscv64.cc
@@ -2114,13 +2114,21 @@
}
void LocationsBuilderRISCV64::VisitInvokeVirtual(HInvokeVirtual* instruction) {
- UNUSED(instruction);
- LOG(FATAL) << "Unimplemented";
+ IntrinsicLocationsBuilderRISCV64 intrinsic(GetGraph()->GetAllocator(), codegen_);
+ if (intrinsic.TryDispatch(instruction)) {
+ return;
+ }
+
+ HandleInvoke(instruction);
}
void InstructionCodeGeneratorRISCV64::VisitInvokeVirtual(HInvokeVirtual* instruction) {
- UNUSED(instruction);
- LOG(FATAL) << "Unimplemented";
+ if (TryGenerateIntrinsicCode(instruction, codegen_)) {
+ return;
+ }
+
+ codegen_->GenerateVirtualCall(instruction, instruction->GetLocations()->GetTemp(0));
+ DCHECK(!codegen_->IsLeafMethod());
}
void LocationsBuilderRISCV64::VisitInvokePolymorphic(HInvokePolymorphic* instruction) {