From 35e5b0613d0dbda57cba8f2495fffce73b1f1c1a Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Fri, 27 Oct 2023 22:51:09 +0200 Subject: [PATCH] [K/N] Migrate filecheck test `redundant_safepoints` to new infra ^KT-62157 --- ...LFirBlackBoxCodegenBasedTestGenerated.java | 6 +++ ...rsedBlackBoxCodegenBasedTestGenerated.java | 6 +++ .../box/fileCheck/redundant_safepoints.kt | 54 +++++++++++++++++++ .../backend.native/tests/build.gradle | 20 ------- .../tests/filecheck/redundant_safepoints.kt | 49 ----------------- .../FirNativeCodegenBoxTestGenerated.java | 6 +++ .../FirNativeCodegenBoxTestNoPLGenerated.java | 6 +++ .../NativeCodegenBoxTestGenerated.java | 6 +++ .../NativeCodegenBoxTestNoPLGenerated.java | 6 +++ .../runner/AbstractLocalProcessRunner.kt | 6 +++ 10 files changed, 96 insertions(+), 69 deletions(-) create mode 100644 compiler/testData/codegen/box/fileCheck/redundant_safepoints.kt delete mode 100644 kotlin-native/backend.native/tests/filecheck/redundant_safepoints.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java index 8be1e699bd9..8826613c070 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java @@ -19480,6 +19480,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/fileCheck/no_frame_on_constant_object_access.kt"); } + @Test + @TestMetadata("redundant_safepoints.kt") + public void testRedundant_safepoints() throws Exception { + runTest("compiler/testData/codegen/box/fileCheck/redundant_safepoints.kt"); + } + @Test @TestMetadata("replace_invoke_with_call.kt") public void testReplace_invoke_with_call() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java index 30f9462b9a6..e1caabdfe43 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java @@ -19480,6 +19480,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/fileCheck/no_frame_on_constant_object_access.kt"); } + @Test + @TestMetadata("redundant_safepoints.kt") + public void testRedundant_safepoints() throws Exception { + runTest("compiler/testData/codegen/box/fileCheck/redundant_safepoints.kt"); + } + @Test @TestMetadata("replace_invoke_with_call.kt") public void testReplace_invoke_with_call() throws Exception { diff --git a/compiler/testData/codegen/box/fileCheck/redundant_safepoints.kt b/compiler/testData/codegen/box/fileCheck/redundant_safepoints.kt new file mode 100644 index 00000000000..6245ba43843 --- /dev/null +++ b/compiler/testData/codegen/box/fileCheck/redundant_safepoints.kt @@ -0,0 +1,54 @@ +// TARGET_BACKEND: NATIVE +// FILECHECK_STAGE: RemoveRedundantSafepoints + +// This test checks: +// - there is only one safepoint per function +// - safepoint function is inlined in OPT mode, unless SMALLBINARY is needed (for ex, watchos_arm32) +// Might fail under -Xbinary=gc=stwms and -Xbinary=gc=noop. In this case, just add ignore clause. + +@file:Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") +import kotlin.native.Retain + +class C + +fun f(): Any { + return C() +} + +fun g() = f() + +// CHECK-LABEL: define %struct.ObjHeader* @"kfun:#h(kotlin.Boolean){}kotlin.Any" +@Retain +fun h(cond: Boolean): Any { + // CHECK-SMALLBINARY: {{call .*Kotlin_mm_safePointFunctionPrologue}} + // CHECK-BIGBINARY-OPT: _ZN12_GLOBAL__N_115safePointActionE + + // CHECK-SMALLBINARY-NOT: _ZN12_GLOBAL__N_115safePointActionE + // CHECK-BIGBINARY-OPT-NOT: {{call .*Kotlin_mm_safePointFunctionPrologue}} + + // CHECK-SMALLBINARY-NOT: {{call .*Kotlin_mm_safePointFunctionPrologue}} + // CHECK-BIGBINARY-OPT-NOT: _ZN12_GLOBAL__N_115safePointActionE + if (cond) { + return listOf(C(), C()) + } else { + return listOf(C(), C(), C()) + } +// CHECK-LABEL: ret +} + +// CHECK-LABEL: define %struct.ObjHeader* @"kfun:#box(){}kotlin.String" +@Retain +fun box(): String { + // CHECK-SMALLBINARY: {{call .*Kotlin_mm_safePointFunctionPrologue}} + // CHECK-BIGBINARY-OPT: _ZN12_GLOBAL__N_115safePointActionE + + // CHECK-SMALLBINARY-NOT: _ZN12_GLOBAL__N_115safePointActionE + // CHECK-BIGBINARY-OPT-NOT: {{call .*Kotlin_mm_safePointFunctionPrologue}} + + // CHECK-SMALLBINARY-NOT: {{call .*Kotlin_mm_safePointFunctionPrologue}} + // CHECK-BIGBINARY-OPT-NOT: _ZN12_GLOBAL__N_115safePointActionE + println(g()) + println(h(true)) + return "OK" +// CHECK-LABEL: ret +} diff --git a/kotlin-native/backend.native/tests/build.gradle b/kotlin-native/backend.native/tests/build.gradle index b3eb2400953..d094e231aa4 100644 --- a/kotlin-native/backend.native/tests/build.gradle +++ b/kotlin-native/backend.native/tests/build.gradle @@ -2975,26 +2975,6 @@ Task fileCheckTest(String name, Closure configureClosure) { } } -if (HostManager.@Companion.hostIsMac) { - fileCheckTest("filecheck_redundant_safepoints_removal_smallbinary") { - enabled = project.globalTestArgs.contains("-opt") - annotatedSource = project.file('filecheck/redundant_safepoints.kt') - targetName = "watchos_arm32" - checkPrefix = "CHECK-SMALLBINARY" - extraOpts = ["-opt"] - phaseToCheck = "RemoveRedundantSafepoints" - } - -} - -fileCheckTest("filecheck_redundant_safepoints_removal") { - enabled = !isNoopGC && !isSTWMSGC && - project.globalTestArgs.contains("-opt") && - !PlatformInfo.needSmallBinary(project) - annotatedSource = project.file('filecheck/redundant_safepoints.kt') - phaseToCheck = "RemoveRedundantSafepoints" -} - createInterop("filecheck_signext_zeroext_interop_input") { it.defFile 'filecheck/signext_zeroext_interop_input.def' } diff --git a/kotlin-native/backend.native/tests/filecheck/redundant_safepoints.kt b/kotlin-native/backend.native/tests/filecheck/redundant_safepoints.kt deleted file mode 100644 index ee102085597..00000000000 --- a/kotlin-native/backend.native/tests/filecheck/redundant_safepoints.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ -@file:Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") -import kotlin.native.Retain - -class C - -fun f(): Any { - return C() -} - -fun g() = f() - -// CHECK-LABEL: define %struct.ObjHeader* @"kfun:#h(kotlin.Boolean){}kotlin.Any" -@Retain -fun h(cond: Boolean): Any { - // CHECK: _ZN12_GLOBAL__N_115safePointActionE - // CHECK-SMALLBINARY: {{call .*Kotlin_mm_safePointFunctionPrologue}} - // CHECK-NOT: _ZN12_GLOBAL__N_115safePointActionE - // CHECK-NOT: {{call .*Kotlin_mm_safePointFunctionPrologue}} - // CHECK: br - // CHECK-SMALLBINARY: br - if (cond) { - // CHECK-NOT: _ZN12_GLOBAL__N_115safePointActionE - // CHECK-NOT: {{call .*Kotlin_mm_safePointFunctionPrologue}} - // CHECK: br - // CHECK-SMALLBINARY: br - return listOf(C(), C()) - } else { - // CHECK-NOT: _ZN12_GLOBAL__N_115safePointActionE - // CHECK-NOT: {{call .*Kotlin_mm_safePointFunctionPrologue}} - return listOf(C(), C(), C()) - } -// CHECK: } -} - -// CHECK-LABEL: define void @"kfun:#main(){}"() -@Retain -fun main() { - // CHECK: _ZN12_GLOBAL__N_115safePointActionE - // CHECK-SMALLBINARY: {{call .*Kotlin_mm_safePointFunctionPrologue}} - // CHECK-NOT: _ZN12_GLOBAL__N_115safePointActionE - // CHECK-NOT: {{call .*Kotlin_mm_safePointFunctionPrologue}} - println(g()) - println(h(true)) -// CHECK: } -} diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java index 1271277623f..9bfbfa82468 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java @@ -15827,6 +15827,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/fileCheck/no_frame_on_constant_object_access.kt"); } + @Test + @TestMetadata("redundant_safepoints.kt") + public void testRedundant_safepoints() throws Exception { + runTest("compiler/testData/codegen/box/fileCheck/redundant_safepoints.kt"); + } + @Test @TestMetadata("replace_invoke_with_call.kt") public void testReplace_invoke_with_call() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java index 735663685ec..2a9cc52d2f5 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java @@ -16195,6 +16195,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/fileCheck/no_frame_on_constant_object_access.kt"); } + @Test + @TestMetadata("redundant_safepoints.kt") + public void testRedundant_safepoints() throws Exception { + runTest("compiler/testData/codegen/box/fileCheck/redundant_safepoints.kt"); + } + @Test @TestMetadata("replace_invoke_with_call.kt") public void testReplace_invoke_with_call() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java index 9e18bf44f01..9c5e8c1e939 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java @@ -15459,6 +15459,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/fileCheck/no_frame_on_constant_object_access.kt"); } + @Test + @TestMetadata("redundant_safepoints.kt") + public void testRedundant_safepoints() throws Exception { + runTest("compiler/testData/codegen/box/fileCheck/redundant_safepoints.kt"); + } + @Test @TestMetadata("replace_invoke_with_call.kt") public void testReplace_invoke_with_call() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java index fa88b9ee308..aa0e7d3e8d8 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java @@ -15828,6 +15828,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT runTest("compiler/testData/codegen/box/fileCheck/no_frame_on_constant_object_access.kt"); } + @Test + @TestMetadata("redundant_safepoints.kt") + public void testRedundant_safepoints() throws Exception { + runTest("compiler/testData/codegen/box/fileCheck/redundant_safepoints.kt"); + } + @Test @TestMetadata("replace_invoke_with_call.kt") public void testReplace_invoke_with_call() throws Exception { diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/AbstractLocalProcessRunner.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/AbstractLocalProcessRunner.kt index 9eff608dc63..66b741a3ae9 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/AbstractLocalProcessRunner.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/AbstractLocalProcessRunner.kt @@ -10,6 +10,7 @@ import com.intellij.openapi.util.text.StringUtilRt.convertLineSeparators import kotlinx.coroutines.* import org.jetbrains.kotlin.konan.target.Architecture import org.jetbrains.kotlin.konan.target.KonanTarget +import org.jetbrains.kotlin.konan.target.needSmallBinary import org.jetbrains.kotlin.konan.test.blackbox.support.TestCaseId import org.jetbrains.kotlin.konan.test.blackbox.support.runner.AbstractRunner.AbstractRun import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck.ExecutionTimeout @@ -170,6 +171,11 @@ internal abstract class LocalResultHandler( if (testTarget.family.isAppleFamily) { add("CHECK-APPLE") } + if (testTarget.needSmallBinary()) { + add("CHECK-SMALLBINARY") + } else { + add("CHECK-BIGBINARY") + } } val optimizationMode = check.settings.get().name val checkPrefixesWithOptMode = checkPrefixes.map { "$it-$optimizationMode" }