[BOLT] Fix blocks layout reverse iterators
authorVladislav Khmelevsky <och95@yandex.ru>
Thu, 8 Dec 2022 10:06:39 +0000 (14:06 +0400)
committerVladislav Khmelevsky <och95@yandex.ru>
Fri, 9 Dec 2022 09:32:34 +0000 (13:32 +0400)
Use container's reverse iterators, fix iterators types.

Reviewed By: Amir

Differential Revision: https://reviews.llvm.org/D139335

bolt/include/bolt/Core/FunctionLayout.h

index 8eeabd9..904da3a 100644 (file)
@@ -71,11 +71,8 @@ class FunctionFragment {
   using FragmentListType = SmallVector<unsigned, 0>;
 
 public:
-  using iterator = raw_pointer_iterator<BasicBlockListType::const_iterator,
-                                        BinaryBasicBlock>;
-  using const_iterator =
-      raw_pointer_iterator<BasicBlockListType::const_iterator,
-                           const BinaryBasicBlock>;
+  using iterator = BasicBlockListType::iterator;
+  using const_iterator = BasicBlockListType::const_iterator;
 
 private:
   FunctionLayout *Layout;
@@ -150,9 +147,7 @@ public:
       pointee_iterator<FragmentListType::const_iterator,
                        const FunctionFragment>;
   using block_iterator = BasicBlockListType::iterator;
-  using block_const_iterator =
-      raw_pointer_iterator<BasicBlockListType::const_iterator,
-                           const BinaryBasicBlock>;
+  using block_const_iterator = BasicBlockListType::const_iterator;
   using block_reverse_iterator = std::reverse_iterator<block_iterator>;
   using block_const_reverse_iterator =
       std::reverse_iterator<block_const_iterator>;
@@ -303,16 +298,18 @@ public:
     return {block_begin(), block_end()};
   }
   block_reverse_iterator block_rbegin() {
-    return block_reverse_iterator(block_end());
+    return block_reverse_iterator(Blocks.rbegin());
   }
   block_const_reverse_iterator block_rbegin() const {
-    return block_const_reverse_iterator(block_end());
+    return block_const_reverse_iterator(
+        std::make_reverse_iterator(block_end()));
   }
   block_reverse_iterator block_rend() {
-    return block_reverse_iterator(block_begin());
+    return block_reverse_iterator(Blocks.rend());
   }
   block_const_reverse_iterator block_rend() const {
-    return block_const_reverse_iterator(block_begin());
+    return block_const_reverse_iterator(
+        std::make_reverse_iterator(block_begin()));
   }
   iterator_range<block_const_reverse_iterator> rblocks() const {
     return {block_rbegin(), block_rend()};