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