19#ifndef LLVM_ADT_GRAPHTRAITS_H
20#define LLVM_ADT_GRAPHTRAITS_H
37template<
class GraphType>
95 using NodeRef =
typename GraphType::UnknownGraphTypeError;
105template <
typename NodeT>
122template <
class GraphType>
134template <
class GraphType>
140template <
class GraphType>
141iterator_range<typename GraphTraits<Inverse<GraphType>>::nodes_iterator>
147template <
class GraphType>
148iterator_range<typename GraphTraits<GraphType>::ChildIteratorType>
154template <
class GraphType>
155iterator_range<typename GraphTraits<Inverse<GraphType>>::ChildIteratorType>
161template <
class GraphType>
162iterator_range<typename GraphTraits<GraphType>::ChildEdgeIteratorType>
Unify divergent function exit nodes
A range adaptor for a pair of iterators.
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
decltype(GraphTraits< T >::getNumber(std::declval< typename GraphTraits< T >::NodeRef >())) has_number_t
This is an optimization pass for GlobalISel generic memory operations.
iterator_range< typename GraphTraits< Inverse< GraphType > >::nodes_iterator > inverse_nodes(const GraphType &G)
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
constexpr bool GraphHasNodeNumbers
Indicate whether a GraphTraits<NodeT>::getNumber() is supported.
typename detail::detector< void, Op, Args... >::value_t is_detected
Detects if a given trait holds for some set of arguments 'Args'.
iterator_range< typename GraphTraits< GraphType >::ChildEdgeIteratorType > children_edges(const typename GraphTraits< GraphType >::NodeRef &G)
iterator_range< typename GraphTraits< Inverse< GraphType > >::ChildIteratorType > inverse_children(const typename GraphTraits< GraphType >::NodeRef &G)
iterator_range< typename GraphTraits< GraphType >::ChildIteratorType > children(const typename GraphTraits< GraphType >::NodeRef &G)
typename GraphType::UnknownGraphTypeError NodeRef
Inverse(const GraphType &G)