From a290160f74ee53c0ffb51c7b3ac916d239c9556a Mon Sep 17 00:00:00 2001 From: Lena Djokic Date: Thu, 21 Sep 2017 13:50:52 +0200 Subject: MIPS32R2: Share address computation For array accesses the element address has the following structure: Address = CONST_OFFSET + base_addr + index << ELEM_SHIFT The address part (index << ELEM_SHIFT) can be shared across array accesses with the same data type and index. For example, in the following loop 5 accesses can share address computation: void foo(int[] a, int[] b, int[] c) { for (i...) { a[i] = a[i] + 5; b[i] = b[i] + c[i]; } } Test: test-art-host, test-art-target Change-Id: Id09fa782934aad4ee47669275e7e1a4d7d23b0fa --- compiler/optimizing/instruction_simplifier_mips.h | 47 +++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 compiler/optimizing/instruction_simplifier_mips.h (limited to 'compiler/optimizing/instruction_simplifier_mips.h') diff --git a/compiler/optimizing/instruction_simplifier_mips.h b/compiler/optimizing/instruction_simplifier_mips.h new file mode 100644 index 0000000000..22cc2efc1a --- /dev/null +++ b/compiler/optimizing/instruction_simplifier_mips.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ART_COMPILER_OPTIMIZING_INSTRUCTION_SIMPLIFIER_MIPS_H_ +#define ART_COMPILER_OPTIMIZING_INSTRUCTION_SIMPLIFIER_MIPS_H_ + +#include "nodes.h" +#include "optimization.h" +#include "code_generator_mips.h" + +namespace art { + +class CodeGenerator; + +namespace mips { + +class InstructionSimplifierMips : public HOptimization { + public: + InstructionSimplifierMips(HGraph* graph, CodeGenerator* codegen, OptimizingCompilerStats* stats) + : HOptimization(graph, "instruction_simplifier_mips", stats), + codegen_(down_cast(codegen)) {} + + static constexpr const char* kInstructionSimplifierMipsPassName = "instruction_simplifier_mips"; + + void Run() OVERRIDE; + + private: + CodeGeneratorMIPS* codegen_; +}; + +} // namespace mips +} // namespace art + +#endif // ART_COMPILER_OPTIMIZING_INSTRUCTION_SIMPLIFIER_MIPS_H_ -- cgit v1.2.3-59-g8ed1b