<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56434>56434</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Poor code layout of loop w/early continue
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:RISC-V,
performance
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
preames
</td>
</tr>
</table>
<pre>
Compiling the code below with the command `clang -O3 -g0 -march=rv64gc_zba ` yields assembly with the increment block of the loop below placed above the header of the loop. This requires additional branches to be executed in the loop over the straight forward code layout.
```
struct A {
long a[9];
};
typedef struct A A_t;
long f(A_t*);
long bar(long N, A_t *base, A_t* sorted_array) {
for (long i = 0; i < N; i++) {
A_t *elem = base + i;
if(elem->a[0] == 5)
continue;
long new_position = f(elem);
sorted_array[new_position] = *elem;
}
return 0;
}
```
Here's the assembly we currently emit:
```
# %bb.1:
mv s2, a2
mv s1, a1
mv s0, a0
li s3, 5
j .LBB0_3 <-- note unconditional branch forward
.LBB0_2: # in Loop: Header=BB0_3 Depth=1
addi s0, s0, -1
addi s1, s1, 72
beqz s0, .LBB0_5
.LBB0_3: # =>This Inner Loop Header: Depth=1
ld a0, 0(s1)
beq a0, s3, .LBB0_2
# %bb.4: # in Loop: Header=BB0_3 Depth=1
mv a0, s1
call f@plt
sh3add a0, a0, a0
sh3add a0, a0, s2
li a2, 72
mv a1, s1
call memcpy@plt
j .LBB0_2 < -- note unconditional back branch
# Block LBB0_2 should be here.
```
My guess is that something is going wrong in MachineBlockPlacement.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1VkuT2jgQ_jXmooKyZTzAwQeYyVRSleymdrf2Ssl2YyuRLUeShyW_frtlGwyB7F5CufT6Wv1WN5kuTumzrlupZFMyVwHLdQEsA6WP7ChdNZzVtWgKFjyFuRJIOP89ZvMyZPNamLwK4hfz9rQs8_33TBARO0lQhWXCWqgzdbpwkk1uoIbGsUzp_CvTB3-stG4Hoa0SORRMZPoNPFaBKMBMKReM_VVJywx866QBlFMU0kndCMUyI5q8wjOnkSGDfyDvHPKTzUUQcjZ-Z50RsqwcO2hzFKbojVfipDu3CMKXINwO41M4fH7L6GaXO7ZlwWo3njHkjr4RQbLbBMlLEJ-RYDXduVMLBRwuPLZ7d4b70TM6BHxNEN8GfHOPIBMGSfzyt4A_Ex-G1JmwMGxxx6w26IC9MEackNFUYzSbjRwkwzCyEOX45TOypGXAd_7bXFs6iAIFtb9HMvGALsQTMkk2ENE8iN-RY0J0DF2gOwmZdSZl6PzGyaaDKw5etwaO-1ZbH2MvbmQ7dQxRX9ma7Kb3BsGj1jfRGZYGXGca74XB2yN2kwHvwaCPV9an0SXN8al0xmB64wZqiWHd_iSNAh6jOkmWLaIzIRt-9Vs_W06hFPwBGnk0eoCGHg2vUSUHNCY0uQa_DPPi424X7mNGmTCfs0Y7YF2DEbp5aOPL6bn0tzgaw_7jR6YzepQf8UES_Xv_yjFAvdwXaB3VlRvL6KFfLOvH-SMa75t-XN34L4Nv3y98erWTqQ3x_7TBp_I7X40-NA2WFbLnbMz2kR2qGHT18nFYk56bH5ScEPXhGj18kz_LX-fyMZkGLW7QXChF8yFYhq1y16CtYgzGeFXczcZ7NJbfz1jB78XyrGD0MwVrqPP2dE_L65TnvvY9SHmBHavP-ykLcuzOd7OBg610hxHOqHcZWNx_-z-Mn06s7MBaJqmqCIfFrAZXUV_Gk1LT4mh8qW7YJ5EjAl7sZ-qY1FOxL86KNC428UbMnHQK0s8aS_ykq1Eb9T3wGPBXEAbr1Fh2Z51RaeVca6kY8Vf8SmzbXbbA9o8bpd7Gad4a_QVybC-v0lpUGhfJ0zJezqqUZ6vikCyTYlmseBzGqywT6wiSKE5EEq6LmRLY6G2K5TngnFwKTYES__jw5_P8bzyiKOLUgsHagn87cqDD5GUmUx5yHq7CFcdfEi2iKFmLaJOsi1UCh4hyEGoh1YJ0XGhTzkzq1c260iKopHX2AmLZlmUD4FVB_qJzlTZpa0DUYGfestSb9S_9SIAA">