//===------ FlattenAlgo.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
 
//
 
//===----------------------------------------------------------------------===//
 
//
 
// Main algorithm of the FlattenSchedulePass. This is a separate file to avoid
 
// the unittest for this requiring linking against LLVM.
 
//
 
//===----------------------------------------------------------------------===//
 
 
 
#ifndef POLLY_FLATTENALGO_H
 
#define POLLY_FLATTENALGO_H
 
 
 
#include "isl/isl-noexceptions.h"
 
 
 
namespace polly {
 
/// Recursively flatten a schedule.
 
///
 
/// Reduce the number of scatter dimensions as much as possible without changing
 
/// the relative order of instances in a schedule. Ideally, this results in a
 
/// single scatter dimension, but it may not always be possible to combine
 
/// dimensions, eg. if a dimension is unbounded. In worst case, the original
 
/// schedule is returned.
 
///
 
/// Schedules with fewer dimensions may be easier to understand for humans, but
 
/// it should make no difference to the computer.
 
///
 
/// @param Schedule The input schedule.
 
///
 
/// @return The flattened schedule.
 
isl::union_map flattenSchedule(isl::union_map Schedule);
 
} // namespace polly
 
 
 
#endif /* POLLY_FLATTENALGO_H */