<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/76152>76152</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
strange usage of pointers in sin/cos optimization
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
davemilter
</td>
</tr>
</table>
<pre>
With such code, clang (17.0.1) able to optimize (-fno-math-errno -O3)
sin/cos calls to one call of sincos:
```c++
#include <cmath>
struct Point3D {
double x;
double y;
double z;
};
Point3D f(double lat, double lon) noexcept
{
double lat_sin = sin(lat), lat_cos = cos(lat);
double lon_sin = sin(lon), lon_cos = cos(lon);
return {lat_cos * lon_cos , lat_cos * lon_sin, lat_sin};
}
```
but for some reason it can not use pointers properly:
```asm
lea rdi, [rsp + 40]
lea rsi, [rsp + 32]
call sincos@PLT
movsd xmm0, qword ptr [rsp + 40] # xmm0 = mem[0],zero
movsd qword ptr [rsp + 8], xmm0 # 8-byte Spill
lea rdi, [rsp + 24]
lea rsi, [rsp + 16]
movsd xmm0, qword ptr [rsp] # 8-byte Reload
call sincos@PLT
```
clang/llvm passes pointer to `sincos` via `[rsp + 40]` and `[rsp + 32]`,
then move stored value to `[rsp + 8]` and `[rsp]`.
If it can use `[rsp + 8]` and `[rsp]` directly,
this removes at least two extra save and loads.
[godbolt.org link](https://godbolt.org/#g:!((g:!((g:!((h:compiler,i:(compiler:clang1701,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:2,lang:c%2B%2B,libs:!(),options:'-fno-math-errno+-O3',overrides:!(),selection:(endColumn:27,endLineNumber:14,positionColumn:27,positionLineNumber:14,selectionStartColumn:6,selectionStartLineNumber:6,startColumn:6,startLineNumber:6),source:1),l:'5',n:'0',o:'+x86-64+clang+17.0.1+(Editor+%231)',t:'0')),header:(),k:47.65625,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:c%2B%2B,selection:(endColumn:2,endLineNumber:15,positionColumn:1,positionLineNumber:1,selectionStartColumn:2,selectionStartLineNumber:15,startColumn:1,startLineNumber:1),source:'%23include+%3Ccmath%3E%0A%0Astruct+Point3D+%7B%0A++++double+x%3B%0A++++double+y%3B%0A++++double+z%3B%0A%7D%3B%0A%0APoint3D+f(double+lat,+double+lon)+noexcept%0A%7B%0A+++double+lat_sin+%3D+sin(lat),+lat_cos+%3D+cos(lat)%3B%0A+++double+lon_sin+%3D+sin(lon),+lon_cos+%3D+cos(lon)%3B%0A+++%0A+++return+%7Blat_cos+*+lon_cos+,+lat_cos+*+lon_sin,+lat_sin%7D%3B%0A%7D'),l:'5',n:'0',o:'C%2B%2B+source+%231',t:'0')),k:52.34375,l:'4',n:'0',o:'',s:1,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycV1uP4joS_jXmxQIldkLCAw8EpqWVRtujnb08rpykAM84Nsd26KZ__ZGdC0kIPXNOC0G7Ll-Vqyr2F2YMP0mALYozFB8WrLZnpbclu0LFhQW9yFV52_6P2zM2dXHGhSoBkT0uBJMnjEgaJqtgFSKywSwXgK3C6mJ5xT_AaZdHqZYVs-claC0VXr5SRDYoOKBgZ7hE5KVQBhdMCONdJfgFVkdsuCyUQXTXWLff66D5FIhk7tNICeWyEHUJGNF94eIh-mXoZ6yuC4u_KS4tPWCUtJ64VLVL-x3RToJxJ7zNCT96IUoO9__9dwd_RCRtzQWzrlzdSklXKangvYCL7XDuUe5e_zdcYkQP2Jcp9TgbB-V0rmhO5wrU6-gjjJJTGJ-Ah1FyCtPoBjDtPxpsraUrWh-b7O4Aw5xauQ-277YxKlRymHRyWMC8tvioNDaqAqyBGSUxt7hgEktlcW0AX1yNQRt80eoCWtyeTQgz1b157k8A87-65C45FGfaXDAiGY4CFB8ejbWZGlLyYOjHFeNuXKPg29d_jy0qdTUlxvi9qgKH98eb0iW-WP2QQmOPCPW2vjUVVCjOfH5k_wFazWPPYqaNVwN2x06X-c0C_n7hQvxuhUh033hv9VCecP1Qnl9tvt_1NL1_gVCs_N1az06TP6MQeRHiWuELMwZMNz7usEHroAVaB_jKmRM8DMU6wEyWE1UzBmu3oSaSPYN0WwVsrNJQ4isTNbRBph2ZQjay1TDzfxy7sXcj_wRkDgWXXENhxW2QGjdYg0vOYGZd94zF9k1heLeaYcOu4JFcuc0oCxRnJ1XmStiV0icsuPzpJyo9W3vxJzN5QeRlYOMF9ORVISIpIunzxRnRXaGqCxegEdlzr0t7CW36FyZBiMj-6G-jJmia-58kQCRBZJ9zyfStEYVD0Wv-Awo7UhSqqkDaVyluI4wS8vq0d9fQyLyEismTgLGtLzG_ghmJ4R2K2sLI382aGFkJnmumb3t3jQ7lVvNq6OrO6KNgJ_NfDm-vF5Aj3KOS9nvBfGJh1Ar-Y-Db-wj0B6I74oK654DuCkRid2v6L5eJGbTDBXQ3t5LttiZXNyKZv7wdrrqC1ryEqb8B4SqjmmRTkOVeibpyy6ZEsvzKJfyzrnLfYJ_6RRnufMamnfTRvg_y3TJte6_1g2rk6tWPDnN2fieq1oWvbrNumxg3-5ejKqtmhUj2nq6X6wiRrD15so4cZYikX0pulUZNA2iD6zs_BNs04c7ASp9OX9qfiO6iZLWO1yS-5xN9mo9buBYFM1H2809jCV2a3fN45AIkq-Dvzl_4bP4-G5a5WYnnZiV8OirPJ4V8Pik-0HhUwtlRCSej4vcc91S06XRHR0lMvyASO64ad3QUkaxljI1tkrUWWf9piJwbLYfwif72C_3HUB8nh9GyZ66IZHfuikjWsNchTkcgs57DdpCT4EOMhg_6crgQE0bb2ngS2tuMmO3j1ob5zKN3RLe1mUVvbWYKN1w19Ldr0TDV3QR8upXdMMH9sBbTDrhl8ttHzX74IGXtAN4PlmenijtDYrKiEU3-8hkSPsFsQcgvQeacr6BNcwBEiGwW5ZaWG7phC9iGSUDDdRSl8eK8LdkmilIa5WmesmRTrsvNmqWkhDxONkkUL_iWBISGhIQhDaMoXKVJmASMFjSiJAmTEEUBVIyLlaOCjqgsuDE1bJN1GJOFYDkI41-BCZHwhr0SEcfyFnrrfJZ5fXKEU3BjzR3Fcitga6xm8gS4NuwE7tW1f0fhEt_fctv3YuaOnUWtxXZCo7g91_mqUFVLWduf5UUrz2PIi8_LIPLi8_4zAAD__-daZK4">