< prev index next >

test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/LoopingConditionFactory.java

Print this page

        

*** 27,42 **** import jdk.test.lib.jittester.IRNode; import jdk.test.lib.jittester.Literal; import jdk.test.lib.jittester.LocalVariable; import jdk.test.lib.jittester.OperatorKind; import jdk.test.lib.jittester.ProductionFailedException; import jdk.test.lib.jittester.loops.LoopingCondition; import jdk.test.lib.jittester.types.TypeKlass; - import jdk.test.lib.jittester.types.TypeBoolean; import jdk.test.lib.jittester.utils.PseudoRandom; ! class LoopingConditionFactory extends Factory { private final LocalVariable counter; private final Literal limiter; private final int operatorLimit; private final long complexityLimit; private final TypeKlass ownerClass; --- 27,42 ---- import jdk.test.lib.jittester.IRNode; import jdk.test.lib.jittester.Literal; import jdk.test.lib.jittester.LocalVariable; import jdk.test.lib.jittester.OperatorKind; import jdk.test.lib.jittester.ProductionFailedException; + import jdk.test.lib.jittester.TypeList; import jdk.test.lib.jittester.loops.LoopingCondition; import jdk.test.lib.jittester.types.TypeKlass; import jdk.test.lib.jittester.utils.PseudoRandom; ! class LoopingConditionFactory extends Factory<LoopingCondition> { private final LocalVariable counter; private final Literal limiter; private final int operatorLimit; private final long complexityLimit; private final TypeKlass ownerClass;
*** 49,63 **** this.limiter = limiter; this.ownerClass = ownerClass; } @Override ! public IRNode produce() throws ProductionFailedException { IRNode leftExpression = null; IRNode rightExpression = null; ! LimitedExpressionFactory exprFactory = new IRNodeBuilder() ! .setResultType(new TypeBoolean()) .setComplexityLimit((complexityLimit - 1) / 2) .setOperatorLimit((operatorLimit - 1) / 2) .setOwnerKlass(ownerClass) .setExceptionSafe(false) .setNoConsts(false) --- 49,63 ---- this.limiter = limiter; this.ownerClass = ownerClass; } @Override ! public LoopingCondition produce() throws ProductionFailedException { IRNode leftExpression = null; IRNode rightExpression = null; ! Factory<IRNode> exprFactory = new IRNodeBuilder() ! .setResultType(TypeList.BOOLEAN) .setComplexityLimit((complexityLimit - 1) / 2) .setOperatorLimit((operatorLimit - 1) / 2) .setOwnerKlass(ownerClass) .setExceptionSafe(false) .setNoConsts(false)
*** 73,85 **** // counter < n, counter <= n, n > counter, n >= counter, n - counter > 0, etc.. // Just as a temporary solution we'll assume that the counter is monotonically increasing. // And use counter < n condition to limit the loop. // In future we may introduce other equivalent relations as well. ! IRNode condition = new BinaryOperator(OperatorKind.LT, counter, limiter); ! condition = (rightExpression != null) ? new BinaryOperator(OperatorKind.AND, condition, rightExpression) : condition; ! condition = (leftExpression != null) ? new BinaryOperator(OperatorKind.AND, leftExpression, condition) : condition; return new LoopingCondition(condition); } } --- 73,85 ---- // counter < n, counter <= n, n > counter, n >= counter, n - counter > 0, etc.. // Just as a temporary solution we'll assume that the counter is monotonically increasing. // And use counter < n condition to limit the loop. // In future we may introduce other equivalent relations as well. ! BinaryOperator condition = new BinaryOperator(OperatorKind.LT, TypeList.BOOLEAN, counter, limiter); ! condition = (rightExpression != null) ? new BinaryOperator(OperatorKind.AND, TypeList.BOOLEAN, condition, rightExpression) : condition; ! condition = (leftExpression != null) ? new BinaryOperator(OperatorKind.AND, TypeList.BOOLEAN, leftExpression, condition) : condition; return new LoopingCondition(condition); } }
< prev index next >