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