59 }
60
61 @Test
62 @IR(failOn = IRNode.ADD_L, counts = {IRNode.ADD_P, "1"})
63 public static byte test1(long base) {
64 int offset = 0;
65 do {
66 offset++;
67 } while (offset < 100);
68 long longOffset = ((long) offset) * 2;
69 return UNSAFE.getByte(null, base + longOffset);
70 }
71
72 @Run(test = "test1")
73 public static void test1Runner() {
74 test1(base);
75 }
76
77 @Test
78 @IR(counts = {IRNode.LOAD_VECTOR_I, "> 1"},
79 applyIfOr = {"UseCompactObjectHeaders", "false", "AlignVector", "false"},
80 applyIfPlatformOr = {"x64", "true", "aarch64", "true"})
81 public static int test2(int stop, int[] array) {
82 int v = 0;
83 stop = Math.min(stop, Integer.MAX_VALUE / 4);
84 for (int i = 0; i < stop; i++) {
85 long offset = ((long)i) * 4;
86 array[i] = UNSAFE.getInt(null, offset + base);
87 // With AlignVector, we need 8-byte alignment of vector loads/stores.
88 // UseCompactObjectHeaders=false UseCompactObjectHeaders=true
89 // I_adr = base + 16 + 4*i -> i % 2 = 0 B_adr = base + 12 + 4*i -> i % 2 = 1
90 // N_adr = base + 4*i -> i % 2 = 0 N_adr = base + 4*i -> i % 2 = 0
91 // -> vectorize -> no vectorization
92 }
93 return v;
94 }
95
96 @Run(test = "test2")
97 public static void test2Runner() {
98 test2(size, new int[size]);
99 }
100 }
|
59 }
60
61 @Test
62 @IR(failOn = IRNode.ADD_L, counts = {IRNode.ADD_P, "1"})
63 public static byte test1(long base) {
64 int offset = 0;
65 do {
66 offset++;
67 } while (offset < 100);
68 long longOffset = ((long) offset) * 2;
69 return UNSAFE.getByte(null, base + longOffset);
70 }
71
72 @Run(test = "test1")
73 public static void test1Runner() {
74 test1(base);
75 }
76
77 @Test
78 @IR(counts = {IRNode.LOAD_VECTOR_I, "> 1"},
79 applyIfPlatformOr = {"x64", "true", "aarch64", "true"})
80 public static int test2(int stop, int[] array) {
81 int v = 0;
82 stop = Math.min(stop, Integer.MAX_VALUE / 4);
83 for (int i = 0; i < stop; i++) {
84 long offset = ((long)i) * 4;
85 array[i] = UNSAFE.getInt(null, offset + base);
86 }
87 return v;
88 }
89
90 @Run(test = "test2")
91 public static void test2Runner() {
92 test2(size, new int[size]);
93 }
94 }
|