18df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang/*
28df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang * Copyright (C) 2015 The Android Open Source Project
38df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang *
48df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang * Licensed under the Apache License, Version 2.0 (the "License");
58df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang * you may not use this file except in compliance with the License.
68df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang * You may obtain a copy of the License at
78df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang *
88df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang *      http://www.apache.org/licenses/LICENSE-2.0
98df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang *
108df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang * Unless required by applicable law or agreed to in writing, software
118df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang * distributed under the License is distributed on an "AS IS" BASIS,
128df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang * See the License for the specific language governing permissions and
148df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang * limitations under the License.
158df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang */
168df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang
178df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang#ifndef ART_COMPILER_OPTIMIZING_LOAD_STORE_ELIMINATION_H_
188df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang#define ART_COMPILER_OPTIMIZING_LOAD_STORE_ELIMINATION_H_
198df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang
208df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang#include "optimization.h"
218df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang
228df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yangnamespace art {
238df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang
248df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yangclass SideEffectsAnalysis;
258df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang
268df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yangclass LoadStoreElimination : public HOptimization {
278df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang public:
288df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang  LoadStoreElimination(HGraph* graph, const SideEffectsAnalysis& side_effects)
298df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang      : HOptimization(graph, kLoadStoreEliminationPassName),
308df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang        side_effects_(side_effects) {}
318df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang
328df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang  void Run() OVERRIDE;
338df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang
348df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang  static constexpr const char* kLoadStoreEliminationPassName = "load_store_elimination";
358df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang
368df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang private:
378df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang  const SideEffectsAnalysis& side_effects_;
388df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang
398df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang  DISALLOW_COPY_AND_ASSIGN(LoadStoreElimination);
408df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang};
418df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang
428df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang}  // namespace art
438df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang
448df69d42a9e3ccd9456ff72fac8dbd1999f98755Mingyao Yang#endif  // ART_COMPILER_OPTIMIZING_LOAD_STORE_ELIMINATION_H_
45