Add Block::successors.
authorDejan Mircevski <deki@google.com>
Mon, 18 Jan 2016 04:27:45 +0000 (23:27 -0500)
committerDejan Mircevski <deki@google.com>
Tue, 19 Jan 2016 15:10:15 +0000 (10:10 -0500)
SPIRV/SpvBuilder.cpp
SPIRV/spvIR.h

index 4d5ce41..29f4860 100755 (executable)
@@ -857,7 +857,7 @@ void Builder::leaveFunction()
     if (! block->isTerminated()) {
 
         // Whether we're in an unreachable (non-entry) block.
-        bool unreachable = function.getEntryBlock() != block && block->getNumPredecessors() == 0;
+        bool unreachable = function.getEntryBlock() != block && block->getPredecessors().empty();
 
         if (unreachable) {
             // Given that this block is at the end of a function, it must be right after an
index e763dbb..38e5197 100755 (executable)
@@ -162,9 +162,10 @@ public:
 
     Function& getParent() const { return parent; }
     void addInstruction(std::unique_ptr<Instruction> inst);
-    void addPredecessor(Block* pred) { predecessors.push_back(pred); }
+    void addPredecessor(Block* pred) { predecessors.push_back(pred); pred->successors.push_back(this);}
     void addLocalVariable(std::unique_ptr<Instruction> inst) { localVariables.push_back(std::move(inst)); }
-    int getNumPredecessors() const { return (int)predecessors.size(); }
+    const std::vector<Block*> getPredecessors() const { return predecessors; }
+    const std::vector<Block*> getSuccessors() const { return successors; }
     void setUnreachable() { unreachable = true; }
     bool isUnreachable() const { return unreachable; }
 
@@ -206,7 +207,7 @@ protected:
     friend Function;
 
     std::vector<std::unique_ptr<Instruction> > instructions;
-    std::vector<Block*> predecessors;
+    std::vector<Block*> predecessors, successors;
     std::vector<std::unique_ptr<Instruction> > localVariables;
     Function& parent;