//===------ DeLICM.h --------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Undo the effect of Loop Invariant Code Motion (LICM) and // GVN Partial Redundancy Elimination (PRE) on SCoP-level. // // Namely, remove register/scalar dependencies by mapping them back to array // elements. // //===----------------------------------------------------------------------===// #ifndef POLLY_DELICM_H #define POLLY_DELICM_H #include "isl/isl-noexceptions.h" namespace llvm { class PassRegistry; class Pass; class raw_ostream; } // namespace llvm namespace polly { /// Create a new DeLICM pass instance. llvm::Pass *createDeLICMPass(); /// Determine whether two lifetimes are conflicting. /// /// Used by unittesting. bool isConflicting(isl::union_set ExistingOccupied, isl::union_set ExistingUnused, isl::union_map ExistingKnown, isl::union_map ExistingWrites, isl::union_set ProposedOccupied, isl::union_set ProposedUnused, isl::union_map ProposedKnown, isl::union_map ProposedWrites, llvm::raw_ostream *OS = nullptr, unsigned Indent = 0); } // namespace polly namespace llvm { void initializeDeLICMPass(llvm::PassRegistry &); } // namespace llvm #endif /* POLLY_DELICM_H */