@@ -536,6 +536,57 @@ class BBIterator {
536
536
pointer get () const { return getInstr (It); }
537
537
};
538
538
539
+ // / Contains a list of sandboxir::Instruction's.
540
+ class BasicBlock : public Value {
541
+ // / Builds a graph that contains all values in \p BB in their original form
542
+ // / i.e., no vectorization is taking place here.
543
+ void buildBasicBlockFromLLVMIR (llvm::BasicBlock *LLVMBB);
544
+ friend class Context ; // For `buildBasicBlockFromIR`
545
+ friend class Instruction ; // For LLVM Val.
546
+
547
+ BasicBlock (llvm::BasicBlock *BB, Context &SBCtx)
548
+ : Value(ClassID::Block, BB, SBCtx) {
549
+ buildBasicBlockFromLLVMIR (BB);
550
+ }
551
+
552
+ public:
553
+ ~BasicBlock () = default ;
554
+ // / For isa/dyn_cast.
555
+ static bool classof (const Value *From) {
556
+ return From->getSubclassID () == Value::ClassID::Block;
557
+ }
558
+ Function *getParent () const ;
559
+ using iterator = BBIterator;
560
+ iterator begin () const ;
561
+ iterator end () const {
562
+ auto *BB = cast<llvm::BasicBlock>(Val);
563
+ return iterator (BB, BB->end (), &Ctx);
564
+ }
565
+ std::reverse_iterator<iterator> rbegin () const {
566
+ return std::make_reverse_iterator (end ());
567
+ }
568
+ std::reverse_iterator<iterator> rend () const {
569
+ return std::make_reverse_iterator (begin ());
570
+ }
571
+ Context &getContext () const { return Ctx; }
572
+ Instruction *getTerminator () const ;
573
+ bool empty () const { return begin () == end (); }
574
+ Instruction &front () const ;
575
+ Instruction &back () const ;
576
+
577
+ #ifndef NDEBUG
578
+ void verify () const final {
579
+ assert (isa<llvm::BasicBlock>(Val) && " Expected BasicBlock!" );
580
+ }
581
+ friend raw_ostream &operator <<(raw_ostream &OS, const BasicBlock &SBBB) {
582
+ SBBB.dump (OS);
583
+ return OS;
584
+ }
585
+ void dump (raw_ostream &OS) const final ;
586
+ LLVM_DUMP_METHOD void dump () const final ;
587
+ #endif
588
+ };
589
+
539
590
// / A sandboxir::User with operands, opcode and linked with previous/next
540
591
// / instructions in an instruction list.
541
592
class Instruction : public sandboxir ::User {
@@ -1579,57 +1630,6 @@ class OpaqueInst : public sandboxir::Instruction {
1579
1630
#endif
1580
1631
};
1581
1632
1582
- // / Contains a list of sandboxir::Instruction's.
1583
- class BasicBlock : public Value {
1584
- // / Builds a graph that contains all values in \p BB in their original form
1585
- // / i.e., no vectorization is taking place here.
1586
- void buildBasicBlockFromLLVMIR (llvm::BasicBlock *LLVMBB);
1587
- friend class Context ; // For `buildBasicBlockFromIR`
1588
- friend class Instruction ; // For LLVM Val.
1589
-
1590
- BasicBlock (llvm::BasicBlock *BB, Context &SBCtx)
1591
- : Value(ClassID::Block, BB, SBCtx) {
1592
- buildBasicBlockFromLLVMIR (BB);
1593
- }
1594
-
1595
- public:
1596
- ~BasicBlock () = default ;
1597
- // / For isa/dyn_cast.
1598
- static bool classof (const Value *From) {
1599
- return From->getSubclassID () == Value::ClassID::Block;
1600
- }
1601
- Function *getParent () const ;
1602
- using iterator = BBIterator;
1603
- iterator begin () const ;
1604
- iterator end () const {
1605
- auto *BB = cast<llvm::BasicBlock>(Val);
1606
- return iterator (BB, BB->end (), &Ctx);
1607
- }
1608
- std::reverse_iterator<iterator> rbegin () const {
1609
- return std::make_reverse_iterator (end ());
1610
- }
1611
- std::reverse_iterator<iterator> rend () const {
1612
- return std::make_reverse_iterator (begin ());
1613
- }
1614
- Context &getContext () const { return Ctx; }
1615
- Instruction *getTerminator () const ;
1616
- bool empty () const { return begin () == end (); }
1617
- Instruction &front () const ;
1618
- Instruction &back () const ;
1619
-
1620
- #ifndef NDEBUG
1621
- void verify () const final {
1622
- assert (isa<llvm::BasicBlock>(Val) && " Expected BasicBlock!" );
1623
- }
1624
- friend raw_ostream &operator <<(raw_ostream &OS, const BasicBlock &SBBB) {
1625
- SBBB.dump (OS);
1626
- return OS;
1627
- }
1628
- void dump (raw_ostream &OS) const final ;
1629
- LLVM_DUMP_METHOD void dump () const final ;
1630
- #endif
1631
- };
1632
-
1633
1633
class Context {
1634
1634
protected:
1635
1635
LLVMContext &LLVMCtx;
0 commit comments