//===- DebugStringHelper.h - helpers to generate debug strings --*- 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
//
//===----------------------------------------------------------------------===//
//
// Convenience functions to make it easier to get a string representation for
// ops that have a print method. For use in debugging output and errors
// returned.
//
//===----------------------------------------------------------------------===//

#ifndef MLIR_DEBUGSTRINGHELPER_H_
#define MLIR_DEBUGSTRINGHELPER_H_

#include <string>

#include "llvm/ADT/Twine.h"
#include "llvm/Support/raw_os_ostream.h"
#include "llvm/Support/raw_ostream.h"

namespace mlir {

// Simple helper function that returns a string as printed from a op.
template <typename T>
static std::string debugString(T &&op) {
  std::string instr_str;
  llvm::raw_string_ostream os(instr_str);
  op.print(os);
  return os.str();
}

} // namespace mlir

inline std::ostream &operator<<(std::ostream &out, const llvm::Twine &twine) {
  llvm::raw_os_ostream rout(out);
  rout << twine;
  return out;
}

#endif // MLIR_DEBUGSTRINGHELPER_H_
