< prev index next >
test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/SwitchFactory.java
Print this page
*** 24,56 ****
package jdk.test.lib.jittester.factories;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import jdk.test.lib.jittester.BuiltInType;
import jdk.test.lib.jittester.IRNode;
import jdk.test.lib.jittester.Literal;
import jdk.test.lib.jittester.Nothing;
import jdk.test.lib.jittester.ProductionFailedException;
import jdk.test.lib.jittester.Rule;
import jdk.test.lib.jittester.Switch;
import jdk.test.lib.jittester.Type;
import jdk.test.lib.jittester.utils.TypeUtil;
import jdk.test.lib.jittester.types.TypeKlass;
- import jdk.test.lib.jittester.types.TypeByte;
- import jdk.test.lib.jittester.types.TypeChar;
- import jdk.test.lib.jittester.types.TypeInt;
- import jdk.test.lib.jittester.types.TypeShort;
import jdk.test.lib.jittester.utils.PseudoRandom;
! class SwitchFactory extends SafeFactory {
! private int caseBlockIdx;
! protected long complexityLimit;
! protected int statementLimit, operatorLimit;
! private boolean canHaveReturn = false;
private final TypeKlass ownerClass;
private final int level;
SwitchFactory(TypeKlass ownerClass, long complexityLimit, int statementLimit,
int operatorLimit, int level, boolean canHaveReturn) {
this.ownerClass = ownerClass;
this.complexityLimit = complexityLimit;
--- 24,54 ----
package jdk.test.lib.jittester.factories;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
+
import jdk.test.lib.jittester.BuiltInType;
import jdk.test.lib.jittester.IRNode;
import jdk.test.lib.jittester.Literal;
import jdk.test.lib.jittester.Nothing;
import jdk.test.lib.jittester.ProductionFailedException;
import jdk.test.lib.jittester.Rule;
import jdk.test.lib.jittester.Switch;
import jdk.test.lib.jittester.Type;
+ import jdk.test.lib.jittester.TypeList;
import jdk.test.lib.jittester.utils.TypeUtil;
import jdk.test.lib.jittester.types.TypeKlass;
import jdk.test.lib.jittester.utils.PseudoRandom;
! class SwitchFactory extends SafeFactory<Switch> {
! private final int statementLimit;
! private final int operatorLimit;
! private final boolean canHaveReturn;
private final TypeKlass ownerClass;
private final int level;
+ private final long complexityLimit;
SwitchFactory(TypeKlass ownerClass, long complexityLimit, int statementLimit,
int operatorLimit, int level, boolean canHaveReturn) {
this.ownerClass = ownerClass;
this.complexityLimit = complexityLimit;
*** 59,75 ****
this.level = level;
this.canHaveReturn = canHaveReturn;
}
@Override
! protected IRNode sproduce() throws ProductionFailedException {
if (statementLimit > 0 && complexityLimit > 0) {
List<Type> switchTypes = new ArrayList<>();
! switchTypes.add(new TypeChar());
! switchTypes.add(new TypeByte());
! switchTypes.add(new TypeShort());
! switchTypes.add(new TypeInt());
PseudoRandom.shuffle(switchTypes);
IRNodeBuilder builder = new IRNodeBuilder()
.setOwnerKlass(ownerClass)
.setOperatorLimit(operatorLimit)
.setSubBlock(false)
--- 57,73 ----
this.level = level;
this.canHaveReturn = canHaveReturn;
}
@Override
! protected Switch sproduce() throws ProductionFailedException {
if (statementLimit > 0 && complexityLimit > 0) {
List<Type> switchTypes = new ArrayList<>();
! switchTypes.add(TypeList.CHAR);
! switchTypes.add(TypeList.BYTE);
! switchTypes.add(TypeList.SHORT);
! switchTypes.add(TypeList.INT);
PseudoRandom.shuffle(switchTypes);
IRNodeBuilder builder = new IRNodeBuilder()
.setOwnerKlass(ownerClass)
.setOperatorLimit(operatorLimit)
.setSubBlock(false)
*** 93,112 ****
.setNoConsts(true)
.getLimitedExpressionFactory()
.produce();
accumulatedComplexity += currentComplexityLimit;
List<Type> caseTypes = new ArrayList<>();
! caseTypes.add(new TypeByte());
! caseTypes.add(new TypeChar());
caseTypes = new ArrayList<>(TypeUtil.getLessCapaciousOrEqualThan(caseTypes,
(BuiltInType) type));
if (PseudoRandom.randomBoolean()) { // "default"
currentStatementsLimit = (int) (PseudoRandom.random()
* (statementLimit - accumulatedStatements));
currentComplexityLimit = (long) (PseudoRandom.random()
* (complexityLimit - accumulatedComplexity));
! caseConsts.add(null);
caseBlocks.add(builder.setComplexityLimit(currentComplexityLimit)
.setStatementLimit(currentStatementsLimit)
.setLevel(level + 1)
.setCanHaveReturn(false)
.setCanHaveBreaks(false)
--- 91,110 ----
.setNoConsts(true)
.getLimitedExpressionFactory()
.produce();
accumulatedComplexity += currentComplexityLimit;
List<Type> caseTypes = new ArrayList<>();
! caseTypes.add(TypeList.BYTE);
! caseTypes.add(TypeList.CHAR);
caseTypes = new ArrayList<>(TypeUtil.getLessCapaciousOrEqualThan(caseTypes,
(BuiltInType) type));
if (PseudoRandom.randomBoolean()) { // "default"
currentStatementsLimit = (int) (PseudoRandom.random()
* (statementLimit - accumulatedStatements));
currentComplexityLimit = (long) (PseudoRandom.random()
* (complexityLimit - accumulatedComplexity));
! caseConsts.add(new Nothing());
caseBlocks.add(builder.setComplexityLimit(currentComplexityLimit)
.setStatementLimit(currentStatementsLimit)
.setLevel(level + 1)
.setCanHaveReturn(false)
.setCanHaveBreaks(false)
*** 126,136 ****
PseudoRandom.shuffle(caseTypes);
for (int tryCount = 0; true; tryCount++) {
if (tryCount >= 10) {
continue MAIN_LOOP;
}
! Literal literal = (Literal) builder.setResultType(caseTypes.get(0))
.getLiteralFactory().produce();
int value = 0;
if (literal.value instanceof Integer) {
value = (Integer) literal.value;
}
--- 124,134 ----
PseudoRandom.shuffle(caseTypes);
for (int tryCount = 0; true; tryCount++) {
if (tryCount >= 10) {
continue MAIN_LOOP;
}
! Literal literal = builder.setResultType(caseTypes.get(0))
.getLiteralFactory().produce();
int value = 0;
if (literal.value instanceof Integer) {
value = (Integer) literal.value;
}
*** 147,157 ****
cases.add(value);
caseConsts.add(literal);
break;
}
}
! Rule rule = new Rule("case_block");
rule.add("block", builder.setComplexityLimit(currentComplexityLimit)
.setStatementLimit(currentStatementsLimit)
.setLevel(level)
.setCanHaveReturn(false)
.setCanHaveBreaks(false)
--- 145,155 ----
cases.add(value);
caseConsts.add(literal);
break;
}
}
! Rule<IRNode> rule = new Rule<>("case_block");
rule.add("block", builder.setComplexityLimit(currentComplexityLimit)
.setStatementLimit(currentStatementsLimit)
.setLevel(level)
.setCanHaveReturn(false)
.setCanHaveBreaks(false)
*** 168,178 ****
accumulatedComplexity += currentComplexityLimit;
}
}
PseudoRandom.shuffle(caseConsts);
List<IRNode> accum = new ArrayList<>();
! caseBlockIdx = 1 + caseConsts.size();
accum.add(switchExp);
for (int i = 1; i < caseBlockIdx; ++i) {
accum.add(caseConsts.get(i - 1));
}
for (int i = caseBlockIdx; i < 1 + caseConsts.size() + caseBlocks.size(); ++i) {
--- 166,176 ----
accumulatedComplexity += currentComplexityLimit;
}
}
PseudoRandom.shuffle(caseConsts);
List<IRNode> accum = new ArrayList<>();
! int caseBlockIdx = 1 + caseConsts.size();
accum.add(switchExp);
for (int i = 1; i < caseBlockIdx; ++i) {
accum.add(caseConsts.get(i - 1));
}
for (int i = caseBlockIdx; i < 1 + caseConsts.size() + caseBlocks.size(); ++i) {
< prev index next >