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