[PATCH] standardize {pred,succ,use,user}_{size,empty} like in MBB

Ramkumar Ramachandra artagnon at gmail.com
Mon Jan 12 17:43:06 PST 2015


Hi sanjoy, reames, hfinkel, atrick, majnemer,

MachineBasicBlock has {pred,succ}_{size,empty}, and it would be nice to
have a version that operated on BasicBlock. While at it, add
implementations for use_, user_.

http://reviews.llvm.org/D6944

Files:
  include/llvm/IR/CFG.h
  include/llvm/IR/Value.h

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 <typename T, typename U> struct isPodLike<SuccIterator<T, U> > {
   static const bool value = isPodLike<T>::value;
Index: include/llvm/IR/Value.h
===================================================================
--- include/llvm/IR/Value.h
+++ include/llvm/IR/Value.h
@@ -285,6 +285,14 @@
   iterator_range<const_use_iterator> uses() const {
     return iterator_range<const_use_iterator>(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>       user_iterator;
   typedef user_iterator_impl<const User> const_user_iterator;
@@ -300,6 +308,12 @@
   iterator_range<const_user_iterator> users() const {
     return iterator_range<const_user_iterator>(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.
   ///

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D6944.18065.patch
Type: text/x-patch
Size: 2099 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150113/44294668/attachment.bin>


More information about the llvm-commits mailing list