<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=http://email.email.llvm.org/c/eJztVk1zmzAQ_TXioimDFgubA4fYTmY6k5yS6V2AwGoFciTZcfLrK8AfMYE4aTo9VSNj0K7evt2nZUhV_pygKNjPYImCK2P1JrP4nnSPaDrvbrAboraYEYzCK0wiFPYt0Leg6fJ4f8CFAVyzUrpBPoPcL8IgWnflO8t1jbMV03jXs1lerSWzHIUL-7zmNas4fkDhNd4qkeMCwewBI4gsghifkbF-m-LyFeJ-Gbplt22OyRmts4inCPekCeEiHJ0HfKDv0xPk9fX29sfdoNMeLlw43cLrNvQBtWU_PBCEGE2C8c3H7JtRqa1JJXZ1gRkCqsW6cYGFg6Gc7d44vzzJJgR1pnGnp47H0alFzsXngmc9XLOSssOduNM44sTyfO_U2kYonrwmEaVhdPIbK6ioqvacBDsSuPEmjWPQSylrbh_76sJeIPgTdfubv6TuXxGujyvq7HV53o8JHyndO810ozTmO-YakuPvi4Wr5fAWmL_XXcPZjuY7LtdJNUJ9AsPJj5T8IuoBlw7XG3-U3Rlc5LvuukQTPsezw6Vv5Pw4sx7Y1CeXm-i_iP9axLN2HOrRlbVr00gDN26WWeaXKk-VtL7SpVt5cT-a7R4nhhWplydhHocx89jGuu-GJGdb0XhvWW1-PXsbLZMeoLCrTepnqnIPUm4Pf9_WWv3kmfssuBHGbLhpwoTTGfVWCeNxwOgsjooiIBmJsllBaBFDTF3ZYwaeZCmXJkF0jgBa0PBKra2oxAuzQtUODBBdel8nIxIIwE1CmhMBxE9TxuK4IIxEBU2nxL34ecWE9BucpmSeTlrIdFMaZ5TCWHMyMmNEWXPecncMrbCSJ3cuKs-xsUpzXHFdirrET44sToUtBJe58VpiScvqN_Jje2o>53785</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed store merging with bitfields
</td>
</tr>
<tr>
<th>Labels</th>
<td>
llvm:optimizations
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
davidbolvansky
</td>
</tr>
</table>
<pre>
```
struct S1
{
int a1 : 16;
int a2 : 16;
};
struct S2
{
short a1;
short a2;
};
extern char x;
template<typename T> void f(T &t) {
t.a1 = x;
t.a2 = x + 1;
}
template void f(S1 &);
template void f(S2 &);
```
LLVM
```
void f<S1>(S1&): # @void f<S1>(S1&)
movsbl x(%rip), %eax
movzwl %ax, %eax
movw %ax, (%rdi)
movsbl x(%rip), %ecx
shll $16, %ecx
addl %ecx, %eax
addl $65536, %eax # imm = 0x10000
movl %eax, (%rdi)
retq
void f<S2>(S2&): # @void f<S2>(S2&)
movsbl x(%rip), %eax
movw %ax, (%rdi)
movsbl x(%rip), %eax
incl %eax
movw %ax, 2(%rdi)
retq
```
For example ICC:
```
+void f<S1>(S1&):
movsbl x(%rip), %eax #15.12
movw %ax, (%rdi) #15.5
incl %eax #16.16
movw %ax, 2(%rdi) #16.5
ret #17.1
void f<S2>(S2&):
movsbl x(%rip), %eax #15.12
movw %ax, (%rdi) #15.5
incl %eax #16.16
movw %ax, 2(%rdi) #16.5
ret
```
https://gcc.godbolt.org/z/5cxq4safb
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztVstymzAU_Rqx0ZRBkoXtBYvYjmc6k6yS6V5CAqsVyEGy4-TrK8CPmEDspJ2uqhEv3aNzH4fLwI14SUAc7We0ANGNddUmdfABtY9gPGtvoB-qdJAhCMgNRDEgXQvuWsB4cbw_8OIeXrsyVc18RrlfxL1s7VnunKxKmK5YBXcdm5PFWjMnAZm7l7UsWSHhIyC3cGuUgBnAk0cIcOwAnsKzYFzYpLh4w7hfxu2y3zaD6CysM48nDw-oduE9HME9GNzFdAR5e767-3HfC9rTkbnXjdw2rg-sTfT9A2ACwSga3nzMvh6F2Vquoa8LngBMK7WuIXjuaahku3fg12ddu6DeNAx6buM4ghpmoT7nPO3w2pXWLe_Iv40DICbEHtTYBkI8oUYxpSQ-4YYKqoqieU-iHYr8eJfG0emllCvpnrrq4r1A-Cvqdjf_kbp_RbguryrTt-X52Ce-pnQfNNPSVFDumG9ICb_P576W_Vvw7KPu6s92MN9huU6qIRoi3J_8QMkvsh54aX-94bXRndHFoe-uS2Hiz8XZ8tJ3cl4fWYdsHKLLTfRfxH8t4lk79vXoyrm1raXBSz_zNA1zI7jRLjRV7lde_UHT3dPIsowHIiFiSqYscMppmdwra6WA1plKwkJWuSpz-KzcCnLlMiW1sMGm0knHiQdseJiawj9ovT1cvq0r81Om_ldh6Xk30tauyXhCg1VCUzahGUGEj9lEpCylAjGSoRGd8BHJWKAZl9omgM4Axg0puTFrpwr1ypwypSfDgC4CleAI-4lQrTFGIeeMTacZYijOKB8j_ymXBVM6rEnqIgRV0kTHN7n1Rq2ssycjs1blpZSNZ8_PNs7_UCWCbVVdxi0r7a-XoMknaZL5DTnLZmU">