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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR] AbstractDenseAnalysis implicitly depends on DeadCodeAnalysis
        </td>
    </tr>

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

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

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

<pre>
    In my $dayjob, I wrote a toy analysis to learn how to use the dense dataflow analysis APIs, but was very confused why the `DataFlowSolver` was not initializing any of the lattice values for my toy analysis, even when all lattice values are set to top/overdefined.

```c++
    mlir::func::FuncOp func;  // some function
    mlir::DataFlowSolver solver;
 solver.load<MyDenseAnalysis>();
    if (solver.initializeAndRun(func).failed()) {
      llvm::dbgs() << "failed\n"; // assume this doesn't happen
    }
    for (mlir::Block &b : func.getCallableRegion()->getBlocks()) {
      if (auto *state = solver.lookupState<MyLatticeValue>(&b)) {
 b.printAsOperand(llvm::dbgs());
        llvm::dbgs() << ": " << *solver.lookupState<MyLatticeValue>(&b) << "\n";
      }
    }
 // nothing is printed!
```

The problem is that similar to #58922, AbstractDenseAnalysis seems to depend on DeadCodeAnalysis, but this is not documented anywhere: https://github.com/llvm/llvm-project/blob/279cc3384e4082aefbea4d1a3762f16547f7a799/mlir/lib/Analysis/DataFlow/DeadCodeAnalysis.cpp#L109

One workaround is to also load the `DeadCodeAnalysis`, as suggested in the linked issue.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUld9vozgQx_8a52W0iAyEHw95oMkiVdpVT93VvRs8gLfGRtgkyv31J5u0SXtd6VZCCbY845nPfGfg1speE-3Z7oHtjhu-uMHM-5_UDloudtMYcdk_ahgvwDAV_PLLNAwP8Ajn2TgCDs5cgGuuLlZacAYU8VnDYM5-sVgCNxAI0pZAcMc7Zc6389Vfj9a7axYHZ27hRPMFWqO7xZKA83AJ1iyLj9zxWpnzD6NONLMsDse1cSC1dJIr-Y_UPXB9AdMFI8Wdky3BiauFLHRm9kncR-svphNpOA-kgSv10YbPBJacT8SZiWFtTjQL6qQmEbH4yOLq-pvF69MyfPBP2AUAGJWcWVKxpOoW3a5v9aLbpwnWjQcAhjXDGqwZKWw6afRnHt4zALuiSF5vW9eRMlyw5PD9cvTMq9dck68MC4bl7TwAyA4YFlfDN5BUafG8aIZFCBHLqONSkbg6wBJYfucEQKnTuIYomt6ux4AlB5YcgCFerXcHzRB9xteEubXL6PUhLQhDVjPMHQx8muguf5YfbwtfRYbFjcmDMu0LMMwaYEkV8EU9uQNXijeKnqn3MENEX1jytScXLOxvc1mR8MUZYFhZxx0BS443uuZlmX747QD526qYv71gXhlnzX9cN9E0S-0q-zTRzLVH-Rm0j_X5H3B91gzxtlP9aaT3zt5qdB_DuwrcFtcqauMG33rSQsjR62T7oS3ue-XnQDDNplE0ehs3cAdWjlLxGQL0ZFeUiL45q8a6mbfunZLBEo1h0giaSAswGo7ExcGIm9qvIyVIS65zQph2GcnH56fEeaCZPLvBucl6viGbXrphaaLWjAzrQH79-zLN5he1jmHdKD8Ba8zLtk2SIqU0LpBT1xBPxZYneYbdNtuleZfzvCwZ1kGtWCvp7W4h1q_97F8_JBC108Qw-baNy3t2T5rgbOYXPptFC1gHLlfWgO_6t1n5kUYWeyDcgl36nqxHIPU6JKV-8StrF4o2Yp-IMin5hvbbLI93uyzJ8s2w77BtcNsVRYt5tk1E0XVtnjcZtmWSN02-kXuMEbcYl3GCWZxFIhNl2Yk07dqdEEXD0phGLlXkYUZm7jfhyv2uTLfpRvGGlA2fIERN5zWeoMfjZt6HAjRLb1kaK2mdvXlx0qnw7fr-7fGZ7Y6_kYwcJyVb6dTlKhr7mWo2y6z2f6yHEKsvZ8jl3wAAAP__85JEQQ">