summaryrefslogtreecommitdiff
path: root/compiler/optimizing/optimization.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2023-10-13 10:28:36 +0000
committer VladimĂ­r Marko <vmarko@google.com> 2023-10-17 11:56:00 +0000
commitd5c097bcda44e237ecabcdba9b3dca2348289138 (patch)
tree46be9f64c07e806c8c1f68e19ac09b0d41f8a635 /compiler/optimizing/optimization.cc
parentf7bd87edf3b80ce3bbd6e571fd119c878cb79992 (diff)
riscv64: Implement `CriticalNativeAbiFixupRiscv64`.
And pass integral stack args sign-extended to 64 bits for direct @CriticalNative calls. Enable direct @CriticalNative call codegen unconditionally and also enable `HClinitCheck` codegen and extend the 178-app-image-native-method run-test to properly test these use cases. Test: # Edit `run-test` to disable checker, then testrunner.py --target --64 --ndebug --optimizing # Ignore 6 pre-existing failures (down from 7). Bug: 283082089 Change-Id: Ia514c62006c7079b04182cc39e413eb2deb089c1
Diffstat (limited to 'compiler/optimizing/optimization.cc')
-rw-r--r--compiler/optimizing/optimization.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/compiler/optimizing/optimization.cc b/compiler/optimizing/optimization.cc
index 4f20b55c7e..21b3c8558e 100644
--- a/compiler/optimizing/optimization.cc
+++ b/compiler/optimizing/optimization.cc
@@ -23,6 +23,9 @@
#ifdef ART_ENABLE_CODEGEN_arm64
#include "instruction_simplifier_arm64.h"
#endif
+#ifdef ART_ENABLE_CODEGEN_riscv64
+#include "critical_native_abi_fixup_riscv64.h"
+#endif
#ifdef ART_ENABLE_CODEGEN_x86
#include "pc_relative_fixups_x86.h"
#include "instruction_simplifier_x86.h"
@@ -109,6 +112,10 @@ const char* OptimizationPassName(OptimizationPass pass) {
case OptimizationPass::kInstructionSimplifierArm64:
return arm64::InstructionSimplifierArm64::kInstructionSimplifierArm64PassName;
#endif
+#ifdef ART_ENABLE_CODEGEN_riscv64
+ case OptimizationPass::kCriticalNativeAbiFixupRiscv64:
+ return riscv64::CriticalNativeAbiFixupRiscv64::kCriticalNativeAbiFixupRiscv64PassName;
+#endif
#ifdef ART_ENABLE_CODEGEN_x86
case OptimizationPass::kPcRelativeFixupsX86:
return x86::PcRelativeFixups::kPcRelativeFixupsX86PassName;
@@ -155,6 +162,9 @@ OptimizationPass OptimizationPassByName(const std::string& pass_name) {
#ifdef ART_ENABLE_CODEGEN_arm64
X(OptimizationPass::kInstructionSimplifierArm64);
#endif
+#ifdef ART_ENABLE_CODEGEN_riscv64
+ X(OptimizationPass::kCriticalNativeAbiFixupRiscv64);
+#endif
#ifdef ART_ENABLE_CODEGEN_x86
X(OptimizationPass::kPcRelativeFixupsX86);
X(OptimizationPass::kX86MemoryOperandGeneration);
@@ -303,6 +313,12 @@ ArenaVector<HOptimization*> ConstructOptimizations(
opt = new (allocator) arm64::InstructionSimplifierArm64(graph, stats);
break;
#endif
+#ifdef ART_ENABLE_CODEGEN_riscv64
+ case OptimizationPass::kCriticalNativeAbiFixupRiscv64:
+ DCHECK(alt_name == nullptr) << "arch-specific pass does not support alternative name";
+ opt = new (allocator) riscv64::CriticalNativeAbiFixupRiscv64(graph, stats);
+ break;
+#endif
#ifdef ART_ENABLE_CODEGEN_x86
case OptimizationPass::kPcRelativeFixupsX86:
DCHECK(alt_name == nullptr) << "arch-specific pass does not support alternative name";