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

    <tr>
        <th>Summary</th>
        <td>
            Strength reduction of `udiv`/`urem` in loop
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    [godbolt](https://godbolt.org/z/fWhWxjd1d)
[alive](https://alive2.llvm.org/ce/z/xeLJjz)
```c
#include <stdint.h>

typedef uint32_t u32;

void src1(u32* out, u32 len, u32 n) {
    for (u32 i = 0; i < len; i++) {
        *out = i % n;
 }
}

void tgt1(u32* out, u32 len, u32 n) {
    u32 remainder = 0;

    for (u32 i = 0; i < len; i++) {
        out[i] = remainder;
        remainder += 1;
        if (remainder == n) {
 remainder = 0;
        }
    }
}

void src2(u32* out, u32 len, u32 n) {
    for (u32 i = 0; i < len; i++) {
        *out = i / n;
    }
}

void tgt2(u32* out, u32 len, u32 n) {
    u32 remainder = 0;
    u32 quotient = 0;

    for (u32 i = 0; i < len; i++) {
        out[i] = quotient;
        remainder += 1;
        if (remainder == n) {
            remainder = 0;
            quotient += 1;
        }
    }
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVU1v2zwM_jX0RWggU_48-BA3rw_vdtuhx8G2ZFudbWUWHbT99YNc56NduwDFPgghEUM-5PMIBFNaq9tRqQzCHMKdV87UmSn7NKjymx69yshHF2qNrExPEO4Ak45ob0FsAQvAYg1tzNQCFk-ARXPX3T3cS18CpsB3wLcQ5mWvD-ot_BLATd8fhrVGrdZCD-rz__dP5yoRfz716qPQY93PUjEQt5akHmnTgfhvDS-f9LhXUjVs1iMJ_EpsFggiv0w5GC2ZnWofMHFR3DIzE-Cty2W9Go_XETBlEK9gxhhrzMSeUUwzEDvGQeTL9XYBOgcwX84rqDPArZlpAWoGGLLxRI1BvFtJni5nttTSB9i6Xyc1lHqUajrRvSz-GzQ5MmGuIdwt4FO_s7LVLphg7lL9n1J045i8oOwSXyl7T9LplY8P-MJ561ntVOO_HoLicgiuEaaWPkD4V3NwjH-fDWk10l8ak2O7PzclF3ZtYJyd9b_X9tpYHbeVJzMhU5GWnsr8GHnKeRwHXpch1mVcxkmTomjitIr8MhG18uNGBqoKlKcz5Bjw2Bd-GqYi2CRchokMIr-Og7oRPgTcSelP29PT1s4qS5M4iry-rFRvl82OOGhrlbwxe9KDfipJmxEQ3cqfMoe-qebWQsB7bcme65GmXmVfaFJjSx2blJxrh2WmYRDxWeqDU4mFcyY1QMSZHllvzN6bpz579V-hqZurTW0GwML1WL9u9pO5VzUBFosAC1g8azhk-CMAAP__lGO9JA">