<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63328>63328</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization of std::vector access
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hiraditya
</td>
</tr>
</table>
<pre>
I originally reported the bug in gcc but it seems clang also has the problem
```cpp
void f(int);
void g(std::vector<int> v)
{
for (std::vector<int>::size_type i = 0; i < v.size(); i++)
f( v[ i ] );
}
void h(std::vector<int> v)
{
for (std::vector<int>::const_iterator i = v.begin(); i != v.end(); ++i)
f( *i );
}
```
$ clang++ -O3
```asm
g(std::vector<int, std::allocator<int> >): # @g(std::vector<int, std::allocator<int> >)
push r14
push rbx
push rax
mov rax, qword ptr [rdi]
cmp qword ptr [rdi + 8], rax
je .LBB0_3
mov rbx, rdi
xor r14d, r14d
.LBB0_2: # =>This Inner Loop Header: Depth=1
mov edi, dword ptr [rax + 4*r14]
call f(int)@PLT
inc r14
mov rax, qword ptr [rbx]
mov rcx, qword ptr [rbx + 8]
sub rcx, rax
sar rcx, 2
cmp r14, rcx
jb .LBB0_2
.LBB0_3:
add rsp, 8
pop rbx
pop r14
ret
h(std::vector<int, std::allocator<int> >): # @h(std::vector<int, std::allocator<int> >)
push r14
push rbx
push rax
mov r14, qword ptr [rdi]
cmp r14, qword ptr [rdi + 8]
je .LBB1_3
mov rbx, rdi
.LBB1_2: # =>This Inner Loop Header: Depth=1
mov edi, dword ptr [r14]
call f(int)@PLT
add r14, 4
cmp r14, qword ptr [rbx + 8]
jne .LBB1_2
.LBB1_3:
add rsp, 8
pop rbx
pop r14
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk2PozgQ_TXmUuoIbEPIgUMSJtqRerV7mHvL2A645WDWNtnu-fUr85Em3Z2ZHUUjIUhVvSrXq3pEMOdU3UpZoHSH0jJivW-MLRplmVD-lUWVEa_FVzBW1aplWr-ClZ2xXgrwjYSqr0G1UHMOVe9BeXBSnhxwzdoamHYGGuYGaGdNpeUJxSWKt9M9i8eLd93SfzZKwBHhXLUe4Q0iuw_RGuHceYHIFpHtWXJvLCL7gCdf4BySxoz1lAoAcDQWfpA2Op36Lp_8aydBASIlxIjshp97OK9CEOF87AkUwrvhmg4bWoYzSoeEtISr3tflBxLN7yLBTev8k_LSMm_sxOS8qmSt2kX_gHAyRmQr3vwjLfWOF8JbdYPRvMar3WI6qmCsBg9_kU9Xz9wkidsbxXu4BJjWhrOrQQXWoa0tIEwA0fjeStOsu941YBN6bVcvkz2abDbhZM6Diffwz7_GCui8BZTurFAoLWcUP3UfwmHgkAcQ3i8qPktYPe528RO5OqIajghVJ--LsaFNMbjDc_CPqfgyFlIi8uVboxx8bVtp4dGYDv6QTEgbMKXsfINImSzPkkKFouKqX_Yy9EsR3obhLKgxrZdvLY3_fvw2B1XLl7O8OazqZVFxQPFPUW8zm7Cur2bsYimO2dmLlysIrQQkvyCfK5hHtpgfCVqZEEwIsK4LeflFE6ZbSGI0Lyyt9FeSH-633_lflfm9le6Q-Ti9n8j8Bur95iaZJz-W-Qj5DXL-_xIe9j9yoj_l-YlCn9uZKV5yuktiC41d_wlHoiBiQzYskkWS5VlOY7xOo6ao0myd5zxeZ8cqi7M1TTZ0k1YCM0bXGaWRKnCMSZwlaUIpJenqGKfpJk6OOeeEkyxFNJYnpvRK6_NpZWwdKed6WWSE4DzSrJLazd8Ttgigh6qvHaKxVs67tzSvvJbFn8o5KcB0Xp3Ud-aVacEc4Z2ygXEunYt6q4vG-86FID4gfKiVb_pqxc0J4UOoPT0eOmueJfcIH4b-HMKHocX_AgAA___XvXvq">