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

    <tr>
        <th>Summary</th>
        <td>
            [DebugInfo][SimpleLoopUnswitch] Missing debug location updates (Part 1)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            debuginfo,
            llvm:transforms
      </td>
    </tr>

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

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

<pre>
    [**SimpleLoopUnswitch-L1248**](https://github.com/llvm/llvm-project/blob/298e292a76289d93f7c1a80c26e354830c6080e4/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp#L1248C1-L1253C52)

```cpp
-> auto *MergePN =
          PHINode::Create(I.getType(), /*NumReservedValues*/ 2, ".us-phi");
 MergePN->insertBefore(MergeBB->getFirstInsertionPt());
 I.replaceAllUsesWith(MergePN);
      MergePN->addIncoming(&I, ExitBB);
 MergePN->addIncoming(&ClonedI, ClonedExitBB);
```

[**SimpleLoopUnswitch-L1310**](https://github.com/llvm/llvm-project/blob/298e292a76289d93f7c1a80c26e354830c6080e4/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp#L1310)

```cpp
 ClonedTerminator->eraseFromParent();
-> BranchInst::Create(ClonedSuccBB, ClonedParentBB);
```

[**SimpleLoopUnswitch-L2339**](https://github.com/llvm/llvm-project/blob/298e292a76289d93f7c1a80c26e354830c6080e4/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp#L2339)

This instruction `TI` is moved out of the loop (i.e., the hoisted conditional instruction in LoopUnswitch) without dropping its debug location.

```cpp
    TI.moveBefore(*SplitBB, SplitBB->end());
```

[**SimpleLoopUnswitch-L2352**](https://github.com/llvm/llvm-project/blob/298e292a76289d93f7c1a80c26e354830c6080e4/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp#L2352)

```cpp
 Value *Cond = skipTrivialSelect(BI->getCondition());
      if (InsertFreeze)
->      Cond = new FreezeInst(Cond, Cond->getName() + ".fr", BI->getIterator());
 BI->setCondition(Cond);
```

[**SimpleLoopUnswitch-L2440**](https://github.com/llvm/llvm-project/blob/298e292a76289d93f7c1a80c26e354830c6080e4/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp#L2440)

```cpp
 // After MSSAU update, remove the cloned terminator instruction NewTI.
 ParentBB->getTerminator()->eraseFromParent();

    // Create a new unconditional branch to the continuing block (as opposed to
    // the one cloned).
->  BranchInst::Create(RetainedSuccBB, ParentBB);
```

[**SimpleLoopUnswitch-L2709**](https://github.com/llvm/llvm-project/blob/298e292a76289d93f7c1a80c26e354830c6080e4/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp#L2709)

```cpp
-> PHINode *Phi =
        PHINode::Create(SI->getType(), 2, "unswitched.select", SI->getIterator());
 Phi->addIncoming(SI->getTrueValue(), ThenBB);
 Phi->addIncoming(SI->getFalseValue(), HeadBB);
 SI->replaceAllUsesWith(Phi);
 SI->eraseFromParent();
```

godbolt: https://godbolt.org/z/dGGs89eKT (Note that the hoisted br instruction with `!dbg !8` in `%entry` is corresponding to L2339 and other instructions without `!dbg` are corresponding to other Lxxx)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUV11zmzgU_TXyiyYMFsaGBz_4o7TMth5P7e4-C3QN2mKJkUSS9tfvXIEdO06b7nZfwmRiBklHh3vvObpwa2WlAOYkXpJ4PeKdq7WZL1pd1qDsqNDimx9jC8IWO3lsG_iodftF2Qfpyvru45hNkn6UxGvCktq51pJoQVhGWFZJV3dFUOojYVnT3J9-7lqj_4bSEZYVjS4Iy1iaAEsZn01Zkoo0OszKMU_Ckk0hiidJFJbTMAlhcoEjcd3ecGUP2hwtYdmu5A03eHPDNCjblrDI812NkXccrWJGWErCNQkXw_9p2P_hbP_kjkTvKO-cpoQtPoGpYLuhJFr3o_R8bT_kGy0A3zxarAxwB4QleVCB239r8R63YivqA7PYdMfPYMHcg_iTNx1YH8OMsn4KCzp719aSMM8wWg7bDQSQlFQWjFvCQRtE9yPLJY5U4DJprMv9DKnV1p22v4DKAwNtw0tYNM0XC_Yv6eoTznZzNdVfF1tzIXJV6qNUlQee5sj63aN0y-WP6N6sWTVagfAr-9vb9edsXKXop9UYjcM3VY2e7yslOMRnD-YoFXfaYDzBcAuZ0cctN6BOCT5Fzlft0nBV1rmy7llV9ni7riwx3qf490C_mwEWRelbykDP9yoD-1paKpV1pitRPpRMw31OpiGVlh71PQiqO0f1gboaaKN1SwlLZAABBhOf1VpaB4KWWgmJELy5ApSKXnIhLKUP0tWIKoxuW6kqKp2lAoquoo0uOS4LXikTSuk-D5Dg2RUwSW3T62pFh1tfPkrcesJ_yTZa6FvK9i9YPvWOjH6_0kqg2VP7VbZ7I-8lb3bQeOrJMh_MdnXK8gsu6y95wALp7TgzAN_hzMEL1V_nvRQ80H6Wly5LcMTLVCsxbLnhx-FIoYQt_YFxMP6wWNEzr9yBQbt4gVY_x15z7_f5rXKYTN6U_fZ8XyuHnj1dHBwY-mm3W3yhXSu8la6oARScV33pbZS6s09faX4DD_t8kDA9ee2QqSdr73P1usE_ldfArjd3yn35dOrSeQp_DlCne5ZaOak6tJii0eVXLE1uqW5bbZG9voHGVVqd3o-wNLis3R-eMp_BcXl1zvxPJ8wsfFsnjOf7K23m0EOi82xredtlvtxj7k56v-4zT51kN9ABEdjBuvzQ7hdsYlvL297taT_TgbfKp033NahnPeDPMTLe2OcgH4CLZyD9_Bcb1i12yTdTX1HPS0VXaVHoBquYPiupfiDQpiIs-05YJt6_t0kKf-xRPBvtUP_cXR39xbX68XjHPoKwsSgqStg48Q2F6h_GoJz5NrQYpTYGbIsKVhXK1jcplCtBtavhCtieG4czOKJwA7cw_eKPj4-PhKUjMY9EGqV8BPPxjIVhOE1ZMqrnMS-hSFlySNnkEJW8nKUzHh5m03icoC5Gcs5CNglnYTQeT1iYBLOxKERSCDFLgKflmExCOHLZBCgbjNpIWtvBPJ3FcTpqeAGN7T8qmW9wpDrovigJY15q0cJdiIzhl6mZexUXXWXJJGykdfYJ30nX-G_YNeLliBevSby8FSWJ1_STtBZDct1dDZ5uMaVbbhwdY5Q608z_tcH410V36N_4fs7-CQAA__-8ppPs">