<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">