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