< 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 >