14a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko/* 24a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * Copyright (C) 2015 The Android Open Source Project 34a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * 44a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * Licensed under the Apache License, Version 2.0 (the "License"); 54a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * you may not use this file except in compliance with the License. 64a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * You may obtain a copy of the License at 74a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * 84a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * http://www.apache.org/licenses/LICENSE-2.0 94a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * 104a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * Unless required by applicable law or agreed to in writing, software 114a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * distributed under the License is distributed on an "AS IS" BASIS, 124a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * See the License for the specific language governing permissions and 144a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko * limitations under the License. 154a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko */ 164a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 174a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko#ifndef ART_COMPILER_OPTIMIZING_INSTRUCTION_SIMPLIFIER_ARM_H_ 184a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko#define ART_COMPILER_OPTIMIZING_INSTRUCTION_SIMPLIFIER_ARM_H_ 194a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 204a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko#include "nodes.h" 214a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko#include "optimization.h" 224a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 234a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenkonamespace art { 244a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenkonamespace arm { 254a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 264a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenkoclass InstructionSimplifierArmVisitor : public HGraphVisitor { 274a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko public: 284a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko InstructionSimplifierArmVisitor(HGraph* graph, OptimizingCompilerStats* stats) 294a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko : HGraphVisitor(graph), stats_(stats) {} 304a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 314a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko private: 324a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko void RecordSimplification() { 334a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko if (stats_ != nullptr) { 344a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko stats_->RecordStat(kInstructionSimplificationsArch); 354a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko } 364a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko } 374a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 384a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko void VisitMul(HMul* instruction) OVERRIDE; 397fc6350f6f1ab04b52b9cd7542e0790528296cbeArtem Serov void VisitOr(HOr* instruction) OVERRIDE; 407fc6350f6f1ab04b52b9cd7542e0790528296cbeArtem Serov void VisitAnd(HAnd* instruction) OVERRIDE; 414a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 424a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko OptimizingCompilerStats* stats_; 434a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko}; 444a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 454a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 464a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenkoclass InstructionSimplifierArm : public HOptimization { 474a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko public: 484a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko InstructionSimplifierArm(HGraph* graph, OptimizingCompilerStats* stats) 494a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko : HOptimization(graph, "instruction_simplifier_arm", stats) {} 504a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 514a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko void Run() OVERRIDE { 524a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko InstructionSimplifierArmVisitor visitor(graph_, stats_); 534a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko visitor.VisitReversePostOrder(); 544a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko } 554a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko}; 564a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 574a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko} // namespace arm 584a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko} // namespace art 594a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko 604a0dad67867f389e01a5a6c0fe381d210f687c0dArtem Udovichenko#endif // ART_COMPILER_OPTIMIZING_INSTRUCTION_SIMPLIFIER_ARM_H_ 61