<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/57269>57269</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization unnecessary branch
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ntysdd
</td>
</tr>
</table>
<pre>
Code below generate unnecessary branch
```
static void f(void *p, int n) {
if ((long long)p % 16 != 0) {
asm volatile("movdqu %1,%0" : "=m"(*(char(*)[16])p) : "x"(0));
} else {
asm volatile("movdqa %1,%0" : "=m"(*(char(*)[16])p) : "x"(0));
}
}
void g() {
char ch[17];
f(ch + 1, 16);
}
```
like this
```
g(): # @g()
xor eax, eax
xorps xmm0, xmm0
test al, al
jne .LBB0_2
movdqu xmmword ptr [rsp - 23], xmm0
ret
.LBB0_2:
movdqa xmmword ptr [rsp - 23], xmm0
ret
```
tested with clang 10.0.0 and 11.0.0
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9VFFv2yAQ_jX45dQIg53YD35IGvVp-w0TNtimw8YDnLb79TtI0i5VpE2aNBvdAXf3fccddmvlW_NopYJWGfsCg5qVE0HBOs-qU94L9watE3M3EnokdE-29DLOyyR9EEF3cLJaQk9YlSaE7RfCHkHPAWbCaiC7w9kdQPdornAYOw8QBTosuFdCvkWVE34E-ikIQPgJSQySGZXi2WRP8scaA3PkQoVBDAjf4xZDkCmq6LlH2Y3CXRc1KQ_5lpTHSJyIzjGv54DIHQd_Zye7Iyjj1V9lJP5TRpcmvE-STNUfEuxN_SIZikizizQfSH1KBckOEJPGHvzO9AF_r_dGf1cQRu3v-lzSiEf540MYB1LQa8h7jePzal3SSrzGBKP6bF981NNEo0PSNx5B-ZA6ZqId5Y31eVZJb74cDvQbuzVeLlkEfbFOwhIcYBWdX-ABGE8tu0fpVDhvXFH5_g6w-Afgux2JJ1USXnQYoTMCP7CcbvAFMUvI8zjNVJNvtzktC17VmWy4rHktsqCDUc1X7T3G2yXoSf_Eq23nO7-DbHWmGUNYfDwWe8IxIOPabjqLd_zJmNNVPSzOPqsu4BKhV-VxUu7Yts7GpuIVl6xiPVd1q2TfFUVJ876oOy62gtHMCPwz-QbLguXIdMMoY7RiOeVlXdSbom97TgtWFlUpRdHiBVKT0GYTiTfWDZlrUg7tOng0Gu2D_zAK7_UwK3XFF2sYrWvm8OalzFK2TUr1F3S-Wbg">