<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/110589>110589</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Unnecessary `fsqrt` of `0.0`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Kmeakin
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/s4T3dc6ae
```rust
pub fn sqrt_of_sum(xs: &[f64]) -> f64 {
xs.iter().sum::<f64>().sqrt()
}
```
```asm
example::sqrt_of_sum::h8605ab463220c776:
cbz x1, .LBB0_3
cmp x1, #4
b.hs .LBB0_4
mov x9, #-9223372036854775808
mov x8, xzr
fmov d0, x9
b .LBB0_7
.LBB0_3:
mov x8, #-9223372036854775808
fmov d0, x8
fsqrt d0, d0
ret
...
```
The main loop body is not important here, we are concerned with the early return in the `len == 0` case. Here, we load `0.0` into `x8` and `fsqrt` it; but we could just return `0.0` directly.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVE2P5CYQ_TX4gtqiC-OPgw_T29uKlBw35xE25TEbDF7Asz3z6yNsz_Z0K4mCkDH1ePVeYYwMQb9YxJaIExHnTC5xdL79fUL5l7ZZ59RbO8Y4B8KfCFwIXF6c6pyJufMvBC7vBC6h-MZVX0ok7EzY0_4s2db9EuIWmpeODpaGHz4-u-E5LBOB-poyUwIlEaehLIg4E2jogfCvdCgLSqrTRqbXkOuInkBNoMkTmT-t_Uui8a8fwA8ft9fdR3V-MPSPLmWYtghe5TQb3JJ_troGxrpkQnZFyQFYX1VlCm_--u6dpnY9EvhC8z9OJ_bMd2xv_TR_WkKAF_d4l49hZz4gk3vdmM3OPDQAnFfAeFmLoqpEzep_odSJcn339_Cw44qtcPPgZB83M9UGftT0q-R7if_l6kH2Ax3STv8KK3ZP8rifoDzP_-NjfhuRTlJbapybaTq6VAdqXaR6mp2P0kY6osck8ROp9Eh7Z3v0FhX9qeNI44gUpTdvSXLxlmq7xkjJDFpK-JnwM026tJcBc_rbLZ1xUqWFLF9xbaNL02udZtKu2FrmikbCT7RbYmL2bjGKfl9C_JC9pVHaYx_NW_650Ey1XDW8kRm2xwqqioujENnYDl1VsKbrpCjYINUwcCyqXoHAXrK-hky3wKBgDWcAIITIGeeClUXXgWJYCkUKhpPUJjfmdUr_eKZDWLA9Hpmom8zIDk1YLwuASYeA6uDmqCf9LqN2lgCkW8S3iX7olpdACmZ0iOGWMOposP3TWuwxBOnf7nbGDbfqs8Wbx9tHx3Hp8t5NBC4p5T4cZu--Yx8JXFbDgcBl9_zawt8BAAD__-WxVlw">