<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=http://email.email.llvm.org/c/eJylVN9znCAQ_mvwhYmjGPXuwYdc0vShuU4fOn3NoKwnCYoDeJfLX18E74cmnWmnDILsst9-7MKWkh2Lp6dfW1wNSkFnxBEzCbpDJDdYA7TYSCzkARQ2DWAqhKyo4bLDssa844ZTwd_PElm-QGW01VizUtGuakCH-GfDNT7IQTBM8U5KhqFrrBJa6zJE0QOK7vz45Y22vQCU3F1LURb5XvW9l2ijhsrgnnKFUb7xQmyb9YwpShaS8ixB-cPl3417yRkuqUJkNcIhkiGy_mxPLaXd4x2Q-wmXrOf-HaPeitye8tqdI1NbCIpRcj_Zphvbh07wVxBHlD7YPgcc28TumtcoHsHPh5oHyi-_QgeKGtCXeJ42UN16yflU05mck7PnPzREEoxuo89sZ8T7QTfjrOjbXNHKvZvZQSqGe6PGSCjdjxGwWMD43-23TDb49mSlF1ZV27t5hPtM_yL8HD5tNtFzvOAuvfEH7gqMF5zMTsFdklXe7XisOS37jK7Serl0_-h_ke0p55KVUpgxh40xvUs9ebR95xWhVDu7erdfo9722x90O-HfCb4H8tGQOnkoxL6djCuYEL49f1_dMG8esCJh62RNAzqYRqriBRS0xxvF61feBYMSxYIQN81QhpVs7WJEn6abXsmxjNgl13qwt5c8pkma5kFTRFW8rmoSQ1yVOSXZOo9pmkQsTso4XcV1IGgJQhfjuyKkgwN2EPbf3pHg_xnwgkTEdjuQNI3zsGQkS-C2issqW9Ess68CWsrFOVyBKhxkOey0VQqujb4oqdZ81wE4wpah4UZAsbVegfm6y7vdWFl9wRvUrAbTji2LsKu8vJ6Kb-DoF477b33sq9U>53557</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed lowering of structure allocation and initialization into if branch
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jeremy-rifkin
</td>
</tr>
</table>
<pre>
LLVM currently doesn't seem to lower the allocation of initialization of objects into branches. This would a good enhancement.
Example:
```cpp
struct pair {
int a;
int b;
};
void bar(pair&);
void foo(int a, int b) {
pair p{a, b};
if(a < b) [[unlikely]] {
bar(p);
}
}
```
Generates:
```asm
foo(int, int): # @foo(int, int)
push rax
mov dword ptr [rsp], edi
mov dword ptr [rsp + 4], esi
cmp edi, esi
jl .LBB0_1
pop rax
ret
.LBB0_1:
mov rdi, rsp
call bar(pair&)
pop rax
ret
```
Godbolt: https://godbolt.org/z/hrxvMPaMx
Alive2: https://alive2.llvm.org/ce/z/K_N8-d
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVEtz2yAQ_jXowkRjI0uKDzrESdND404PnV4zSKwsEiQ0gOw4v7485IeUZKZlEIhd9ttvF9hSsmPx9PRni6tBKeiMOGImQXeI5AZrgBYbiYU8gMKmAUyFkBU1XHZY1ph33HAq-PtZIssXqIy2GmtWKtpVDegY_264xgc5CIYp3knJMHSNVUJrXcZo8YAWd2H89kbbXgBK7q6lKFuEXvV9kGijhsrgnnKFUb4JQmyb9YwpSmaS8ixB-cPl3497yRkuqULk1sEhkiGy_mxPLaXdExyQ-xGXrKf-PaPeivye8tqdJ1NbCIpRcj_aphvbh07wVxBHlD7YPgV0bWR3zcuJHfg5qGmiwvI7dKCoAX3J52kD1W2QnKMaY_JOzp6_aIgkGK0Wn9lOiPeDbtys6NtU0cq9n9lBKoZ7o1wmlO5dBiwWMP5v-y2TDV6drPTMqmp7Pzu4z_QvIszx02azeF7OuMtg_IG7AhMEJ7NTcudkVXDrwprSss_o6lgvl-4__c9OezxzyUopjDvDxpjeHz15tH0XFLFUO7t6t1-j3vbbX3Q74t8Jvgfy0ZB6eSzEvh2NKxgRfjz_vL1hwTxiRcLWyZpGhhsBxZZrDSwUD97tXHkIr3ZQk0JCOzavJL588HqsINGgRDGLhZtmKONKtnbhiI3TTa-kq0B2ab0P9uKTxzRJ0zxqimSZ0bpOGFmny6zO1jlj-TJnZJGkZFVlZSRoCUIX7kkS0sEBewj7b69XxAuyILbbgaTpMo9LRrIEVtWyrLJbmmX2OUBLuTjnKVKFp1QOO22VgmujL0qqNd91AN6dxaeDaaQqXkBBe7xRvH7lXeQJFD6Av4vflkc">