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