You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by mf...@apache.org on 2007/07/13 16:19:39 UTC

svn commit: r556007 [3/3] - in /harmony/enhanced/drlvm/trunk/vm: jitrino/src/codegenerator/ jitrino/src/codegenerator/ia32/ jitrino/src/codegenerator/ipf/ jitrino/src/codegenerator/ipf/include/ jitrino/src/dynopt/ jitrino/src/main/ jitrino/src/optimize...

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.h?view=diff&rev=556007&r1=556006&r2=556007
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.h Fri Jul 13 07:19:35 2007
@@ -231,6 +231,8 @@
     double prob;
 };
 
+
+#define ILLEGAL_BC_MAPPING_VALUE 0xFFFF
   /** 
    * The base abstract class for all CFG instructions.
    * The given class keeps information about the node this instruction belongs
@@ -352,6 +354,12 @@
    */
     virtual bool isLabel() const {return false;}
 
+    /// Returns byte-code offset the inst
+    uint16 getBCOffset() const { return bcOffset;}
+
+    /// Sets byte-code offset the inst
+    void setBCOffset(uint16 newVal) {bcOffset = newVal;}
+
 protected:
     /// Called from CFG to detect edge kinds for BN to BN edges.
     virtual Edge::Kind getEdgeKind(const Edge* edge) const = 0;
@@ -366,10 +374,13 @@
    * Initializes the Node instance field with the <code>NULL</code> 
    * value.
    */
-    CFGInst() : node(NULL) {}
+    CFGInst() : node(NULL), bcOffset(ILLEGAL_BC_MAPPING_VALUE) {}
 
     /// The owner node of the instruction.
     Node* node;
+
+    ///offset in byte-code
+    uint16 bcOffset;
 };
 
   /** 
@@ -1097,7 +1108,7 @@
    *
    * @return The <code>Unwind</code> node of the graph.
    */
