llvm/mlir/include/mlir/Support/LLVM.h

//===- LLVM.h - Import and forward declare core LLVM types ------*- 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
//
//===----------------------------------------------------------------------===//
//
// This file forward declares and imports various common LLVM datatypes that
// MLIR wants to use unqualified.
//
// Note that most of these are forward declared and then imported into the MLIR
// namespace with using decls, rather than being #included.  This is because we
// want clients to explicitly #include the files they need.
//
//===----------------------------------------------------------------------===//

#ifndef MLIR_SUPPORT_LLVM_H
#define MLIR_SUPPORT_LLVM_H

// We include this header because it cannot be practically forward
// declared, and are effectively language features.
#include "llvm/Support/Casting.h"

// We include this header because large portions of mlir would have to include
// it anyway.
#include "llvm/Support/LogicalResult.h"

// Workaround for clang-5 (PR41549)
#if defined(__clang_major__)
#if __clang_major__ <= 5
#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/ADT/SmallVector.h"
#endif
#endif

// Forward declarations.
namespace llvm {
// String types
template <unsigned N>
class SmallString;
class StringRef;
class StringLiteral;
class Twine;

// Containers.
template <typename T>
class ArrayRef;
class BitVector;
namespace detail {
template <typename KeyT, typename ValueT>
struct DenseMapPair;
} // namespace detail
template <typename KeyT, typename ValueT, typename KeyInfoT, typename BucketT>
class DenseMap;
template <typename T, typename Enable>
struct DenseMapInfo;
template <typename ValueT, typename ValueInfoT>
class DenseSet;
class MallocAllocator;
template <typename T>
class MutableArrayRef;
template <typename... PT>
class PointerUnion;
template <typename T, typename Vector, typename Set, unsigned N>
class SetVector;
template <typename T, unsigned N>
class SmallPtrSet;
template <typename T>
class SmallPtrSetImpl;
template <typename T, unsigned N>
class SmallVector;
template <typename T>
class SmallVectorImpl;
template <typename AllocatorTy>
class StringSet;
template <typename T, typename R>
class StringSwitch;
template <typename T>
class TinyPtrVector;
template <typename T, typename ResultT>
class TypeSwitch;

// Other common classes.
class APInt;
class DynamicAPInt;
class APSInt;
class APFloat;
template <typename Fn>
class function_ref;
template <typename IteratorT>
class iterator_range;
class raw_ostream;
class SMLoc;
class SMRange;
} // namespace llvm

namespace mlir {
// Casting operators.
cast;
cast_if_present;
cast_or_null;
dyn_cast;
dyn_cast_if_present;
dyn_cast_or_null;
isa;
isa_and_nonnull;
isa_and_present;

// String types
SmallString;
StringLiteral;
StringRef;
Twine;

// Container Related types
//
// Containers.
ArrayRef;
BitVector;
DenseMapInfo;
DenseMap;
DenseSet;
SetVector;
StringSet;
MutableArrayRef;
PointerUnion;
SmallPtrSet;
SmallPtrSetImpl;
SmallVector;
SmallVectorImpl;
StringSwitch;
TinyPtrVector;
TypeSwitch;

// Other common classes.
APFloat;
APInt;
APSInt;
DynamicAPInt;
function_ref;
iterator_range;
raw_ostream;
SMLoc;
SMRange;

// LogicalResult.
failed;
failure;
FailureOr;
LogicalResult;
ParseResult;
succeeded;
success;
} // namespace mlir

#endif // MLIR_SUPPORT_LLVM_H