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

    <tr>
        <th>Summary</th>
        <td>
            [DebugInfo][LoopStrengthReduce] Missing debug location updates for new phi and binop instructions
        </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>
    [**LSR-L2406**](https://github.com/llvm/llvm-project/blob/3641efcf8cb256ddbd20f4add5ce55800cad5399/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp#L2406), [**L2410**](https://github.com/llvm/llvm-project/blob/3641efcf8cb256ddbd20f4add5ce55800cad5399/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp#L2410)

[L2406] The new phi instruction `NewPH` replacing the old phi instruction `PH` and cast instruction `ShadowUse` does not inherent any debug location.
[L2410] The new binop instruction `NewIncr` replacing the old binop instruction `Incr` does not inherent any debug location.

godbolt: https://godbolt.org/z/eGGd9Pxb5 (see `%IV.S.` and `%IV.S.next` in the optimized code)

```cpp
    /* Add new PHINode. */
->  PHINode *NewPH = PHINode::Create(DestTy, 2, "IV.S.", PH->getIterator());

 /* create new increment. '++d' in above example. */
    Constant *CFP = ConstantFP::get(DestTy, C->getZExtValue());
->  BinaryOperator *NewIncr = BinaryOperator::Create(
        Incr->getOpcode() == Instruction::Add ? Instruction::FAdd
                                              : Instruction::FSub,
        NewPH, CFP, "IV.S.next.", Incr->getIterator());

    NewPH->addIncoming(NewInit, PH->getIncomingBlock(Entry));
    NewPH->addIncoming(NewIncr, PH->getIncomingBlock(Latch));

    /* Remove cast operation */
 ShadowUse->replaceAllUsesWith(NewPH);
 ShadowUse->eraseFromParent();
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVktv4zYQ_jX0hVhDpqzXwQfZjjYG0l0jzm6B3ihyLLGVSYGk8thfXwxlJ7aTdrvHGoECcYYfv3nwG3HnVKMBFiRZkmQ94YNvjV2UvREtaDepjXwJNlYSVt7t7j_dsXmUjq8kWROWt973jsQlYRVhVaN8O9RTYQ6EVV33ePr3qbfmTxCesKruTE1YFafzGezFPhc1S1Ipa8mi_ZxLmQhIkjyKBJdJXBRnOAr3PViu3d7YgyOs2gnecUtYdWdMv_MWdOPbe5CDgKnoe8LiI9-CsBV9C4TNZ9H_KwjkW5BoTaLy-EyWY2zJmj60QDU80b5VVGnn7SC8MpqSNPoCT9tbkkbUQt9xoXRDfQvUdPIj79GVa0kFd_7aumu5NE_fHKCTNOCoNujUggXtKdcvVEI9NLQzguOm6TnVWXROtVba9B-Q3WhhP6b74Y6T-6-wCc_GyNp0nsQlvSr-aJga2xBW_SCsgs-fZbF9rhNKWO4A8FzCks336W56StfZkoZnj8tKj9R7rw7qB0gqjITrIqbR-Id1DiuUUhqIlLSUMqRqe7v5YiRMaejYavT7ROIbejKhJRSaknh9WsSI4nJlgXsgLF-D8w8veA1YuAuMjQGw8Lq9RcAG_MaD5d5YwvJwawoSL88Zn8iJgBv4KS0sHEB7ZJgRtiRsKQnLMAO8No9A4Zkf-u4qAox0ZbTzXHs0rKptoH9aq7ZjBA34C_qrI9M_bp79d94N8J7qmJyl0ty-fO3HgI45woYJx1xar5L1xhB_uOd46Nd-rCKeiDCItHlryREGC0fi6r2hKqW8hP5vP-zS92C7oSZsdYk3XnfMUrU9LzM25anWZ-H8tNonSPTnUm60MAelG8LykEvlL5vnaF52RvxFWH6jvX25Av4ZpLD_CnnHvWj_keuxOe_hgG0XNMyECge5OG--Vy3Dc0axgbLrvjlwvyvfjmwwlWfML_aA5Q4qaw5bjnpzzOArpdPFnshFLIu44BNYzLJZUWRpmqaTdiELmMf7OEt5mkM9Z8m-qJOozjjPijyVs4lasIjNoyyKo3iWzdOpTJiUeQbxrIh4VnAyj-DAVTfF0YJ6NVHODbAosmQWTTpeQ-fG4c2CECq9N2MLEMbCOIpLfzaIGH4B2EWYdPXQODKPOuW8e8P3ynfhW2GNeBvES9ao7u8GF0r9b8o5FPBLFaZDL7kHR_fGvg4tlNB3-u4mg-0WvzyaQxJwro55eFywvwMAAP__v5Opyw">