1f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang/* 2f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * Copyright (C) 2014 The Android Open Source Project 3f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * 4f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * Licensed under the Apache License, Version 2.0 (the "License"); 5f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * you may not use this file except in compliance with the License. 6f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * You may obtain a copy of the License at 7f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * 8f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * http://www.apache.org/licenses/LICENSE-2.0 9f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * 10f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * Unless required by applicable law or agreed to in writing, software 11f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * distributed under the License is distributed on an "AS IS" BASIS, 12f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * See the License for the specific language governing permissions and 14f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang * limitations under the License. 15f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang */ 16f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang 17f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang#ifndef ART_COMPILER_OPTIMIZING_BOUNDS_CHECK_ELIMINATION_H_ 18f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang#define ART_COMPILER_OPTIMIZING_BOUNDS_CHECK_ELIMINATION_H_ 19f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang 20f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang#include "optimization.h" 21f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang 22f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yangnamespace art { 23f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang 244a34277c55279ba57ab361f7580db846a201d9b1Aart Bikclass SideEffectsAnalysis; 2522af3bee34d0ab1a4bd186c71ccab00366882259Aart Bikclass HInductionVarAnalysis; 2622af3bee34d0ab1a4bd186c71ccab00366882259Aart Bik 27f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yangclass BoundsCheckElimination : public HOptimization { 28f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang public: 294a34277c55279ba57ab361f7580db846a201d9b1Aart Bik BoundsCheckElimination(HGraph* graph, 304a34277c55279ba57ab361f7580db846a201d9b1Aart Bik const SideEffectsAnalysis& side_effects, 314a34277c55279ba57ab361f7580db846a201d9b1Aart Bik HInductionVarAnalysis* induction_analysis) 3209e8d5ffe52c738c6a74984b1cbc7ad4bc8f5e2cAart Bik : HOptimization(graph, kBoundsCheckEliminationPassName), 334a34277c55279ba57ab361f7580db846a201d9b1Aart Bik side_effects_(side_effects), 3422af3bee34d0ab1a4bd186c71ccab00366882259Aart Bik induction_analysis_(induction_analysis) {} 35f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang 36f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang void Run() OVERRIDE; 37f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang 3809e8d5ffe52c738c6a74984b1cbc7ad4bc8f5e2cAart Bik static constexpr const char* kBoundsCheckEliminationPassName = "BCE"; 397c3952f423b8213083d60596a5f0bf4237ca3f7bAndreas Gampe 40f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang private: 414a34277c55279ba57ab361f7580db846a201d9b1Aart Bik const SideEffectsAnalysis& side_effects_; 4222af3bee34d0ab1a4bd186c71ccab00366882259Aart Bik HInductionVarAnalysis* induction_analysis_; 4322af3bee34d0ab1a4bd186c71ccab00366882259Aart Bik 44f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang DISALLOW_COPY_AND_ASSIGN(BoundsCheckElimination); 45f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang}; 46f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang 47f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang} // namespace art 48f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang 49f384f88d4d1e89df82f47fbc7245a8acc9c2d49cMingyao Yang#endif // ART_COMPILER_OPTIMIZING_BOUNDS_CHECK_ELIMINATION_H_ 50