<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/98935>98935</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Pass --remove-dead-values crashes when calling functions.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          AzizZayed
      </td>
    </tr>
</table>

<pre>
    I'm trying to remove dead values in the following code (as an example) with the `--remove-dead-values` pass.

```mlir
func.func private @printF64(f64)
func.func private @printNewline()
func.func @main() -> f32 {
    %cst = arith.constant 1.500000e+00 : f64
    %cst_0 = arith.constant 1.500000e+00 : f64
 %cst_1 = arith.constant 2.000000e+00 : f64
    %cst_2 = arith.constant 2.000000e+00 : f64
    %cst_3 = arith.constant 3.500000e+00 : f64
 %0 = arith.addf %cst_1, %cst : f64
    call @printF64(%cst_3) : (f64) -> ()
    call @printNewline() : () -> ()
    %cst_4 = arith.constant 2.000000e+00 : f64
    %cst_5 = arith.constant 1.500000e+00 : f64
 %1 = arith.subf %cst_4, %cst_5 : f64
    %2 = arith.subf %cst_1, %cst : f64
    call @printF64(%1) : (f64) -> ()
    call @printNewline() : () -> ()
    %cst_6 = arith.constant 0.000000e+00 : f32
    %cst_7 = arith.constant 0.000000e+00 : f32
    return %cst_6 : f32
}
```

With this command: 
```bash
~/dev/lib/llvm/build/bin/mlir-opt --mlir-disable-threading --remove-dead-values arith_add_sub.mlir
```

And I get the following stack dump after it crashes:

```bash
0.      Program arguments: /Users/aziz/dev/lib/llvm/build/bin/mlir-opt --mlir-disable-threading --remove-dead-values res/primitive/arith_add_sub_extracted.mlir
 #0 0x000000010068de6c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1002f5e6c)
 #1 0x000000010068e490 PrintStackTraceSignalHandler(void*) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1002f6490)
 #2 0x000000010068bf64 llvm::sys::RunSignalHandlers() (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1002f3f64)
 #3 0x000000010068fde8 SignalHandler(int) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1002f7de8)
 #4 0x0000000183df7584 (/usr/lib/system/libsystem_platform.dylib+0x180477584)
 #5 0x0000000183dc6c20 (/usr/lib/system/libsystem_pthread.dylib+0x180446c20)
 #6 0x0000000183cd3a30 (/usr/lib/system/libsystem_c.dylib+0x180353a30)
 #7 0x0000000183cd2d20 (/usr/lib/system/libsystem_c.dylib+0x180352d20)
 #8 0x00000001006e63d8 llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Block, true, false, void, false>, false, false>::operator*() const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x10034e3d8)
 #9 0x00000001006e6344 llvm::simple_ilist<mlir::Block>::front() (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x10034e344)
#10 0x000000010069f634 mlir::Region::front() (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100307634)
#11 0x000000010a7defc8 mlir::function_interface_impl::eraseFunctionArguments(mlir::FunctionOpInterface, llvm::BitVector const&, mlir::Type) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x10a446fc8)
#12 0x0000000105e47b4c mlir::FunctionOpInterface::eraseArguments(llvm::BitVector const&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105aafb4c)
#13 0x00000001061faa10 (anonymous namespace)::cleanFuncOp(mlir::FunctionOpInterface, mlir::Operation*, mlir::dataflow::RunLivenessAnalysis&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e62a10)
#14 0x00000001061fa79c (anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1::operator()(mlir::Operation*) const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e6279c)
#15 0x00000001061fa72c void llvm::function_ref<void (mlir::Operation*)>::callback_fn<(anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1>(long, mlir::Operation*) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e6272c)
#16 0x0000000100809d28 llvm::function_ref<void (mlir::Operation*)>::operator()(mlir::Operation*) const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100471d28)
#17 0x0000000100809cac void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100471cac)
#18 0x0000000100809c58 void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100471c58)
#19 0x00000001061fa688 std::__1::enable_if<llvm::is_one_of<mlir::Operation*, mlir::Operation*, mlir::Region*, mlir::Block*>::value, void>::type mlir::detail::walk<(mlir::WalkOrder)1, mlir::ForwardIterator, (anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1, mlir::Operation*, void>(mlir::Operation*, (anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1&&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e62688)
#20 0x00000001061fa120 std::__1::enable_if<llvm::function_traits<__decay((anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1)>::num_args == 1, void>::type mlir::Operation::walk<(mlir::WalkOrder)1, mlir::ForwardIterator, (anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1, void>((anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1&&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e62120)
#21 0x00000001061f9f64 (anonymous namespace)::RemoveDeadValues::runOnOperation() (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e61f64)
#22 0x0000000106150884 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_7::operator()() const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105db8884)
#23 0x0000000106150808 void llvm::function_ref<void ()>::callback_fn<mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_7>(long) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105db8808)
#24 0x000000010062fe9c llvm::function_ref<void ()>::operator()() const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100297e9c)
#25 0x0000000106142fb0 void mlir::MLIRContext::executeAction<mlir::PassExecutionAction, mlir::Pass&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, mlir::Pass&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105daafb0)
#26 0x0000000106142cbc mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105daacbc)
#27 0x0000000106143438 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105dab438)
#28 0x000000010614588c mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105dad88c)
#29 0x0000000106145640 mlir::PassManager::run(mlir::Operation*) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105dad640)
#30 0x000000010613435c performActions(llvm::raw_ostream&, std::__1::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d9c35c)
#31 0x0000000106133ec8 processBuffer(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPool*) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d9bec8)
#32 0x0000000106133cac mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_2::operator()(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d9bcac)
#33 0x0000000106133c34 mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_2>(long, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d9bc34)
#34 0x00000001062fc150 llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::operator()(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105f64150)
#35 0x00000001062fbc40 mlir::splitAndProcessBuffer(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105f63c40)
#36 0x0000000106125d18 mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d8dd18)
#37 0x0000000106125fdc mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d8dfdc)
#38 0x0000000106126260 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d8e260)
#39 0x000000010039a2a8 main (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1000022a8)
#40 0x0000000183a3e0e0 
[1]    39069 abort ~/dev/lib/llvm/build/bin/mlir-opt --mlir-disable-threading 
```

