Examples of ExpressionComplexityClassifier


Examples of joust.optimisers.invar.ExpressionComplexityClassifier

            // If it has IO effects, or both escaping reads or writes, it's not safe to do it repeatedly.
            if ((!argEffects.contains(EffectSet.EffectType.READ_ESCAPING)
              || !argEffects.contains(EffectSet.EffectType.WRITE_ESCAPING))
              && !argEffects.contains(EffectSet.EffectType.IO)) {
                 // Since you don't *have* to extract it, check if this one is expensive enough for it to be worth it.
                 ExpressionComplexityClassifier classifier = new ExpressionComplexityClassifier();
                 classifier.visitTree(args[i]);

                 log.info("Score for {} is {}", args[i], classifier.getScore());

                 if (classifier.getScore() < ARGUMENT_EXTRACTION_THRESHOLD) {
                     continue;
                 }
            }

            AJCVariableDecl newTemp = extractArgument(args[i], enclosingSymbol);
View Full Code Here

Examples of joust.optimisers.invar.ExpressionComplexityClassifier

    public final List<AJCComparableExpressionTree> usages = Collections.unmodifiableList(usagesInternal);

    public void addUsage(AJCComparableExpressionTree tree) {
        usagesInternal.add(tree);

        ExpressionComplexityClassifier classifier = new ExpressionComplexityClassifier();
        classifier.visitTree(tree.wrappedNode);
        complexityScore += classifier.getScore();
    }
View Full Code Here

Examples of joust.optimisers.invar.ExpressionComplexityClassifier

    /**
     * Get the cost of the expressions of interest if CSE were applied here.
     */
    public int getApplicationCost() {
        ExpressionComplexityClassifier classifier = new ExpressionComplexityClassifier();
        classifier.visitTree(firstInstance.wrappedNode);

        // The cost of introducing the new temporary.
        int initialiserCost = classifier.getScore() + ExpressionComplexityClassifier.ASSIGNMENT_COST;

        int usagesCost = usagesInternal.size() * ExpressionComplexityClassifier.IDENT_COST;

        return initialiserCost + usagesCost;
    }
View Full Code Here

Examples of joust.optimisers.invar.ExpressionComplexityClassifier

        Iterator<AJCComparableExpressionTree> iterator = invariantFinder.invariantExpressions.keySet().iterator();
        while (iterator.hasNext()) {
            AJCComparableExpressionTree expr = iterator.next();
            // Discard all expressions that aren't complicated enough to be worth moving..
            ExpressionComplexityClassifier classifier = new ExpressionComplexityClassifier();
            classifier.visitTree(expr.wrappedNode);

            if (classifier.getScore() < INVAR_COMPLEXITY_THRESHOLD) {
                log.info("Ignoring invariant expression {} because score {} is below complexity threshold.", expr.wrappedNode, classifier.getScore());
                iterator.remove();
            }
        }

        return invariantFinder.invariantExpressions;
View Full Code Here

Examples of joust.optimisers.invar.ExpressionComplexityClassifier

        public int compare(AJCComparableExpressionTree o1, AJCComparableExpressionTree o2) {
            if (o1.equals(o2)) {
                return 0;
            }

            ExpressionComplexityClassifier classifier1 = new ExpressionComplexityClassifier();
            ExpressionComplexityClassifier classifier2 = new ExpressionComplexityClassifier();

            classifier1.visitTree(o1.wrappedNode);
            classifier2.visitTree(o2.wrappedNode);

            int usagesOne = invariants.get(o1).size();
            int usagesTwo = invariants.get(o2).size();

            int scoreOne = classifier1.getScore() * usagesOne;
            int scoreTwo = classifier2.getScore() * usagesTwo;

            if (scoreOne == scoreTwo) {
                return 0;
            }

View Full Code Here

Examples of joust.optimisers.invar.ExpressionComplexityClassifier

     * @return true if the visitor should continue down the tree, false if this branch should be explored no further.
     *         (Used to avoid exploring down trees that are already too inexpensive to be interesting).
     */
    private void visitExpression(AJCComparableExpressionTree<? extends AJCExpressionTree> that) {
        // Determine if this tree is cheap enough that we don't care about it.
        ExpressionComplexityClassifier classifier = new ExpressionComplexityClassifier();
        classifier.visitTree(that.wrappedNode);

        log.debug("Encountered: {}", that);

        int score = classifier.getScore();
        if (score < MINIMUM_CSE_SCORE) {
            log.debug("Score too low - stop.");
            return;
        }

View Full Code Here

Examples of joust.optimisers.invar.ExpressionComplexityClassifier

            log.debug("Abort: Condition unknown or cycles exceeded");
            return;
        }

        // Don't unroll loops with very complicated bodies.
        ExpressionComplexityClassifier classifier = new ExpressionComplexityClassifier();
        classifier.visitTree(tree.body);
        if (classifier.getScore() > UNROLLABLE_BODY_THRESHOLD) {
            log.info("Skipping unrollable loop because complexity {} too high: {}", classifier.getScore(), tree);
            return;
        }

        // Replace the for loop with its initialiser, then iterations-many repeats of the body inlining variables that
        // are known in the EvaluationContext as we go.
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.