23
24 package jdk.test.lib.jittester.arrays;
25
26 import java.util.ArrayList;
27 import java.util.List;
28 import java.util.stream.Collectors;
29 import jdk.test.lib.jittester.IRNode;
30 import jdk.test.lib.jittester.Literal;
31 import jdk.test.lib.jittester.LocalVariable;
32 import jdk.test.lib.jittester.types.TypeArray;
33 import jdk.test.lib.jittester.visitors.Visitor;
34
35
36 /*
37 Array extraction produces and array with N dimentions from an array with M
38 dimentions, where N < M.
39 */
40 public class ArrayExtraction extends IRNode {
41 private final List<Byte> dims;
42 public ArrayExtraction(IRNode array, ArrayList<IRNode> dimensionExpressions) {
43 addChild(array);
44 addChildren(dimensionExpressions);
45 if (array instanceof ArrayCreation) {
46 dims = new ArrayList<>();
47 ArrayCreation ac = (ArrayCreation) array;
48 for (int i = dimensionExpressions.size(); i < ac.getDimensionsCount(); ++i) {
49 dims.add(ac.getDimensionSize(i));
50 }
51 } else if (array instanceof ArrayExtraction) {
52 dims = new ArrayList<>();
53 ArrayExtraction ae = (ArrayExtraction) array;
54 for (int i = dimensionExpressions.size(); i < ae.getDimsNumber(); ++i) {
55 dims.add(ae.getDim(i));
56 }
57 } else if (array instanceof LocalVariable) {
58 LocalVariable loc = (LocalVariable) array;
59 TypeArray type = (TypeArray) loc.get().type;
60 dims = type.getDims();
61 for (int i = dimensionExpressions.size(); i < type.dimensions; ++i) {
62 dims.add(type.getDims().get(i));
63 }
64 } else {
65 dims = dimensionExpressions.stream()
66 .map(d -> {
67 if (d instanceof Literal) {
68 Literal n = (Literal) d;
69 return (Byte)n.getValue();
70 }
71 return (byte)0;
72 })
73 .collect(Collectors.toList());
74 }
75 }
76
77 @Override
78 public<T> T accept(Visitor<T> v) {
79 return v.visit(this);
|
23
24 package jdk.test.lib.jittester.arrays;
25
26 import java.util.ArrayList;
27 import java.util.List;
28 import java.util.stream.Collectors;
29 import jdk.test.lib.jittester.IRNode;
30 import jdk.test.lib.jittester.Literal;
31 import jdk.test.lib.jittester.LocalVariable;
32 import jdk.test.lib.jittester.types.TypeArray;
33 import jdk.test.lib.jittester.visitors.Visitor;
34
35
36 /*
37 Array extraction produces and array with N dimentions from an array with M
38 dimentions, where N < M.
39 */
40 public class ArrayExtraction extends IRNode {
41 private final List<Byte> dims;
42 public ArrayExtraction(IRNode array, ArrayList<IRNode> dimensionExpressions) {
43 super(array.getResultType());
44 addChild(array);
45 addChildren(dimensionExpressions);
46 if (array instanceof ArrayCreation) {
47 dims = new ArrayList<>();
48 ArrayCreation ac = (ArrayCreation) array;
49 for (int i = dimensionExpressions.size(); i < ac.getDimensionsCount(); ++i) {
50 dims.add(ac.getDimensionSize(i));
51 }
52 } else if (array instanceof ArrayExtraction) {
53 dims = new ArrayList<>();
54 ArrayExtraction ae = (ArrayExtraction) array;
55 for (int i = dimensionExpressions.size(); i < ae.getDimsNumber(); ++i) {
56 dims.add(ae.getDim(i));
57 }
58 } else if (array instanceof LocalVariable) {
59 LocalVariable loc = (LocalVariable) array;
60 TypeArray type = (TypeArray) loc.getVariableInfo().type;
61 dims = type.getDims();
62 for (int i = dimensionExpressions.size(); i < type.dimensions; ++i) {
63 dims.add(type.getDims().get(i));
64 }
65 } else {
66 dims = dimensionExpressions.stream()
67 .map(d -> {
68 if (d instanceof Literal) {
69 Literal n = (Literal) d;
70 return (Byte)n.getValue();
71 }
72 return (byte)0;
73 })
74 .collect(Collectors.toList());
75 }
76 }
77
78 @Override
79 public<T> T accept(Visitor<T> v) {
80 return v.visit(this);
|