From 5fbe3a48c56e85b1f6fed43672d2043c19c15aa6 Mon Sep 17 00:00:00 2001 From: Ishin Pavel Date: Tue, 11 Apr 2023 14:00:40 +0300 Subject: [PATCH] Fix inlining typeof intrinsic Signed-off-by: Ishin Pavel --- .../intrinsics_type_resolving_ecmascript.cpp | 1 + tests/checked/typeof.js | 27 ++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/compiler/intrinsics_type_resolving_ecmascript.cpp b/compiler/intrinsics_type_resolving_ecmascript.cpp index 6443e5acf..9397639c3 100644 --- a/compiler/intrinsics_type_resolving_ecmascript.cpp +++ b/compiler/intrinsics_type_resolving_ecmascript.cpp @@ -113,6 +113,7 @@ bool TypesResolving::InlineTypeOf(IntrinsicInst *intrinsic) auto any_name = GetGraph()->CreateInstGetAnyTypeName(DataType::ANY, intrinsic->GetPc()); any_name->SetAnyType(type); intrinsic->InsertBefore(any_name); + intrinsic->ReplaceUsers(any_name); return true; } diff --git a/tests/checked/typeof.js b/tests/checked/typeof.js index e6de10509..8bc5d1d57 100644 --- a/tests/checked/typeof.js +++ b/tests/checked/typeof.js @@ -16,39 +16,48 @@ //! CHECKER Test check TypeOfDyn //! RUN options: "--no-async-jit=true --compiler-hotness-threshold=10 --compiler-regex _GLOBAL::test_type.*", entry: "_GLOBAL::func_main_0" //! METHOD "test_type_undefined" -//! PASS_AFTER "TypesResolving" +//! PASS_BEFORE "Scheduler" //! INST "AnyTypeCheck ECMASCRIPT_UNDEFINED_TYPE" //! INST_NEXT "GetAnyTypeName ECMASCRIPT_UNDEFINED_TYPE" +//! INST_NOT "Intrinsic.TypeofDyn" //! METHOD "test_type_string" -//! PASS_AFTER "TypesResolving" +//! PASS_BEFORE "Scheduler" //! INST "AnyTypeCheck ECMASCRIPT_STRING_TYPE" //! INST_NEXT "GetAnyTypeName ECMASCRIPT_STRING_TYPE" +//! INST_NOT "Intrinsic.TypeofDyn" //! METHOD "test_type_boolean" -//! PASS_AFTER "TypesResolving" +//! PASS_BEFORE "Scheduler" //! INST "AnyTypeCheck ECMASCRIPT_BOOLEAN_TYPE" //! INST_NEXT "GetAnyTypeName ECMASCRIPT_BOOLEAN_TYPE" +//! INST_NOT "Intrinsic.TypeofDyn" //! METHOD "test_type_int" -//! PASS_AFTER "TypesResolving" +//! PASS_BEFORE "Scheduler" //! INST "AnyTypeCheck ECMASCRIPT_DOUBLE_TYPE i" //! INST_NEXT "GetAnyTypeName ECMASCRIPT_DOUBLE_TYPE" +//! INST_NOT "Intrinsic.TypeofDyn" //! METHOD "test_type_double" -//! PASS_AFTER "TypesResolving" +//! PASS_BEFORE "Scheduler" //! INST "AnyTypeCheck ECMASCRIPT_DOUBLE_TYPE i" //! INST_NEXT "GetAnyTypeName ECMASCRIPT_DOUBLE_TYPE" +//! INST_NOT "Intrinsic.TypeofDyn" //! METHOD "test_type_bigint" -//! PASS_AFTER "TypesResolving" +//! PASS_BEFORE "Scheduler" //! INST "AnyTypeCheck ECMASCRIPT_BIGINT_TYPE" //! INST_NEXT "GetAnyTypeName ECMASCRIPT_BIGINT_TYPE" +//! INST_NOT "Intrinsic.TypeofDyn" //! METHOD "test_type_symbol" -//! PASS_AFTER "TypesResolving" +//! PASS_BEFORE "Scheduler" //! INST "AnyTypeCheck ECMASCRIPT_SYMBOL_TYPE" //! INST_NEXT "GetAnyTypeName ECMASCRIPT_SYMBOL_TYPE" +//! INST_NOT "Intrinsic.TypeofDyn" //! METHOD "test_type_function" -//! PASS_AFTER "TypesResolving" +//! PASS_BEFORE "Scheduler" //! INST "AnyTypeCheck ECMASCRIPT_CALLABLE_TYPE" //! INST_NEXT "GetAnyTypeName ECMASCRIPT_CALLABLE_TYPE" +//! INST_NOT "Intrinsic.TypeofDyn" //! METHOD "test_type_object" -//! PASS_AFTER "TypesResolving" +//! PASS_BEFORE "Scheduler" +//! INST "Intrinsic.TypeofDyn" //! INST_NOT "AnyTypeCheck ECMASCRIPT_HEAP_OBJECT_TYPE" //! INST_NOT "GetAnyTypeName" -- Gitee