Skip to content

Revert "[mlir][ExecutionEngine] Add support for global constructors and destructors" #78164

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 15, 2024

Conversation

c-rhodes
Copy link
Collaborator

this is causing test failures for me on AArch64 linux, hitting the following assert:

# | mlir-cpu-runner: /home/culrho01/llvm-project/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp:519: void llvm::RuntimeDyldELF::resolveAArch64Relocation(const SectionEntry &, uint64_t, uint64_t, uint32_t, int64_t): Assertion `isInt<33>(Result) && "overflow check failed for relocation"' failed.
# | PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
# | Stack dump:
# | 0.  Program arguments: /home/culrho01/llvm-project/build/bin/mlir-cpu-runner -march=aarch64 -mattr=+sve,+sme -e entry -entry-point-result=void -shared-libs=/home/culrho01/llvm-project/build/lib/libmlir_runner_utils.so,/home/culrho01/llvm-project/build/lib/libmlir_c_runner_utils.so,/home/culrho01/llvm-project/build/lib/libmlir_arm_sme_abi_stubs.so

Seeing the same in buildbot as well, e.g.
https://lab.llvm.org/buildbot/#/builders/179/builds/9094/steps/12/logs/FAIL__MLIR__sparse_codegen_dim_mlir

This seems related to #71963 which there's an open PR #71968 for, I've tested that patch but it doesn't fix the issue.

Reverts #78070

@llvmbot
Copy link
Member

llvmbot commented Jan 15, 2024

@llvm/pr-subscribers-mlir-execution-engine

@llvm/pr-subscribers-mlir

Author: Cullen Rhodes (c-rhodes)

Changes

this is causing test failures for me on AArch64 linux, hitting the following assert:

# | mlir-cpu-runner: /home/culrho01/llvm-project/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp:519: void llvm::RuntimeDyldELF::resolveAArch64Relocation(const SectionEntry &amp;, uint64_t, uint64_t, uint32_t, int64_t): Assertion `isInt&lt;33&gt;(Result) &amp;&amp; "overflow check failed for relocation"' failed.
# | PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
# | Stack dump:
# | 0.  Program arguments: /home/culrho01/llvm-project/build/bin/mlir-cpu-runner -march=aarch64 -mattr=+sve,+sme -e entry -entry-point-result=void -shared-libs=/home/culrho01/llvm-project/build/lib/libmlir_runner_utils.so,/home/culrho01/llvm-project/build/lib/libmlir_c_runner_utils.so,/home/culrho01/llvm-project/build/lib/libmlir_arm_sme_abi_stubs.so

Seeing the same in buildbot as well, e.g.
https://lab.llvm.org/buildbot/#/builders/179/builds/9094/steps/12/logs/FAIL__MLIR__sparse_codegen_dim_mlir

This seems related to #71963 which there's an open PR #71968 for, I've tested that patch but it doesn't fix the issue.

Reverts llvm/llvm-project#78070


Full diff: https://github.com/llvm/llvm-project/pull/78164.diff

2 Files Affected:

  • (modified) mlir/lib/ExecutionEngine/ExecutionEngine.cpp (-6)
  • (removed) mlir/test/mlir-cpu-runner/global-constructors.mlir (-32)
diff --git a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp
index d4ad2da045e2c4..267ec236d3fd59 100644
--- a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp
+++ b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp
@@ -219,9 +219,6 @@ ExecutionEngine::ExecutionEngine(bool enableObjectDump,
 }
 
 ExecutionEngine::~ExecutionEngine() {
-  // Execute the global destructors from the module being processed.
-  if (jit)
-    llvm::consumeError(jit->deinitialize(jit->getMainJITDylib()));
   // Run all dynamic library destroy callbacks to prepare for the shutdown.
   for (LibraryDestroyFn destroy : destroyFns)
     destroy();
@@ -399,9 +396,6 @@ ExecutionEngine::create(Operation *m, const ExecutionEngineOptions &options,
   };
   engine->registerSymbols(runtimeSymbolMap);
 
-  // Execute the global constructors from the module being processed.
-  cantFail(engine->jit->initialize(engine->jit->getMainJITDylib()));
-
   return std::move(engine);
 }
 