-    void setUnwindNode(Node* node) {assert(unwindNode==NULL); assert(node->isDispatchNode()); unwindNode = node;}
+    void setUnwindNode(Node* node) {assert(node->isDispatchNode()); unwindNode = node;}
 
   /** 
    * Gets the maximum node ID. 

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp?view=diff&rev=556007&r1=556006&r2=556007
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp Fri Jul 13 07:19:35 2007
@@ -27,7 +27,6 @@
 #include "ExceptionInfo.h"
 #include "simplifier.h"
 #include "methodtable.h"
-#include "InlineInfo.h"
 #include "open/bytecodes.h"
 #include "irmanager.h"
 #include "Jitrino.h"
@@ -147,7 +146,6 @@
               NULL),
       lockAddr(NULL), 
       oldLockValue(NULL),
-      thisLevelBuilder(NULL, methodDesc,irb.getBcOffset()),
       jsrEntryMap(NULL),
       retOffsets(mm),
       jsrEntryOffsets(mm)
@@ -247,6 +245,7 @@
     numLabels = prepass.getNumLabels();
     labels = new (memManager) LabelInst*[numLabels+1];
     irBuilder.createLabels(numLabels,labels);
+
     nextLabel = 0;
     resultOpnd = NULL;
 
@@ -420,8 +419,7 @@
 JavaByteCodeTranslator::offset(uint32 offset) {
 
     // set bc offset in ir builder
-    if (compilationInterface.isBCMapInfoRequired()) irBuilder.setBcOffset(offset);
-
+    irBuilder.setBcOffset(offset);
     if (prepass.isLabel(offset) == false)
         return;
     if (prepassVisited && prepassVisited->getBit(offset) == false) {
@@ -490,6 +488,7 @@
             labelInst = irBuilder.getInstFactory()->makeCatchLabel(
                                             handler->getExceptionOrder(),
                                             handler->getExceptionType());
+            labelInst->setBCOffset((uint16)exceptionInfo->getBeginOffset());
             catchLabels.push_back(labelInst);
             labelInst->setState(oldLabel->getState());
             exceptionInfo->setLabelInst(labelInst);
@@ -1543,8 +1542,7 @@
                                             tauNullChecked, 
                                             0, // let IRBuilder handle types
                                             numArgs,
-                                            srcOpnds, 
-                                            NULL);
+                                            srcOpnds);
     // push the return type
     if (returnType->tag != Type::Void)
         pushOpnd(dst);
@@ -1580,8 +1578,7 @@
         tauNullChecked, 
         0, // let IRBuilder check types
         numArgs,
-        srcOpnds,
-        NULL);
+        srcOpnds);
 
     // push the return type
     if (returnType->tag != Type::Void) {
@@ -1675,8 +1672,7 @@
         tauNullChecked, 
         0, // let IRBuilder handle types
         numArgs,
-        srcOpnds,
-        NULL);
+        srcOpnds);
     // push the return type
     if (returnType->tag != Type::Void)
         pushOpnd(dst);
@@ -2303,8 +2299,7 @@
                         tauNullChecked,
                         0, // let IRBuilder check types
                         numArgs,
-                        srcOpnds,
-                        NULL);
+                        srcOpnds);
     if (returnType->tag != Type::Void)
         pushOpnd(dst);
 }

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.h?view=diff&rev=556007&r1=556006&r2=556007
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.h Fri Jul 13 07:19:35 2007
@@ -220,29 +220,6 @@
 
     typedef StlMap<uint32, Inst*> OffsetToInstMap;
 
-    class JavaInlineInfoBuilder : public InlineInfoBuilder {
-    public:
-        JavaInlineInfoBuilder(InlineInfoBuilder* parent, 
-                MethodDesc& thisMethodDesc, uint32 byteCodeOffset) :
-            InlineInfoBuilder(parent), methodDesc(thisMethodDesc), 
-                bcOffset(byteCodeOffset)
-        {}
-
-    virtual uint32 getCurrentBcOffset() { return bcOffset; }; 
-    virtual MethodDesc* getCurrentMd() { return &methodDesc; }; 
-
-    private:
-        virtual void addCurrentLevel(InlineInfo* ii, uint32 currOffset)
-        {
-            ii->addLevel(&methodDesc, currOffset);
-        }
-        virtual void setCurrentBcOffset(uint32 offSet) { bcOffset = offSet; };
-
-
-        MethodDesc& methodDesc;
-        uint32 bcOffset;
-    };
-
     //
     // helper methods for generating code
     //
@@ -417,7 +394,6 @@
     // Synchronization
     Opnd*               lockAddr;
     Opnd*               oldLockValue;
-    JavaInlineInfoBuilder  thisLevelBuilder;
     
     //
     // mapping: 

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaFlowGraphBuilder.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaFlowGraphBuilder.cpp?view=diff&rev=556007&r1=556006&r2=556007
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaFlowGraphBuilder.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaFlowGraphBuilder.cpp Fri Jul 13 07:19:35 2007
@@ -99,12 +99,18 @@
     for (Inst* inst = first->getNextInst(); inst != NULL; inst = inst->getNextInst()) {
         if (lastExceptionalInstSeen != NULL) {
             // start a new basic block
-            Node *newblock = createBlockNodeAfter(block); 
+            LabelInst* label = irBuilder.getInstFactory()->makeLabel();
+            Node *newblock = createBlockNodeAfter(block, label); 
+            uint16 bcOffset = ILLEGAL_BC_MAPPING_VALUE;
             for (Inst *ins = lastExceptionalInstSeen->getNextInst(), *nextIns = NULL; ins!=NULL; ins = nextIns) {
                 nextIns = ins->getNextInst();
                 ins->unlink();
                 newblock->appendInst(ins);
+                if (bcOffset == ILLEGAL_BC_MAPPING_VALUE) {
+                    bcOffset = ins->getBCOffset();
+                }
             }
+            label->setBCOffset(bcOffset);
 
             // now fix up the CFG, duplicating edges
             if (!lastExceptionalInstSeen->isThrow())
@@ -222,9 +228,7 @@
 }
 
 Node* JavaFlowGraphBuilder::createBlockNodeOrdered(LabelInst* label) {
-    if (label == NULL) {
-        label = irBuilder.getInstFactory()->makeLabel();
-    }
+    assert(label != NULL);
     Node* node = fg->createBlockNode(label);
     fallThruNodes.push_back(node);
     return node;
@@ -233,9 +237,7 @@
 Node* JavaFlowGraphBuilder::createBlockNodeAfter(Node* node, LabelInst* label) {
     NodeList::iterator it = std::find(fallThruNodes.begin(), fallThruNodes.end(), node);
     assert(it!=fallThruNodes.end());
-    if (label == NULL) {
-        label = irBuilder.getInstFactory()->makeLabel();
-    }
+    assert(label != NULL);
     label->setState(((LabelInst*)node->getFirstInst())->getState());
     Node* newNode = fg->createBlockNode(label);
     fallThruNodes.insert(++it, newNode);
@@ -262,7 +264,7 @@
     // create epilog, unwind, and exit
     //
     InstFactory* instFactory = irBuilder.getInstFactory();
-    fg->setReturnNode(createBlockNodeOrdered());
+    fg->setReturnNode(createBlockNodeOrdered(instFactory->makeLabel()));
     fg->setUnwindNode(createDispatchNode());
     fg->setExitNode(fg->createNode(Node::Kind_Exit, instFactory->makeLabel()));
     fg->addEdge(fg->getReturnNode(), fg->getExitNode());
@@ -427,11 +429,11 @@
                if ( !dispatch_target->isCatchBlock() ) {
                    fg->addEdge(dup_dispatch, dispatch_target);
                }else{
-                   CatchLabelInst* catch_label = 
-                       (CatchLabelInst*)dispatch_target->getFirstInst();
+                   CatchLabelInst* catch_label = (CatchLabelInst*)dispatch_target->getFirstInst();
                    assert(dispatch_target->getInstCount() == 0);
-                   Node* dup_catch = createBlockNodeOrdered(
-                           instFactory->makeCatchLabel( catch_label->getOrder(), catch_label->getExceptionType()));
+                   LabelInst* dupCatchInst = instFactory->makeCatchLabel( catch_label->getOrder(), catch_label->getExceptionType());
+                   dupCatchInst->setBCOffset(catch_label->getBCOffset());
+                   Node* dup_catch = createBlockNodeOrdered(dupCatchInst);
                    fg->addEdge(dup_dispatch, dup_catch);
                    assert(dispatch_target->getOutDegree() == 1);
                    fg->addEdge(dup_catch, (*dispatch_target->getOutEdges().begin())->getTargetNode());
@@ -456,6 +458,7 @@
     memManager(mm), currentBlock(NULL), irBuilder(irB), fallThruNodes(mm)
 {
     fg = irBuilder.getFlowGraph();
+    methodHandle = irBuilder.getIRManager()->getMethodDesc().getMethodHandle();
 }
 
 } //namespace Jitrino 

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaFlowGraphBuilder.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaFlowGraphBuilder.h?view=diff&rev=556007&r1=556006&r2=556007
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaFlowGraphBuilder.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaFlowGraphBuilder.h Fri Jul 13 07:19:35 2007
@@ -49,8 +49,8 @@
     void         eliminateUnnestedLoopsOnDispatch();
     bool         lastInstIsMonitorExit(Node* node);
 
-    Node* createBlockNodeOrdered(LabelInst* label = NULL);
-    Node* createBlockNodeAfter(Node* node, LabelInst* label = NULL);
+    Node* createBlockNodeOrdered(LabelInst* label);
+    Node* createBlockNodeAfter(Node* node, LabelInst* label);
     void addEdge(Node* source, Node* target);
 
     //
@@ -62,6 +62,7 @@
     IRBuilder&      irBuilder;
 typedef StlList<Node*> NodeList;
     NodeList fallThruNodes;
+    void*    methodHandle;
 };
 
 

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaTranslator.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaTranslator.cpp?view=diff&rev=556007&r1=556006&r2=556007
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaTranslator.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaTranslator.cpp Fri Jul 13 07:19:35 2007
@@ -30,7 +30,6 @@
 #include "ByteCodeParser.h"
 #include "JavaByteCodeTranslator.h"
 #include "Log.h"
-#include "CGSupport.h"
 #include "FlowGraph.h"
 
 namespace Jitrino {

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/inline_info.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/inline_info.h?view=diff&rev=556007&r1=556006&r2=556007
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/inline_info.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/inline_info.h Fri Jul 13 07:19:35 2007
@@ -9,7 +9,7 @@
 struct Method;
 
 /**
- * Iformation about methods inlined to a given method.
+ * Information about methods inlined to a given method.
  * Instance of this class holds a collection of Entry objects.
  */
 class InlineInfo