From d923c47f745a96f5916af766dcb1c7152021b960 Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Mon, 19 Feb 2024 14:07:25 +0300 Subject: riscv64: Create InstructionSimplifierRiscv64, ShiftAdd Create InstructionSimplifierRiscv64 optimization. Replace Shl (1|2|3) and Add with Riscv64ShiftAdd IR instruction. By compiling with dex2oat all the methods of applications below I got: Facebook: 45 cases TikTok: 26 cases YouTube: 19 cases of the pattern. Test: art/test/testrunner/testrunner.py --target --64 --ndebug --optimizing Change-Id: I88903450d998983bb2a628942112d7518099c3f5 --- compiler/optimizing/optimization.cc | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'compiler/optimizing/optimization.cc') diff --git a/compiler/optimizing/optimization.cc b/compiler/optimizing/optimization.cc index dd57100d88..ef1f36ab08 100644 --- a/compiler/optimizing/optimization.cc +++ b/compiler/optimizing/optimization.cc @@ -25,6 +25,7 @@ #endif #ifdef ART_ENABLE_CODEGEN_riscv64 #include "critical_native_abi_fixup_riscv64.h" +#include "instruction_simplifier_riscv64.h" #endif #ifdef ART_ENABLE_CODEGEN_x86 #include "pc_relative_fixups_x86.h" @@ -114,6 +115,8 @@ const char* OptimizationPassName(OptimizationPass pass) { #ifdef ART_ENABLE_CODEGEN_riscv64 case OptimizationPass::kCriticalNativeAbiFixupRiscv64: return riscv64::CriticalNativeAbiFixupRiscv64::kCriticalNativeAbiFixupRiscv64PassName; + case OptimizationPass::kInstructionSimplifierRiscv64: + return riscv64::InstructionSimplifierRiscv64::kInstructionSimplifierRiscv64PassName; #endif #ifdef ART_ENABLE_CODEGEN_x86 case OptimizationPass::kPcRelativeFixupsX86: @@ -163,6 +166,7 @@ OptimizationPass OptimizationPassByName(const std::string& pass_name) { #endif #ifdef ART_ENABLE_CODEGEN_riscv64 X(OptimizationPass::kCriticalNativeAbiFixupRiscv64); + X(OptimizationPass::kInstructionSimplifierRiscv64); #endif #ifdef ART_ENABLE_CODEGEN_x86 X(OptimizationPass::kPcRelativeFixupsX86); @@ -314,6 +318,10 @@ ArenaVector ConstructOptimizations( DCHECK(alt_name == nullptr) << "arch-specific pass does not support alternative name"; opt = new (allocator) riscv64::CriticalNativeAbiFixupRiscv64(graph, stats); break; + case OptimizationPass::kInstructionSimplifierRiscv64: + DCHECK(alt_name == nullptr) << "arch-specific pass does not support alternative name"; + opt = new (allocator) riscv64::InstructionSimplifierRiscv64(graph, stats); + break; #endif #ifdef ART_ENABLE_CODEGEN_x86 case OptimizationPass::kPcRelativeFixupsX86: -- cgit v1.2.3-59-g8ed1b