Index: include/llvm/IR/CFG.h =================================================================== --- include/llvm/IR/CFG.h +++ include/llvm/IR/CFG.h @@ -93,6 +93,15 @@ inline const_pred_iterator pred_end(const BasicBlock *BB) { return const_pred_iterator(BB, true); } +inline unsigned pred_size(const BasicBlock *BB) { + unsigned Count = 0; + for (auto I = pred_begin(BB), E = pred_end(BB); I != E; I++) + Count++; + return Count; +} +inline bool pred_empty(const BasicBlock *BB) { + return !pred_size(BB); +} @@ -257,6 +266,15 @@ inline succ_const_iterator succ_end(const BasicBlock *BB) { return succ_const_iterator(BB->getTerminator(), true); } +inline unsigned succ_size(const BasicBlock *BB) { + unsigned Count = 0; + for (auto I = succ_begin(BB), E = succ_end(BB); I != E; I++) + Count++; + return Count; +} +inline bool succ_empty(const BasicBlock *BB) { + return !succ_size(BB); +} template struct isPodLike > { static const bool value = isPodLike::value; Index: include/llvm/IR/Value.h =================================================================== --- include/llvm/IR/Value.h +++ include/llvm/IR/Value.h @@ -285,6 +285,14 @@ iterator_range uses() const { return iterator_range(use_begin(), use_end()); } + unsigned use_size() const { + unsigned Count = 0; + for (auto I = use_begin(), E = use_end(); I != E; I++) + Count++; + return Count; + } + + bool user_empty() const { return UseList == nullptr; } typedef user_iterator_impl user_iterator; typedef user_iterator_impl const_user_iterator; @@ -300,6 +308,12 @@ iterator_range users() const { return iterator_range(user_begin(), user_end()); } + unsigned user_size() const { + unsigned Count = 0; + for (auto I = user_begin(), E = user_end(); I != E; I++) + Count++; + return Count; + } /// \brief Return true if there is exactly one user of this value. ///