You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2006/11/24 02:54:45 UTC

svn commit: r478745 - in /harmony/enhanced/drlvm/trunk/vm/jitrino/src: optimizer/FlowGraph.cpp optimizer/FlowGraph.h optimizer/hashvaluenumberer.cpp optimizer/simplifier.cpp optimizer/tailduplicator.cpp shared/ControlFlowGraph.cpp

Author: gshimansky
Date: Thu Nov 23 17:54:44 2006
New Revision: 478745

URL: http://svn.apache.org/viewvc?view=rev&rev=478745
Log:
Applied HARMONY-1986 fix for bug in simplifier

Tests passed on win32 and ubuntu


Modified:
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.h
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/hashvaluenumberer.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifier.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/tailduplicator.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.cpp

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp?view=diff&rev=478745&r1=478744&r2=478745
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp Thu Nov 23 17:54:44 2006
@@ -66,10 +66,11 @@
 
 
 void         
-FlowGraph::foldBranch(ControlFlowGraph& fg, Node* block, BranchInst* br, bool isTaken)
+FlowGraph::foldBranch(ControlFlowGraph& fg, BranchInst* br, bool isTaken)
 {
-    assert(br == block->getLastInst());
-    assert(block->getOutDegree() == 2);
+	Node* block = br->getNode();
+	assert(block->getOutDegree() == 2);
+	
     fg.removeEdge(block->getOutEdge(isTaken ? Edge::Kind_False : Edge::Kind_True));
     br->unlink();
 }

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.h?view=diff&rev=478745&r1=478744&r2=478745
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.h Thu Nov 23 17:54:44 2006
@@ -57,7 +57,7 @@
     // If !isTaken, then the false edge is converted, and the true edge
     // is deleted.  In either case, the branch instruction br is removed
     // from block.
-    static void  foldBranch(ControlFlowGraph& fg, Node* block, BranchInst* br, bool isTaken);
+    static void  foldBranch(ControlFlowGraph& fg, BranchInst* br, bool isTaken);
 
     static void  foldSwitch(ControlFlowGraph& fg, Node* block, SwitchInst* sw, uint32 target);
 

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/hashvaluenumberer.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/hashvaluenumberer.cpp?view=diff&rev=478745&r1=478744&r2=478745
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/hashvaluenumberer.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/hashvaluenumberer.cpp Thu Nov 23 17:54:44 2006
@@ -2520,9 +2520,9 @@
             BranchInst *branchi = inst->asBranchInst();
             if (branchi) {
                 if (optimizedOpcode == Op_TauUnsafe) {
-                    FlowGraph::foldBranch(fg, block, branchi, false); // not taken
+                    FlowGraph::foldBranch(fg, branchi, false); // not taken
                 } else {
-                    FlowGraph::foldBranch(fg, block, branchi, true); // taken
+                    FlowGraph::foldBranch(fg, branchi, true); // taken
                 }
                 return;
             }

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifier.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifier.cpp?view=diff&rev=478745&r1=478744&r2=478745
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifier.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifier.cpp Thu Nov 23 17:54:44 2006
@@ -21,6 +21,7 @@
  *
  */
 
+
 #include "Opcode.h"
 #include "Opnd.h"
 #include "Type.h"
@@ -3821,7 +3822,7 @@
 
 void  
 SimplifierWithInstFactory::foldBranch(BranchInst* br, bool isTaken) {
-    FlowGraph::foldBranch(flowGraph, currentCfgNode,br,isTaken);
+    FlowGraph::foldBranch(flowGraph, br,isTaken);
 }
 
 void  

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/tailduplicator.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/tailduplicator.cpp?view=diff&rev=478745&r1=478744&r2=478745
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/tailduplicator.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/tailduplicator.cpp Thu Nov 23 17:54:44 2006
@@ -116,8 +116,8 @@
 
     ControlFlowGraph& fg = _irm.getFlowGraph();
     Node* copy = FlowGraph::tailDuplicate(_irm, t2, tail, defUses);
-    FlowGraph::foldBranch(fg, copy, ((Inst*)copy->getLastInst())->asBranchInst(), true);
-    FlowGraph::foldBranch(fg, tail, ((Inst*)tail->getLastInst())->asBranchInst(), false);
+    FlowGraph::foldBranch(fg, ((Inst*)copy->getLastInst())->asBranchInst(), true);
+    FlowGraph::foldBranch(fg, ((Inst*)tail->getLastInst())->asBranchInst(), false);
 }
 
 void

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.cpp?view=diff&rev=478745&r1=478744&r2=478745
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.cpp Thu Nov 23 17:54:44 2006
@@ -223,13 +223,14 @@
 void ControlFlowGraph::removeNode(Nodes::iterator pos, bool erase) {
     Node* node = *pos;
     
-    assert(node!=entryNode);
+	if (node == entryNode) {
+		entryNode=NULL;
+	}
     if (node == returnNode) {
         returnNode = NULL;
     } else if(node == unwindNode) {
         unwindNode = NULL;
     } else  if (node == exitNode) {
-        assert(0);
         exitNode = NULL;
     }