# HG changeset patch # User Thomas Wuerthinger # Date 1305732914 -7200 # Node ID 5a784215351a61f240b0c42cd95bbc01f053bfd2 # Parent d669ab61c7c726f6f7dabd3b0b5b6dcb91afaa7b Removed WasVisited flag diff -r d669ab61c7c7 -r 5a784215351a graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java --- a/graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java Wed May 18 17:32:14 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java Wed May 18 17:35:14 2011 +0200 @@ -237,6 +237,16 @@ return blocksOnWorklist.contains(block); } + private Set blocksVisited = new HashSet(); + + private void markVisited(BlockBegin block) { + blocksVisited.add(block); + } + + private boolean isVisited(BlockBegin block) { + return blocksVisited.contains(block); + } + private void finishStartBlock(BlockBegin startBlock, BlockBegin stdEntry) { assert curBlock == startBlock; FrameState stateAfter = frameState.create(bci()); @@ -336,7 +346,7 @@ exceptionHandlers.add(newHandler); // fill in exception handler subgraph lazily - if (!entry.wasVisited()) { + if (!isVisited(entry)) { addToWorkList(entry); } else { // This will occur for exception handlers that cover themselves. This code @@ -1048,8 +1058,8 @@ private void iterateAllBlocks() { BlockBegin b; while ((b = removeFromWorkList()) != null) { - if (!b.wasVisited()) { - b.setWasVisited(true); + if (!isVisited(b)) { + markVisited(b); // now parse the block curBlock = b; frameState.initializeFrom(b.stateBefore()); diff -r d669ab61c7c7 -r 5a784215351a graal/GraalCompiler/src/com/sun/c1x/ir/BlockBegin.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/BlockBegin.java Wed May 18 17:32:14 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/BlockBegin.java Wed May 18 17:35:14 2011 +0200 @@ -95,7 +95,6 @@ StandardEntry, ExceptionEntry, BackwardBranchTarget, - WasVisited, ParserLoopHeader, LinearScanLoopHeader, LinearScanLoopEnd; @@ -384,12 +383,6 @@ FrameState existingState = stateBefore(); if (existingState == null) { - // this is the first state for the block - if (wasVisited()) { - // this can happen for complex jsr/ret patterns; just bail out - throw new CiBailout("jsr/ret too complex"); - } - // copy state because it is modified FrameState duplicate = newState.duplicate(bci()); assert duplicate.bci == bci() : "duplicate.bci=" + duplicate.bci + " my bci=" + bci(); @@ -421,10 +414,6 @@ assert existingState.localsSize() == newState.localsSize(); assert existingState.stackSize() == newState.stackSize(); - if (wasVisited() && !isParserLoopHeader()) { - throw new CiBailout("jsr/ret too complicated"); - } - existingState.merge(this, newState); } } @@ -466,14 +455,6 @@ setBlockFlag(BlockFlag.ExceptionEntry); } - public boolean wasVisited() { - return checkBlockFlag(BlockFlag.WasVisited); - } - - public void setWasVisited(boolean value) { - setBlockFlag(BlockFlag.WasVisited, value); - } - public boolean isParserLoopHeader() { return checkBlockFlag(BlockFlag.ParserLoopHeader); } @@ -619,9 +600,6 @@ if (isParserLoopHeader()) { sb.append("LH"); } - if (wasVisited()) { - sb.append('V'); - } if (sb.length() != 0) { out.print('(').print(sb.toString()).print(')'); }