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