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