#ifndef MLIR_SUPPORT_LLVM_H
#define MLIR_SUPPORT_LLVM_H
#include "llvm/Support/Casting.h"
#include "llvm/Support/LogicalResult.h"
#if defined(__clang_major__)
#if __clang_major__ <= 5
#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/ADT/SmallVector.h"
#endif
#endif
namespace llvm {
template <unsigned N>
class SmallString;
class StringRef;
class StringLiteral;
class Twine;
template <typename T>
class ArrayRef;
class BitVector;
namespace detail {
template <typename KeyT, typename ValueT>
struct DenseMapPair;
}
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;
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 mlir {
cast;
cast_if_present;
cast_or_null;
dyn_cast;
dyn_cast_if_present;
dyn_cast_or_null;
isa;
isa_and_nonnull;
isa_and_present;
SmallString;
StringLiteral;
StringRef;
Twine;
ArrayRef;
BitVector;
DenseMapInfo;
DenseMap;
DenseSet;
SetVector;
StringSet;
MutableArrayRef;
PointerUnion;
SmallPtrSet;
SmallPtrSetImpl;
SmallVector;
SmallVectorImpl;
StringSwitch;
TinyPtrVector;
TypeSwitch;
APFloat;
APInt;
APSInt;
DynamicAPInt;
function_ref;
iterator_range;
raw_ostream;
SMLoc;
SMRange;
failed;
failure;
FailureOr;
LogicalResult;
ParseResult;
succeeded;
success;
}
#endif