# HG changeset patch # User Josef Eisl # Date 1394627892 -3600 # Node ID 6ce74db1c9fb9e360779e2c589dd16de8862a00a # Parent a6595f1b55b001c88d3d9afe251f788dba0ec2c1 Use List instead of Iterable in AbstractBlock to (temporary) allow editing. diff -r a6595f1b55b0 -r 6ce74db1c9fb graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Wed Mar 12 12:09:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Wed Mar 12 13:38:12 2014 +0100 @@ -280,7 +280,7 @@ try (Scope s = Debug.scope("ControlFlowOptimizations")) { EdgeMoveOptimizer.optimize(lir); - ControlFlowOptimizer.optimize(lir); + ControlFlowOptimizer.optimize(lir, codeEmittingOrder); if (lirGen.canEliminateRedundantMoves()) { RedundantMoveElimination.optimize(lir, frameMap); } diff -r a6595f1b55b0 -r 6ce74db1c9fb graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java Wed Mar 12 12:09:07 2014 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java Wed Mar 12 13:38:12 2014 +0100 @@ -37,9 +37,8 @@ /** * Performs control flow optimizations on the given LIR graph. */ - public static void optimize(LIR lir) { - List> blocks = lir.codeEmittingOrder(); - ControlFlowOptimizer.deleteEmptyBlocks(lir, blocks); + public static > void optimize(LIR lir, List codeEmittingOrder) { + ControlFlowOptimizer.deleteEmptyBlocks(lir, codeEmittingOrder); } private ControlFlowOptimizer() { @@ -80,15 +79,15 @@ } } - private static void deleteEmptyBlocks(LIR lir, List> blocks) { + private static > void deleteEmptyBlocks(LIR lir, List blocks) { assert verifyBlocks(lir, blocks); - Iterator> iterator = blocks.iterator(); + Iterator iterator = blocks.iterator(); while (iterator.hasNext()) { - AbstractBlock block = iterator.next(); + T block = iterator.next(); if (canDeleteBlock(lir, block)) { // adjust successor and predecessor lists - AbstractBlock other = block.getSuccessors().iterator().next(); - for (AbstractBlock pred : block.getPredecessors()) { + T other = block.getSuccessors().iterator().next(); + for (AbstractBlock pred : block.getPredecessors()) { Collections.replaceAll(pred.getSuccessors(), block, other); } for (int i = 0; i < other.getPredecessorCount(); i++) { diff -r a6595f1b55b0 -r 6ce74db1c9fb graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/AbstractBlock.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/AbstractBlock.java Wed Mar 12 12:09:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/AbstractBlock.java Wed Mar 12 13:38:12 2014 +0100 @@ -22,6 +22,8 @@ */ package com.oracle.graal.nodes.cfg; +import java.util.*; + import com.oracle.graal.nodes.*; public interface AbstractBlock> { @@ -40,11 +42,11 @@ boolean isExceptionEntry(); - Iterable getPredecessors(); + List getPredecessors(); int getPredecessorCount(); - Iterable getSuccessors(); + List getSuccessors(); int getSuccessorCount();