//===------ ZoneAlgo.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 // //===----------------------------------------------------------------------===// // // Derive information about array elements between statements ("Zones"). // //===----------------------------------------------------------------------===// #ifndef POLLY_ZONEALGO_H #define POLLY_ZONEALGO_H #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/SmallPtrSet.h" #include "isl/isl-noexceptions.h" #include <memory> namespace llvm { class Value; class LoopInfo; class Loop; class PHINode; class raw_ostream; } // namespace llvm namespace polly { class Scop; class ScopStmt; class MemoryAccess; class ScopArrayInfo; /// Return only the mappings that map to known values. /// /// @param UMap { [] -> ValInst[] } /// /// @return { [] -> ValInst[] } isl::union_map filterKnownValInst(const isl::union_map &UMap); /// Base class for algorithms based on zones, like DeLICM. class ZoneAlgorithm { … }; /// Create a domain-to-unknown value mapping. /// /// Value instances that do not represent a specific value are represented by an /// unnamed tuple of 0 dimensions. Its meaning depends on the context. It can /// either mean a specific but unknown value which cannot be represented by /// other means. It conflicts with itself because those two unknown ValInsts may /// have different concrete values at runtime. /// /// The other meaning is an arbitrary or wildcard value that can be chosen /// freely, like LLVM's undef. If matched with an unknown ValInst, there is no /// conflict. /// /// @param Domain { Domain[] } /// /// @return { Domain[] -> ValInst[] } isl::union_map makeUnknownForDomain(isl::union_set Domain); } // namespace polly #endif /* POLLY_ZONEALGO_H */