Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 73313 invoked from network); 20 Jul 2007 09:41:14 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 20 Jul 2007 09:41:14 -0000 Received: (qmail 4893 invoked by uid 500); 20 Jul 2007 09:40:41 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 4878 invoked by uid 500); 20 Jul 2007 09:40:41 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 4869 invoked by uid 99); 20 Jul 2007 09:40:41 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 20 Jul 2007 02:40:41 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 20 Jul 2007 02:40:38 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 796D21A981D; Fri, 20 Jul 2007 02:40:18 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r557942 [2/2] - in /harmony/enhanced/drlvm/trunk/vm: jitrino/config/ia32/ jitrino/src/codegenerator/ jitrino/src/codegenerator/ia32/ jitrino/src/codegenerator/ipf/include/ jitrino/src/optimizer/ jitrino/src/shared/ vmcore/src/jit/ Date: Fri, 20 Jul 2007 09:40:10 -0000 To: commits@harmony.apache.org From: mfursov@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070720094018.796D21A981D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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=557942&r1=557941&r2=557942 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifier.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifier.cpp Fri Jul 20 02:40:02 2007 @@ -1931,70 +1931,6 @@ } Opnd* -Simplifier::simplifyPredCmp(Type* dstType, - Type::Tag instType, // source type - ComparisonModifier mod, - Opnd* src1, - Opnd* src2) { - assert(0); - ConstInst::ConstValue res; - if (ConstantFolder::isConstant(src1)) { - if (ConstantFolder::isConstant(src2)) { - return foldComparison(mod, - instType, - src1->getInst()->asConstInst(), - src2->getInst()->asConstInst()); - } else { - // can fold if (src1 == 0) and comparison is Cmp_Gt_Un - if (ConstantFolder::isConstantZero(src1) && - ((mod & Cmp_Mask)==Cmp_GT_Un)) { - switch (dstType->tag) { - case Type::Int32: return genLdConstant((int32)0)->getDst(); - default: - break; - } - } - } - } else if (ConstantFolder::isConstantZero(src2) && - ((mod & Cmp_Mask) == Cmp_GTE_Un)) { - switch (dstType->tag) { - case Type::Int32: return genLdConstant((int32)1)->getDst(); - default: - break; - } - } - // if operands are identical and not FP, then we can simplify it now - if ((src1 == src2) && !Type::isFloatingPoint(instType)) { - switch (mod & Cmp_Mask) { - case Cmp_EQ: case Cmp_GTE: case Cmp_GTE_Un: - return genLdConstant((int32)1)->getDst(); - case Cmp_NE_Un: case Cmp_GT: case Cmp_GT_Un: - return genLdConstant((int32)0)->getDst(); - default: - assert(0); - } - } - - // try to simplify to a new comparison - { - ComparisonModifier newMod; - Type::Tag newInstType; - Opnd *newSrc1; - Opnd *newSrc2; - if (simplifyCmpToCmp(instType, mod, src1, src2, - newInstType, newMod, newSrc1, newSrc2)) { - // can simplify it. - Inst *res = genCmp(dstType, newInstType, newMod, - newSrc1, (newSrc2 - ? newSrc2 - : OpndManager::getNullOpnd())); - return res->getDst(); - } - } - return NULL; -} - -Opnd* Simplifier::simplifyCmp3(Type* dstType, Type::Tag instType, ComparisonModifier mod, @@ -3198,14 +3134,6 @@ return NULL; } -Opnd* -Simplifier::simplifyScaledDiffRef(Opnd* src1, Opnd* src2) { - if (src1 == src2) { - } else { - } - return NULL; -} - // // Compressed reference operations // @@ -4530,97 +4458,6 @@ return NULL; } -bool -Simplifier::simplifyPredBranch(LabelInst *label, Opnd *src) -{ - Inst *inst = src->getInst(); - if (inst->getOpcode() != Op_PredCmp) { - return false; - } - bool isTaken; - Type::Tag type = inst->getType(); - ComparisonModifier mod = inst->getComparisonModifier(); - switch (inst->getNumSrcOperands()) { - case 1: - if(canFoldBranch(type, - mod, - inst->getSrc(0), - isTaken)) { - if (isTaken) { - genJump(label); - } else { - // just fall through - } - return true; - } - else { - if(simplifyBranch(type, mod, label, inst->getSrc(0))) - return true; - } - break; - case 2: - if(canFoldBranch(type, - mod, - inst->getSrc(0), - inst->getSrc(1), - isTaken)) { - if (isTaken) { - genJump(label); - } else { - // just fall through - } - return true; - } - else { - if(simplifyBranch(type, mod, label, inst->getSrc(0), inst->getSrc(1))) - return true; - } - break; - } - return false; -} - -Inst* -Simplifier::casePredBranch(BranchInst* pbInst) { - assert(pbInst->getNumSrcOperands() == 1); - Opnd *srcOpnd = pbInst->getSrc(0); - Inst *inst = srcOpnd->getInst(); - if (inst->getOpcode() != Op_PredCmp) return 0; - bool isTaken; - Type::Tag type = inst->getType(); - ComparisonModifier mod = inst->getComparisonModifier(); - switch (inst->getNumSrcOperands()) { - case 1: - if(canFoldBranch(type, - mod, - inst->getSrc(0), - isTaken)) { - foldBranch(pbInst, isTaken); - return NULL; - } - else { - if(simplifyBranch(type, mod, pbInst->getTargetLabel(), inst->getSrc(0))) - return NULL; - } - break; - case 2: - if(canFoldBranch(type, - mod, - inst->getSrc(0), - inst->getSrc(1), - isTaken)) { - foldBranch(pbInst, isTaken); - return NULL; - } - else { - if(simplifyBranch(type, mod, pbInst->getTargetLabel(), inst->getSrc(0), inst->getSrc(1))) - return NULL; - } - break; - } - - return inst; -} void SimplifierWithInstFactory::genThrowSystemException(CompilationInterface::SystemExceptionId exceptionId) Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifier.h URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifier.h?view=diff&rev=557942&r1=557941&r2=557942 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifier.h (original) +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifier.h Fri Jul 20 02:40:02 2007 @@ -127,7 +127,6 @@ return NULL; } Opnd* simplifyAddScaledIndex(Opnd* base, Opnd* index); - Opnd* simplifyScaledDiffRef(Opnd* src1, Opnd* src2); // stores void simplifyTauStInd(Inst *inst); // modifies instr in place if possible void simplifyTauStField(Inst *inst); // modifies instr in place if possible @@ -169,11 +168,6 @@ // tau operations Opnd* simplifyTauAnd(MultiSrcInst *tauAndInst); - // predicate operations - Opnd* simplifyPredCmp(Type* dstType, Type::Tag srcType, ComparisonModifier, Opnd* src1, Opnd* src2); - // if branch can be simplified, generates alternate instructions and returns true; - bool simplifyPredBranch(LabelInst* label, Opnd *src); - Opnd* propagateCopy(Opnd*); static bool isNonNullObject(Opnd*); @@ -635,14 +629,7 @@ return opnd->getInst(); return inst; } - Inst* caseScaledDiffRef(Inst* inst) { - Opnd* opnd = simplifyScaledDiffRef(inst->getSrc(0), - inst->getSrc(1)); - if (opnd != NULL) - return opnd->getInst(); - return inst; - } - + // stores Inst* caseStVar(Inst* inst) {return caseDefault(inst);} @@ -980,19 +967,6 @@ return opnd->getInst(); return inst; } - - Inst* casePredCmp(Inst* inst) { - Opnd* opnd = simplifyPredCmp(inst->getDst()->getType(), - inst->getType(), - inst->getComparisonModifier(), - inst->getSrc(0), - inst->getSrc(1)); - if (opnd != NULL) - return opnd->getInst(); - return inst; - } - - Inst* casePredBranch(BranchInst* inst); // default Inst* caseDefault(Inst* inst) { Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifytaus.cpp URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifytaus.cpp?view=diff&rev=557942&r1=557941&r2=557942 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifytaus.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/simplifytaus.cpp Fri Jul 20 02:40:02 2007 @@ -552,7 +552,6 @@ case Op_TauArrayLen: case Op_LdArrayBaseAddr: case Op_AddScaledIndex: - case Op_ScaledDiffRef: assert(0); // not an object type case Op_StVar: @@ -713,8 +712,6 @@ case Op_TauHasType: case Op_TauHasExactType: case Op_TauIsNonNull: - case Op_PredCmp: - case Op_PredBranch: assert(0); // none of the above yield objects default: 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=557942&r1=557941&r2=557942 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.cpp Fri Jul 20 02:40:02 2007 @@ -423,7 +423,7 @@ Node* ControlFlowGraph::splitNodeAtInstruction(CFGInst *inst, bool splitAfter, bool keepDispatch, CFGInst* labelInst) { Node *node = inst->getNode(); Node* dispatchNode = keepDispatch ? node->getExceptionEdgeTarget() : NULL; - Node* nextNode = splitNode(node, splitAfter, labelInst); + Node* newNode = splitNode(node, splitAfter, labelInst); if (inst == node->getLastInst()) { assert(!splitAfter || (node->getOutDegree() == 1 && node->getUnconditionalEdge()!=NULL) || (node->getOutDegree()==2 && node->getExceptionEdgeTarget()!=NULL)); @@ -439,12 +439,12 @@ for (CFGInst *ins = splitAfter ? inst->next() : inst; ins != NULL; ) { CFGInst *nextins = ins->next(); ins->unlink(); - nextNode->appendInst(ins); + newNode->appendInst(ins); ins = nextins; } - nextNode->setExecCount(node->getExecCount()); - node->findTargetEdge(nextNode)->setEdgeProb(1.0); - return nextNode; + newNode->setExecCount(node->getExecCount()); + node->findTargetEdge(newNode)->setEdgeProb(1.0); + return newNode; } // Splice a new empty block on the CFG edge. 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=557942&r1=557941&r2=557942 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.h (original) +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/ControlFlowGraph.h Fri Jul 20 02:40:02 2007 @@ -1300,7 +1300,7 @@ * * @param[in] edge - the edge to change the target * @param[in] newTarget - a new Target node - * @param[in] keepOldBody - modify old or create a new edge + * @param[in] keepOldEdge - modify old or create a new edge * * @return The edge connecting the Source node of the * edge and the newTarget node. @@ -1308,7 +1308,7 @@ * @note The removal of the old edge is needed * while inlining CFG: edge IDs must be renewed. */ - Edge* replaceEdgeTarget(Edge* edge, Node *newTarget, bool keepOldBody = false); + Edge* replaceEdgeTarget(Edge* edge, Node *newTarget, bool keepOldEdge = false); /** * Checks if CFG is annotated with the edge profile information. Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/LoopTree.cpp URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/LoopTree.cpp?view=diff&rev=557942&r1=557941&r2=557942 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/LoopTree.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/LoopTree.cpp Fri Jul 20 02:40:02 2007 @@ -216,13 +216,12 @@ Edge* e = *ite; assert(e->getTargetNode() == header); // must share the same header - fg->replaceEdgeTarget(e, block); + fg->replaceEdgeTarget(e, block, true); block->setExecCount(block->getExecCount()+e->getSourceNode()->getExecCount()*e->getEdgeProb()); } // create factored edge - Edge* edge = fg->addEdge(block,header); - edge->setEdgeProb(1.0); + Edge* edge = fg->addEdge(block,header, 1.0); return edge; } Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/jit_runtime_support.cpp URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/jit_runtime_support.cpp?view=diff&rev=557942&r1=557941&r2=557942 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/jit_runtime_support.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/jit_runtime_support.cpp Fri Jul 20 02:40:02 2007 @@ -349,6 +349,7 @@ // General stats update static void rth_type_test_update_stats(VTable* sub, Class* super) { + UNSAFE_REGION_START VM_Statistics::get_vm_stats().num_type_checks ++; if (sub->clss == super) VM_Statistics::get_vm_stats().num_type_checks_equal_type ++; @@ -360,6 +361,7 @@ VM_Statistics::get_vm_stats().num_type_checks_super_is_interface ++; else if (super->get_depth() >= vm_max_fast_instanceof_depth()) VM_Statistics::get_vm_stats().num_type_checks_super_is_too_deep ++; + UNSAFE_REGION_END } // Checkcast stats update @@ -382,6 +384,7 @@ // Instanceof stats update static void rth_update_instanceof_stats(ManagedObject* o, Class* super) { + UNSAFE_REGION_START VM_Statistics::get_vm_stats().num_instanceof++; super->instanceof_slow_path_taken(); if (o == (ManagedObject*)VM_Global_State::loader_env->managed_null) { @@ -393,6 +396,7 @@ VM_Statistics::get_vm_stats().num_instanceof_fast_decision ++; rth_type_test_update_stats(o->vt(), super); } + UNSAFE_REGION_END } #endif // VM_STATS @@ -2777,6 +2781,7 @@ static void update_general_type_checking_stats(VTable *sub, Class *super) { #ifdef VM_STATS + UNSAFE_REGION_START VM_Statistics::get_vm_stats().num_type_checks++; if (sub->clss == super) VM_Statistics::get_vm_stats().num_type_checks_equal_type++; @@ -2788,6 +2793,7 @@ VM_Statistics::get_vm_stats().num_type_checks_super_is_interface++; else if (super->get_depth() >= vm_max_fast_instanceof_depth()) VM_Statistics::get_vm_stats().num_type_checks_super_is_too_deep++; + UNSAFE_REGION_END #endif // VM_STATS }