Can anyone provide insight on what is going on here? Thank you.

Extra info:
LLVM version: 18.1.4
LLVM build: DEBUG build with assertions.
System: Apple M1 Pro
OS: MacOS 14.5

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkW0tv4zgS_jXKhYghkZIsHXJwXrsBOpsg6ZkB9mJQZMnmtkxqSSqJ-7C_fUHJLyq2k-5RZnqmg8APPqu--qpYJGVqjJhJgLMgOQ-SyxPa2LnSZ5Ov4uu_6RL4SaH48uwmwOMFsnop5AxZhTQs1BMgDpSjJ1o1YJCQyM4Blaqq1LNrxhQHFOCMGkQlghe6qCsIcI6ehZ23bYM0PD3thjp1Q512QwVpiGpqzCgIL4NwsnpNw-5_UQndFZWNZCP3gmotnqgFFMRhrYW012kc4Kx0r_lbbf8Fz5WQEOBsT-MgDhdUyK4SnQbkCpUEo2B83rVECKEAJ8xYFJBLRLWw8xFT0lgqLYpGSej-IMDnYYgCMkFOpl7PafjNfVcdo30d8Sh8z6T4d_Ql-_qSNwTe1ZJyXm6UCPDFFsPehIxWVc-qaxmcQVz7jaE78-za8dUInq3XvQ92Xc0U_w6kku8x7a5ZTVNskIq3SLUDv54SH-j5HRhHfxi-6T6Mwj34Evyq7_h7-mqwjZa70-80CMaXvYCzG4V-60KXMIipxYJK3uroty-omXdF_wvwNYenAF9XonCv1dMiwNdFIyru3l1guXbx7FTVFp2eth-5MLSo4NTONVDuAum-GNnpPKWcT01TjLZBca_YE8nRDZqB7YVoYyn7gnizqBEtLWgkLGKamjmYgEz2ht-tduEItX_3Ws00XSCqZ80CpDWd3a9_MaBNgK_pV_H1A4HQ4CaptVgIK57ATbgLzRRerKbMAt8BCQWYhCh86XgSRmGYZhxShlrByCQgE7M03Yd7R-xHB9RnTZnj9raRps9TZawGughw6pxMSNtS31H9uxFwvH2JwhCXCaRs6zMBJlFPaojzEPVEfBQzSat_Uskr0AHOnpTgAZ4MKVca56EnF-7JVZRpvA_Nh0Z64pl1rBhIMLK76DvBSE-wkkOG-ggNbLUxh8wTIt4RIiO8HCdZvJqtMXozvFkaC4vua_d5WlfUlkovRnzZtnFTZGE8diN4UyT-FCxlOHznFJ2D9WaI3QDeDKk3A-OEknfOwPyxSeK6emOPe2Nj_l7pX43tunpjZz4DICU826GmqISxU2FBU6t0QC76VRwsFVVXIhWHqaqtUNIE5KKNKG3FeaXYFxcArG7AvZe0Mu2HzvvWBeTKq9wUtoOoeiWEc9bWLdo1bSBekhgI93mZv4Im9rxWuJR92sKwR9u12KVWzn8G9GMnarzlt4t7vXCdlymJ0VaiB5gJJT9MnnCcEl8eLxDTMYeSZTvyuN2DY8lUSAu6pAymDsyuEjQ1cL1qMdksmzjb9l_X3tU36wEcX7a2ORf2V2BW6Y4jq-VnO8DnZQ2DAUDjOC1Z5gHgRfwE4nERM3Rcga3yu0of12kgDRJKyyJmngbe0pBGJaVRG3SoVHK5UI1Bki7A1C32eSciq4BKp9td_R57bRvctb7tOOqce7eGU0vLSj1vFshP4gkkGDORtFoaYQbFAVJMo9DDIe7jMM7ZWzg8tInYJVD-a7dn7_KhRt7JHU2zTfsAx9OoH-Xa6l0UfZAGDX9O8XHuEyB5pThmbbze8bONI2soA3LR1h6TeRMV3caooOzLtJQBufgYOK-c-yg5O0a1AYkzxj5-qReTszDnOBsCuj-HIWE8jjj2g9y4ryGjK4bs-O9OfvBMqy_eSnmt9DPV_GaTXlwdUefid4LnseA3Wn2509zlt0Mtg_E4YtSnQPYKoCT7uQFKfAbl_RiTZhkylncyTNdBEaTb605F6SegZqokTFXpQXZ4KTlcs8qP-sWrtHWycb12U71JW9eldlnDcYN6yO8iG_kT9s3dnkt9QGg8Cstat2NE-xip0qHX8jTz6IbDPt0iHL6bbhuXspoK6zY40ykHRpetuB-Bxzbmy2YxpXpmUEAuA3KJordIuB32B-fhlm1_EU5F2MsPcdTjVF6m8XBoDSZ3tHv04-TGvtxJmGXxgSh2V39Wd_U9NWbCad2uQyt5PUK5Bt8QdNcJ_C2VdAYtyQqlKvfeyPbaja8ODLcGHR9IgYZOh3mRZZmPF3mFV5i9Mx0-nPj-BfDeZtFDkdGBG_qBOfbPL3AJOfs2XD-aEiHOx-DvkHBvhxTjsgj76d3tp5uHCyUtvNjV4vICrLEwYV10vvDtedXWCiVX9Z4FO4OnK5u8Ex0vLZxoTZcP4GdMNw-_SGFfZYDr2YazO6Vl4QfPtI8gK9gPGoSGA4EVPo3GPRBITLJvBuFe1LC6XdzV2zXd6JYOjkqfLzfSWN2eXa3OaQ832MlO1rLfUw3S3shSrY-4Btyhc1rExI86WQ_4JMtYT941AhuYqTFgjubGR2AcTheeZT6J8r4uaRy-ocvRo4PBBE1jz-VJLwcnMUkYqkGXSi-6oGfeuEV8nbCbOdXAp7X1bygeVaMZ3M7cvvnAQfBueO6b77YS-q62t1TICyVLMfuAg1eeM5J4liS9hJIQYBmqtWJgzHlTlu2d3Lfh00jx3wZe4XMLC6WX6zH3deRQ0qayUw4VWDjc2a3CV-9Hb7fdpaAVMOu24Mbq5ap-O8_n9v7tvg0_QzIzL8A_sye4DzyjbL9CfwkD7Af2nfTepoD4QH71Zyp5GPyBtwF50TvSI-QVSbybtk9qJhitHsA0lT2cwR7q8OPi-uYG5ud1j917hh_UegP6g3_TS_zrMVyyKAn_lrz_KQNgmcZR4udvSc_gBfMSTVNXwk4kv-8lLD8GWn8LOh5tsd2pde9DuX6ZEtbL5Hubd5zwKPtZ86WhAmzGeeRnpeM-yiU_nJWuNuVsTrvtd-9W8NFqIWcPUB4pPg7IgIqW3M-sertxnOI0HETRP0ojwKnvIP4DZCSnmGZoQYUc6EgyDDGmHlvi0HtUkBIIIVw_gp2cR0FyiRBCJA_THNFCaYsGegz7yPPVF1QiKpdKgtvGPgkOSEgjZnOLlETPc2qRMGim3DBKojloCMg1-jyn8gtaqsb7pcvVi9UUCVmqYP0M9qdPv96iJ9CmO1BCUTaKRvFOXacLmaDLq_Nf_tF97X5nQ40B3Z45rCZ57J6hJBM0qesK0G2E7rXq6u4eXfktZXePKIpHSVd6ws8Iz0lOT-AsGuMoTEmKk5P5WZEkWUgxJmUR0SwtkjLP0jxlSRJBQkt8Is5wiONwHCXROCJxMqI8i-N8XEA5pjQu0iAOYUFFNXI2GSk9OxHGNHCWZzlJTipaQGXaXyZhLOEZtZUBxkFyeaLPXJ_TopmZIA4rYazZjmKFreDsnhqz_6Hx1UPu6HkOsv0Jg7PMeuk0o5NGV2dza-v23gpfB_h6Juy8KUZMLbYMagWotfoPMBvg61Y6x_ZO-qcz_P8AAAD__87D77E">