From 63bc27a6b0c470717893b4dd67c9ee503be1df67 Mon Sep 17 00:00:00 2001 From: "Sergey V. Ignatov" Date: Fri, 3 Mar 2023 18:45:00 +0300 Subject: [PATCH] [Optimizer] Added peephole opt for NegOverflowAndZeroCheck (issue #10729) Signed-off-by: Sergey V. Ignatov --- tests/checked/CMakeLists.txt | 3 +- .../peephole_negoverflowandzerocheck.js | 71 +++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 tests/checked/peephole_negoverflowandzerocheck.js diff --git a/tests/checked/CMakeLists.txt b/tests/checked/CMakeLists.txt index 17f03bce2..b008ca9fc 100644 --- a/tests/checked/CMakeLists.txt +++ b/tests/checked/CMakeLists.txt @@ -105,7 +105,8 @@ if (NOT PANDA_TARGET_ARM32) panda_add_checked_test_ecma(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ecma_inlining.js SUPPORT_RELEASE true) panda_add_checked_test_ecma(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ecma_inlining_megamorphic.js SUPPORT_RELEASE true) panda_add_checked_test_ecma(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ecma_inlining_deoptimize.js SUPPORT_RELEASE true) - panda_add_checked_test_ecma(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ecma_call_profile_clear.js SUPPORT_RELEASE true) + panda_add_checked_test_ecma(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ecma_call_profile_clear.js SUPPORT_RELEASE true) + panda_add_checked_test_ecma(FILE ${CMAKE_CURRENT_SOURCE_DIR}/peephole_negoverflowandzerocheck.js SUPPORT_RELEASE true) # there is flaky bug when turning on TSAN if (NOT PANDA_ENABLE_THREAD_SANITIZER) panda_add_checked_test_ecma(FILE ${CMAKE_CURRENT_SOURCE_DIR}/acc_after_deopt.js SUPPORT_RELEASE true) diff --git a/tests/checked/peephole_negoverflowandzerocheck.js b/tests/checked/peephole_negoverflowandzerocheck.js new file mode 100644 index 000000000..361515fa2 --- /dev/null +++ b/tests/checked/peephole_negoverflowandzerocheck.js @@ -0,0 +1,71 @@ +/* + * 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. + */ + +//! CHECKER Peephole for NegOverflowAndZeroCheck +//! RUN options: "--no-async-jit --compiler-hotness-threshold=10", entry: "_GLOBAL::func_main_0" +//! METHOD "__noinline__test_peephole_success_shl" +//! PASS_AFTER "TypesResolving" +//! INST /NegOverflowAndZeroCheck / +//! INST_NOT /Neg / +//! PASS_BEFORE "Lowering" +//! INST_NOT /NegOverflowAndZeroCheck / +//! INST /Neg / +//! METHOD "__noinline__test_peephole_success_and" +//! PASS_AFTER "TypesResolving" +//! INST /NegOverflowAndZeroCheck / +//! INST_NOT /Neg / +//! PASS_BEFORE "Lowering" +//! INST_NOT /NegOverflowAndZeroCheck / +//! INST /Neg / +//! METHOD "__noinline__test_peephole_reject_add" +//! PASS_AFTER "TypesResolving" +//! INST_NOT /Neg / +//! INST /NegOverflowAndZeroCheck / +//! PASS_BEFORE "Lowering" +//! INST_NOT /Neg / +//! INST /NegOverflowAndZeroCheck / + +function __noinline__test_peephole_success_shl(a) { + a = -a; + a <<= 2; + return a; +} + +function __noinline__test_peephole_success_and(a) { + a = -a; + a &= 2; + return a; +} + +function __noinline__test_peephole_reject_add(a) { + a = -a; + a += 2; + return a; +} + +var a1 = 10; +for (var i = 0; i < 100; ++i) { + a1 = __noinline__test_peephole_success_shl(a1); +} + +var a2 = 20; +for (var i = 0; i < 100; ++i) { + a2 = __noinline__test_peephole_success_and(a2); +} + +var a3 = 30; +for (var i = 0; i < 100; ++i) { + a3 = __noinline__test_peephole_reject_add(a3); +} -- Gitee