/** * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ # class DeoptimizeCompare { # public static int main() { # int[] array = new int[10]; # return sum(array, 10); # } # public static int sum(int[] arr, int size) { # int s = 0; # for (int i = 0; i < size; ++i) { # s += arr[i]; # } # return s; # } # } #! CHECKER DeoptimizeCompare #! RUN_PAOC options: "--compiler-inlining false" #! METHOD "sum" #! PASS_AFTER "ChecksElimination" #! INST "DeoptimizeIf" #! PASS_AFTER "Lowering" #! INST "DeoptimizeIf" #! INST "DeoptimizeCompare" .function i32 sum(i32[] a0, i32 a1) <> { movi v0, 0x0 mov v3, v0 movi v0, 0x0 mov v4, v0 jump_label_1: mov v0, v4 mov v1, a1 lda v0 jge v1, jump_label_0 mov v0, v3 mov.obj v1, a0 mov v2, v4 lda v2 ldarr v1 sta v1 add v1, v0 sta v0 mov v3, v0 inci v4, 0x1 jmp jump_label_1 jump_label_0: mov v0, v3 lda v0 return }