diff --git a/mlir/test/mlir-cpu-runner/global-constructors.mlir b/mlir/test/mlir-cpu-runner/global-constructors.mlir
deleted file mode 100644
index 3ebcaeccc83e32..00000000000000
--- a/mlir/test/mlir-cpu-runner/global-constructors.mlir
+++ /dev/null
@@ -1,32 +0,0 @@
-// RUN: mlir-cpu-runner %s -e entry -entry-point-result=void  \
-// RUN: -shared-libs=%mlir_c_runner_utils | \
-// RUN: FileCheck %s
-
-// Test that the `ctor` executes before `entry` and that `dtor` executes last.
-module {
-  llvm.func @printNewline()
-  llvm.func @printI64(i64)
-  llvm.mlir.global_ctors {ctors = [@ctor], priorities = [0 : i32]}
-  llvm.mlir.global_dtors {dtors = [@dtor], priorities = [0 : i32]}
-  llvm.func @ctor() {
-    %0 = llvm.mlir.constant(1 : i64) : i64
-    llvm.call @printI64(%0) : (i64) -> ()
-    llvm.call @printNewline() : () -> ()
-    // CHECK: 1
-    llvm.return
-  }
-  llvm.func @entry() {
-    %0 = llvm.mlir.constant(2 : i64) : i64
-    llvm.call @printI64(%0) : (i64) -> ()
-    llvm.call @printNewline() : () -> ()
-    // CHECK: 2
-    llvm.return
-  }
-  llvm.func @dtor() {
-    %0 = llvm.mlir.constant(3 : i64) : i64
-    llvm.call @printI64(%0) : (i64) -> ()
-    llvm.call @printNewline() : () -> ()
-    // CHECK: 3
-    llvm.return
-  }
-}

@c-rhodes c-rhodes merged commit 3295b88 into main Jan 15, 2024
@c-rhodes c-rhodes deleted the revert-78070-execution-engine branch January 15, 2024 14:21
justinfargnoli pushed a commit to justinfargnoli/llvm-project that referenced this pull request Jan 28, 2024
…nd destructors" (llvm#78164)

this is causing test failures on AArch64 linux, hitting the
following assert:

# | mlir-cpu-runner: /home/culrho01/llvm-project/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp:519: void llvm::RuntimeDyldELF::resolveAArch64Relocation(const SectionEntry &, uint64_t, uint64_t, uint32_t, int64_t): Assertion `isInt<33>(Result) && "overflow check failed for relocation"' failed.

Seeing the same in buildbot as well, e.g.

https://lab.llvm.org/buildbot/#/builders/179/builds/9094/steps/12/logs/FAIL__MLIR__sparse_codegen_dim_mlir

Reverts llvm#78070
@gmarkall
Copy link
Contributor

gmarkall commented Feb 2, 2024

his seems related to #71963 which there's an open PR #71968 for, I've tested that patch but it doesn't fix the issue.

Just saw this - when you tested with that patch, did you do something to ensure that SectionMemoryManagers are constructed with ReserveAlloc = true? The PR #71968 doesn't change the default behaviour, so if that PR was only applied with no other changes, then I would not expect to see any difference.

@c-rhodes
Copy link
Collaborator Author

c-rhodes commented Feb 2, 2024

his seems related to #71963 which there's an open PR #71968 for, I've tested that patch but it doesn't fix the issue.

Just saw this - when you tested with that patch, did you do something to ensure that SectionMemoryManagers are constructed with ReserveAlloc = true? The PR #71968 doesn't change the default behaviour, so if that PR was only applied with no other changes, then I would not expect to see any difference.

No I didn't, just cherry-picked on top of the patch this reverts. That could explain it. I doubt I'll look into it as it's not immediately obvious how to ensure that and I can't dig into it at the moment, but could be helpful if someone wants to, thanks for replying.

@gmarkall
Copy link
Contributor

gmarkall commented Feb 2, 2024

I doubt I'll look into it as it's not immediately obvious how to ensure that and I can't dig into it at the moment, but could be helpful if someone wants to, thanks for replying.

Understood. If you (or someone else) does want to try this, then after applying the changes in PR #71968, in https://github.com/llvm/llvm-project/pull/71968/files#diff-e576acec9556f141c95c5c7cb5f7f0caaa71b76ab65f67f95d88a169f933d720R110, change ReserveAlloc = false to ReserveAlloc = true - this just sets the default to reserve allocation space, and running your test again (perhaps repeatedly) should show whether it resolves the issue in your test.

I would also mention that the issue that the test shows up is a latent bug, so just removing support for global constructors and destructors doesn't fix the issue - it just removes a scenario that happens to trigger it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants