pass.h revision 4f59668b3d51f63601ebe59dbd2b7e8a7c5bd093
1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ART_COMPILER_DEX_PASS_H_ 18#define ART_COMPILER_DEX_PASS_H_ 19 20#include <string> 21 22#include "base/macros.h" 23namespace art { 24 25// Empty Pass Data Class, can be extended by any pass extending the base Pass class. 26class PassDataHolder { 27}; 28 29/** 30 * @class Pass 31 * @brief Base Pass class, can be extended to perform a more defined way of doing the work call. 32 */ 33class Pass { 34 public: 35 explicit Pass(const char* name) 36 : pass_name_(name) { 37 } 38 39 virtual ~Pass() { 40 } 41 42 virtual const char* GetName() const { 43 return pass_name_; 44 } 45 46 /** 47 * @brief Gate for the pass: determines whether to execute the pass or not considering a CompilationUnit 48 * @param data the PassDataHolder. 49 * @return whether or not to execute the pass. 50 */ 51 virtual bool Gate(const PassDataHolder* data) const { 52 // Unused parameter. 53 UNUSED(data); 54 55 // Base class says yes. 56 return true; 57 } 58 59 /** 60 * @brief Start of the pass: called before the Worker function. 61 */ 62 virtual void Start(const PassDataHolder* data) const { 63 // Unused parameter. 64 UNUSED(data); 65 } 66 67 /** 68 * @brief End of the pass: called after the WalkBasicBlocks function. 69 */ 70 virtual void End(const PassDataHolder* data) const { 71 // Unused parameter. 72 UNUSED(data); 73 } 74 75 /** 76 * @param data the object containing data necessary for the pass. 77 * @return whether or not there is a change when walking the BasicBlock 78 */ 79 virtual bool Worker(const PassDataHolder* data) const { 80 // Unused parameter. 81 UNUSED(data); 82 83 // BasicBlock did not change. 84 return false; 85 } 86 87 protected: 88 /** @brief The pass name: used for searching for a pass when running a particular pass or debugging. */ 89 const char* const pass_name_; 90 91 private: 92 // In order to make the all passes not copy-friendly. 93 DISALLOW_COPY_AND_ASSIGN(Pass); 94}; 95} // namespace art 96#endif // ART_COMPILER_DEX_PASS_H_ 97