//===------ ManualOptimizer.h ---------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
//
// Handle pragma/metadata-directed transformations.
//
//===----------------------------------------------------------------------===//

#ifndef POLLY_MANUALOPTIMIZER_H
#define POLLY_MANUALOPTIMIZER_H

#include "isl/isl-noexceptions.h"

namespace llvm {
class OptimizationRemarkEmitter;
}

namespace polly {
class Scop;
struct Dependences;

/// Apply loop-transformation metadata.
///
/// The loop metadata are taken from mark-nodes in @sched. These nodes have been
/// added by ScopBuilder when creating a schedule for a loop with an attach
/// LoopID.
///
/// @param S     The SCoP for @p Sched.
/// @param Sched The input schedule to apply the directives on.
///
/// @return The transformed schedule with all mark-nodes with loop
///         transformations applied. Returns NULL in case of an error or @p
///         Sched itself if no transformation has been applied.
isl::schedule applyManualTransformations(Scop *S, isl::schedule Sched,
                                         const Dependences &D,
                                         llvm::OptimizationRemarkEmitter *ORE);
} // namespace polly

#endif /* POLLY_MANUALOPTIMIZER_H */
