• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2022 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14#! CHECKER      Use TLAB for array and object
15#! RUN          options: "--compiler-hotness-threshold=0 --no-async-jit=false --compiler-enable-jit=true --compiler-enable-tlab-events=true --compiler-check-final=true --compiler-regex=.*tlab.* --young-shared-space-size=0", entry: "_GLOBAL::main"
16#! EVENT        /Compilation,.*tlab_array_u64.*/
17#! EVENT        /Compilation,.*tlab_array_u32.*/
18#! EVENT        /Compilation,.*tlab_array_u16.*/
19#! EVENT        /Compilation,.*tlab_array_u8.*/
20#! EVENT        /Compilation,.*tlab_asm_16.*/
21#! EVENT        /Compilation,.*tlab_asm_24.*/
22#-! EVENT_NEXT   /SlowpathAlloc,.*/
23#-! EVENT_NEXT_NOT /SlowpathAlloc,.*/
24#! TRUE         EVENT_COUNT(/SlowpathAlloc,.*/) <= 2
25#! EVENT_NEXT   /TlabAlloc,.*,NewArray,.*,24/
26#! EVENT_NEXT   /TlabAlloc,.*,NewArray,.*,32/
27#! EVENT_NEXT   /TlabAlloc,.*,NewArray,.*,40/
28#! EVENT_NEXT   /TlabAlloc,.*,NewArray,.*,56/
29
30
31#! CHECKER      Use TLAB for array and object in AOT
32#! RUN_PAOC     options: "--compiler-enable-tlab-events=true --compiler-regex=.*tlab.* --young-shared-space-size=0"
33#! RUN          options: "--compiler-enable-tlab-events=true", entry: "_GLOBAL::main"
34#-! EVENT_NEXT     /SlowpathAlloc,.*/
35#-! EVENT_NEXT_NOT /SlowpathAlloc,.*/
36#! TRUE         EVENT_COUNT(/SlowpathAlloc,.*/) <= 2
37#! EVENT_NEXT   /TlabAlloc,.*,NewArray,.*,24/
38#! EVENT_NEXT   /TlabAlloc,.*,NewArray,.*,32/
39#! EVENT_NEXT   /TlabAlloc,.*,NewArray,.*,40/
40#! EVENT_NEXT   /TlabAlloc,.*,NewArray,.*,56/
41
42#! CHECKER      Don't Use TLAB for array and object for STW
43#! RUN          options: "--compiler-hotness-threshold=0 --no-async-jit=false --compiler-enable-jit=true --compiler-enable-tlab-events=true --compiler-check-final=true --gc-type=stw --compiler-regex=.*tlab.* --young-shared-space-size=0", entry: "_GLOBAL::main"
44#! EVENT        /Compilation,.*tlab_array_u64.*/
45#! EVENT        /Compilation,.*tlab_array_u32.*/
46#! EVENT        /Compilation,.*tlab_array_u16.*/
47#! EVENT        /Compilation,.*tlab_array_u8.*/
48#! EVENT        /Compilation,.*tlab_asm_16.*/
49#! EVENT        /Compilation,.*tlab_asm_24.*/
50#! EVENT        /SlowpathAlloc,.*/
51#! EVENT_NOT    /TlabAlloc,.*/
52
53.record System <external>
54.record panda.String <external>
55
56.function u8 System.compileMethod(panda.String a0) <external>
57
58.record Asm_size16 {
59    i8 asm1
60}
61
62.record Asm_size24 {
63    i8 asm1
64    i64 asm2
65    Asm_size16 asm3
66}
67
68.function Asm_size16 __noinline__call_tlab_asm_16() <static> {
69    newobj v0, Asm_size16
70    lda.obj v0
71    return.obj
72}
73
74.function Asm_size24 __noinline__call_tlab_asm_24() <static> {
75    newobj v0, Asm_size24
76    lda.obj v0
77    return.obj
78}
79
80.function u64[] __noinline__call_tlab_array_u64(i32 a0) <static> {
81    newarr v0, a0, u64[]
82    lda.obj v0
83    return.obj
84}
85
86.function u32[] __noinline__call_tlab_array_u32(i32 a0) <static> {
87    newarr v0, a0, u32[]
88    lda.obj v0
89    return.obj
90}
91
92.function u16[] __noinline__call_tlab_array_u16(i32 a0) <static> {
93    newarr v0, a0, u16[]
94    lda.obj v0
95    return.obj
96}
97
98.function u8[] __noinline__call_tlab_array_u8(i32 a0) <static> {
99    newarr v0, a0, u8[]
100    lda.obj v0
101    return.obj
102}
103
104.function u1 main(){
105    lda.str "_GLOBAL::__noinline__call_tlab_array_u64"
106    sta.obj v0
107    call.short System.compileMethod, v0, v0
108    jnez error_exit
109
110    lda.str "_GLOBAL::__noinline__call_tlab_array_u32"
111    sta.obj v0
112    call.short System.compileMethod, v0, v0
113    jnez error_exit
114
115    lda.str "_GLOBAL::__noinline__call_tlab_array_u16"
116    sta.obj v0
117    call.short System.compileMethod, v0, v0
118    jnez error_exit
119
120    lda.str "_GLOBAL::__noinline__call_tlab_array_u8"
121    sta.obj v0
122    call.short System.compileMethod, v0, v0
123    jnez error_exit
124
125    lda.str "_GLOBAL::__noinline__call_tlab_asm_16"
126    sta.obj v0
127    call.short System.compileMethod, v0, v0
128    jnez error_exit
129
130    lda.str "_GLOBAL::__noinline__call_tlab_asm_24"
131    sta.obj v0
132    call.short System.compileMethod, v0, v0
133    jnez error_exit
134
135    # we need 2 allocations for initialize TLAB
136    movi v1, 1
137    call.short __noinline__call_tlab_array_u8, v1, v1
138    call.short __noinline__call_tlab_array_u8, v1, v1
139
140    movi v0, 0
141    # we need 2 allocations, cause if we unlucky we will get 1 allocation between TLABs - will be a runtime call.
142    ldai 2
143loop_u8:
144    jeq v0, loop_u8_exit
145    inci v0, 1
146    movi v1, 5
147    call.short __noinline__call_tlab_array_u8, v1, v1
148    ldai 2
149    jmp loop_u8
150loop_u8_exit:
151    movi v0, 0
152    ldai 2
153loop_u16:
154    jeq v0, loop_u16_exit
155    inci v0, 1
156    movi v1, 5
157    call.short __noinline__call_tlab_array_u16, v1, v1
158    ldai 2
159    jmp loop_u16
160loop_u16_exit:
161    movi v0, 0
162    ldai 2
163loop_u32:
164    jeq v0, loop_u32_exit
165    inci v0, 1
166    movi v1, 5
167    call.short __noinline__call_tlab_array_u32, v1, v1
168    ldai 2
169    jmp loop_u32
170loop_u32_exit:
171    movi v0, 0
172    ldai 2
173loop_u64:
174    jeq v0, loop_u64_exit
175    inci v0, 1
176    movi v1, 5
177    call.short __noinline__call_tlab_array_u64, v1, v1
178    ldai 2
179    jmp loop_u64
180loop_u64_exit:
181    movi v0, 0
182    ldai 2
183loop_asm_16:
184    jeq v0, loop_asm_16_exit
185    inci v0, 1
186    call.short __noinline__call_tlab_asm_16
187    ldai 2
188    jmp loop_asm_16
189loop_asm_16_exit:
190    movi v0, 0
191    ldai 2
192loop_asm_24:
193    jeq v0, loop_asm_24_exit
194    inci v0, 1
195    call.short __noinline__call_tlab_asm_24
196    ldai 2
197    jmp loop_asm_24
198loop_asm_24_exit:
199    ldai 0
200    return
201
202error_exit:
203    return
204}
205