src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/cfg/Block.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/cfg

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/cfg/Block.java

Print this page




  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 package org.graalvm.compiler.nodes.cfg;
  24 
  25 import java.util.ArrayList;
  26 import java.util.Iterator;
  27 
  28 import org.graalvm.compiler.core.common.LocationIdentity;
  29 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
  30 import org.graalvm.compiler.core.common.cfg.AbstractControlFlowGraph;
  31 import org.graalvm.compiler.core.common.cfg.Loop;
  32 import org.graalvm.compiler.graph.Node;

  33 import org.graalvm.compiler.nodes.AbstractBeginNode;
  34 import org.graalvm.compiler.nodes.FixedNode;
  35 import org.graalvm.compiler.nodes.FixedWithNextNode;
  36 import org.graalvm.compiler.nodes.InvokeWithExceptionNode;
  37 import org.graalvm.compiler.nodes.LoopBeginNode;
  38 import org.graalvm.compiler.nodes.LoopEndNode;
  39 import org.graalvm.compiler.nodes.memory.MemoryCheckpoint;
  40 
  41 public final class Block extends AbstractBlockBase<Block> {
  42 
  43     public static final Block[] EMPTY_ARRAY = new Block[0];
  44 
  45     protected final AbstractBeginNode beginNode;
  46 
  47     protected FixedNode endNode;
  48 
  49     protected double probability;
  50     protected Loop<Block> loop;
  51 
  52     protected Block postdominator;
  53     protected Block distancedDominatorCache;
  54     private LocationSet killLocations;
  55     private LocationSet killLocationsBetweenThisAndDominator;
  56 
  57     protected Block(AbstractBeginNode node) {
  58         this.beginNode = node;
  59     }
  60 
  61     public AbstractBeginNode getBeginNode() {
  62         return beginNode;
  63     }
  64 
  65     public FixedNode getEndNode() {
  66         return endNode;
  67     }
  68 
  69     @Override
  70     public Loop<Block> getLoop() {
  71         return loop;
  72     }
  73 
  74     public void setLoop(Loop<Block> loop) {
  75         this.loop = loop;
  76     }
  77 


 165             public Iterator<FixedNode> iterator() {
 166                 return new NodeIterator();
 167             }
 168 
 169             @Override
 170             public String toString() {
 171                 StringBuilder str = new StringBuilder().append('[');
 172                 for (FixedNode node : this) {
 173                     str.append(node).append(", ");
 174                 }
 175                 if (str.length() > 1) {
 176                     str.setLength(str.length() - 2);
 177                 }
 178                 return str.append(']').toString();
 179             }
 180         };
 181     }
 182 
 183     @Override
 184     public String toString() {
 185         return "B" + id;

































 186     }
 187 
 188     @Override
 189     public double probability() {
 190         return probability;
 191     }
 192 
 193     public void setProbability(double probability) {
 194         assert probability >= 0 && Double.isFinite(probability);
 195         this.probability = probability;
 196     }
 197 
 198     @Override
 199     public Block getDominator(int distance) {
 200         Block result = this;
 201         for (int i = 0; i < distance; ++i) {
 202             result = result.getDominator();
 203         }
 204         return result;
 205     }


 306                     newPredSuccs[i] = predSuccs[i];
 307                 }
 308             }
 309             pred.setSuccessors(newPredSuccs);
 310         }
 311 
 312         ArrayList<Block> newPreds = new ArrayList<>();
 313         for (int i = 0; i < next.getPredecessorCount(); i++) {
 314             Block curPred = next.getPredecessors()[i];
 315             if (curPred == this) {
 316                 for (Block b : getPredecessors()) {
 317                     newPreds.add(b);
 318                 }
 319             } else {
 320                 newPreds.add(curPred);
 321             }
 322         }
 323 
 324         next.setPredecessors(newPreds.toArray(new Block[0]));
 325     }




 326 }


  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 package org.graalvm.compiler.nodes.cfg;
  24 
  25 import java.util.ArrayList;
  26 import java.util.Iterator;
  27 
  28 import org.graalvm.compiler.core.common.LocationIdentity;
  29 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
  30 import org.graalvm.compiler.core.common.cfg.AbstractControlFlowGraph;
  31 import org.graalvm.compiler.core.common.cfg.Loop;
  32 import org.graalvm.compiler.graph.Node;
  33 import org.graalvm.compiler.nodeinfo.Verbosity;
  34 import org.graalvm.compiler.nodes.AbstractBeginNode;
  35 import org.graalvm.compiler.nodes.FixedNode;
  36 import org.graalvm.compiler.nodes.FixedWithNextNode;
  37 import org.graalvm.compiler.nodes.InvokeWithExceptionNode;
  38 import org.graalvm.compiler.nodes.LoopBeginNode;
  39 import org.graalvm.compiler.nodes.LoopEndNode;
  40 import org.graalvm.compiler.nodes.memory.MemoryCheckpoint;
  41 
  42 public final class Block extends AbstractBlockBase<Block> {
  43 
  44     public static final Block[] EMPTY_ARRAY = new Block[0];
  45 
  46     protected final AbstractBeginNode beginNode;
  47 
  48     protected FixedNode endNode;
  49 
  50     protected double probability;
  51     protected Loop<Block> loop;
  52 
  53     protected Block postdominator;
  54     protected Block distancedDominatorCache;
  55     private LocationSet killLocations;
  56     private LocationSet killLocationsBetweenThisAndDominator;
  57 
  58     public Block(AbstractBeginNode node) {
  59         this.beginNode = node;
  60     }
  61 
  62     public AbstractBeginNode getBeginNode() {
  63         return beginNode;
  64     }
  65 
  66     public FixedNode getEndNode() {
  67         return endNode;
  68     }
  69 
  70     @Override
  71     public Loop<Block> getLoop() {
  72         return loop;
  73     }
  74 
  75     public void setLoop(Loop<Block> loop) {
  76         this.loop = loop;
  77     }
  78 


 166             public Iterator<FixedNode> iterator() {
 167                 return new NodeIterator();
 168             }
 169 
 170             @Override
 171             public String toString() {
 172                 StringBuilder str = new StringBuilder().append('[');
 173                 for (FixedNode node : this) {
 174                     str.append(node).append(", ");
 175                 }
 176                 if (str.length() > 1) {
 177                     str.setLength(str.length() - 2);
 178                 }
 179                 return str.append(']').toString();
 180             }
 181         };
 182     }
 183 
 184     @Override
 185     public String toString() {
 186         return toString(Verbosity.Id);
 187     }
 188 
 189     public String toString(Verbosity verbosity) {
 190         StringBuilder sb = new StringBuilder();
 191         sb.append('B').append(id);
 192         if (verbosity != Verbosity.Id) {
 193             if (isLoopHeader()) {
 194                 sb.append(" lh");
 195             }
 196 
 197             if (getSuccessorCount() > 0) {
 198                 sb.append(" ->[");
 199                 for (int i = 0; i < getSuccessorCount(); ++i) {
 200                     if (i != 0) {
 201                         sb.append(',');
 202                     }
 203                     sb.append('B').append(getSuccessors()[i].getId());
 204                 }
 205                 sb.append(']');
 206             }
 207 
 208             if (getPredecessorCount() > 0) {
 209                 sb.append(" <-[");
 210                 for (int i = 0; i < getPredecessorCount(); ++i) {
 211                     if (i != 0) {
 212                         sb.append(',');
 213                     }
 214                     sb.append('B').append(getPredecessors()[i].getId());
 215                 }
 216                 sb.append(']');
 217             }
 218         }
 219         return sb.toString();
 220     }
 221 
 222     @Override
 223     public double probability() {
 224         return probability;
 225     }
 226 
 227     public void setProbability(double probability) {
 228         assert probability >= 0 && Double.isFinite(probability);
 229         this.probability = probability;
 230     }
 231 
 232     @Override
 233     public Block getDominator(int distance) {
 234         Block result = this;
 235         for (int i = 0; i < distance; ++i) {
 236             result = result.getDominator();
 237         }
 238         return result;
 239     }


 340                     newPredSuccs[i] = predSuccs[i];
 341                 }
 342             }
 343             pred.setSuccessors(newPredSuccs);
 344         }
 345 
 346         ArrayList<Block> newPreds = new ArrayList<>();
 347         for (int i = 0; i < next.getPredecessorCount(); i++) {
 348             Block curPred = next.getPredecessors()[i];
 349             if (curPred == this) {
 350                 for (Block b : getPredecessors()) {
 351                     newPreds.add(b);
 352                 }
 353             } else {
 354                 newPreds.add(curPred);
 355             }
 356         }
 357 
 358         next.setPredecessors(newPreds.toArray(new Block[0]));
 359     }
 360 
 361     protected void setPostDominator(Block postdominator) {
 362         this.postdominator = postdominator;
 363     }
 364 }
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/cfg/Block.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File