<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62476>62476</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
x64-86 strange xor in sqrt(x^2 + y^2)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Dushistov
</td>
</tr>
</table>
<pre>
[godbolt link with clang 16.0 with strange xorps instruction](https://godbolt.org/z/1Tv5xnG1K)
```c++
#include <cmath>
double f(double x, double y) noexcept
{
return std::sqrt(x * x + y * y);
}
```
clang 16.0 with "-Ofast" convert into
```asm
f(double, double): # @f(double, double)
mulsd xmm0, xmm0
mulsd xmm1, xmm1
addsd xmm1, xmm0
xorps xmm0, xmm0 <<<< why there is need for such instruction???
sqrtsd xmm0, xmm1
ret
```
All other compilers gcc, icc generates:
```
f(double, double):
mulsd xmm1, xmm1
mulsd xmm0, xmm0
addsd xmm0, xmm1
sqrtsd xmm0, xmm0
ret
```
without any xorps instruction before sqrtsd.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEVM2SozYQfprm0jUuaBkMBw6e9ZJDDrnkBYSQQYmQHEl4cJ4-JYx3bMezS3VJjVr69PWPmnuveiNlDfk75IeET2Gwrj5MflA-2HPS2u4Sjb3tWqsDamX-xg8VBhSamx6zYpNe_31w3PQSZ-tOHpXxwU0iKGsgPwCVQwgnD2wP1AA1K9zGuh6o-Reoyf4857P5LfsdqIL0AOl-HYv0KgLoPcp1lZgyQk-dRGDfxMjDAOz7_bnOTq2WeAQqV3UG-oarfgGq0Fg5C3kK67Hdio2I6GSYnEEfukiZ7f0_LgCVMwLtMY7veFn0CATsxmp3eCJ9z-g5YED09seR-wBEKKw5SxdQmWBfus_9eF359OjTn4XEHoEYwjb9ascP7-I3Ttp3iDiPYxq3LfOLHfM4Zqs9e7TzrrshZK8RrqXweEfM1w_Bj-GCYZBOovJopOzwaB36SQwPFcSaVR7gY1Iigzv4G0Unw08ycR33WqONl6Ow40lp6Tz2QkQkJQT20kjHg1yK9lVGfpWOL-P9HM9fp-Iu1M-ePsbia4ifRyQWpJ0CcnP5_wPGVh6tk-sdm6SrWVexiieyzoqSKkasZMlQizJj7THLsqptSy6OBRGvSrGrRF5uBSsSVVNKLM3TLK0ylrJNd8xJlF1Lu5x4tS1hm8qRK73R-jzG5pAo7ydZF7TdFYnmrdR-aVVERn7gYgSi2LlcHc-8tVPvYZtq5YP_RAkqaFnPxfatLO4bFSqDt6cN-Xe6PuyoAVXJ5HT91LZUGKZ2I-wI1ET0dXo7OfuXFAGoWTh5oGbh_F8AAAD___vPiuE">