<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/92226>92226</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            ARM32 fcpyd ASM generates redundant vmov.f64 instructions
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          kongy
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/jns6Y4M97

Input:
```
extern bool USE(double a, double b);

#define SET_FREG(n, v) \
  ({ const double _v{v}; asm volatile("fcpyd d"#n ", %P0" : : "w"(_v) : "d"#n); })
#define GET_FREG(n) ({ double _r; asm volatile("fcpyd %P0, d"#n : "=w"(_r) : :); _r;})

void foo() {
  SET_FREG(8, 8);
 SET_FREG(9, 9);
  SET_FREG(10, 10);
  SET_FREG(11, 11);
 SET_FREG(12, 12);
  SET_FREG(13, 13);
  USE(8.0, GET_FREG(8));
 USE(9.0, GET_FREG(9));
  USE(10.0, GET_FREG(10));
  USE(11.0, GET_FREG(11));
  USE(12.0, GET_FREG(12));
  USE(13.0, GET_FREG(13));
}
```

Command:
`clang++ test.cpp -c -target armv7a-linux-androideabi -march=armv8-a -O2 -S -o -`

Output:
```
foo():
        push    {r11, lr}
 vpush   {d8, d9, d10, d11, d12, d13, d14, d15}
        vmov.f64 d16, #8.000000e+00
        vmov.f64        d8, d16
        vmov.f64 d17, #1.300000e+01
        vmov.f64        d14, #9.000000e+00
 vmov.f64        d9, d14
        vmov.f64        d18, #1.200000e+01
 vmov.f64        d15, #1.000000e+01
        vmov.f64        d10, d15
        vmov.f64        d19, #1.100000e+01
        vmov.f64 d11, d19
        vmov.f64        d12, d18
        vmov.f64        d13, d17
        vmov.f64        d8, d17         <-- Redundant vmov
 vmov.f64        d17, d8
        vmov    r0, r1, d16
        vmov    r2, r3, d17
        vmov.f64        d10, d19        <-- Redundant vmov
 vmov.f64        d9, d18         <-- Redundant vmov
        bl USE(double, double)
        vmov.f64        d16, d9
        vmov    r0, r1, d14
        vmov    r2, r3, d16
        bl      USE(double, double)
        vmov.f64        d16, d10
        vmov    r0, r1, d15
        vmov    r2, r3, d16
        bl      USE(double, double)
 vmov.f64        d16, d11
        vmov    r0, r1, d10
 vmov    r2, r3, d16
        bl      USE(double, double)
 vmov.f64        d16, d12
        vmov    r0, r1, d9
        vmov    r2, r3, d16
        bl      USE(double, double)
        vmov.f64 d16, d13
        vmov    r0, r1, d8
        vmov    r2, r3, d16
 vpop    {d8, d9, d10, d11, d12, d13, d14, d15}
        pop     {r11, lr}
        b       USE(double, double)
```

This issue has been there since at least LLVM 9.0.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0l11v4ygXxz8NuTlyhA_xCxe5aJKmeqSp5lE7u9JeVdjQxLOOiQzOTPfTrwx2mtTxJLs7g1pozZ_Dj3MOYAtjik2l1JxECxKtJqKxW13P_9TV5m2Safk231q7N4TdEVwTXG-0zHRpp7reEFz_RXD9tTLxH7NHnhC6IvTO1_-r9o1tB_lnMe1-3L_qu1V1BZnWJfz2fE8wlbrJSgWC4BK6vzOCnLDFqVGCTKrXolLwfP_lZf10_0AwrdoxB4IcSLT0OgCCKUkWkOvK2N7gy4EkiwNJVoQtQJgdHHQpbFGqVoz4mu_fJEiCSJBV4NolEIz-TwkiEHbnfxG_ub70xU_qn_XjPDS0syD_SP1wRs17yp6v_hFYB7I8IfQzE7bqgeojUBstB-KMntG4-qALCa9auxk4kGTRe-7Es2k7XXoahtNe3vbys97T7tDBtvWYIHSCcMx-6Pzf1mMGmBOwc4HPp3Tqpn84W8w5rBfygZB_FHbKkA6kfnWXtOFQG45pcajFMS0batkHbRvsS5vO10u924lKnu7MvBTVhuCC4AKsMnaa7_cQ5BBYUW-UBVHvDokIyqJqvgeikrUupBJZAcFO1PmWsFWrSAMBwWeE4BkCDcGHaT839gfnwTERjwLoyr4x27YlyaL2CVPWxwXCoesmyUK6ZJUuKaXPPekHSJ9I0qeLDGe-id7NdOWw04fpazwDGcZ-67N0Sl1RBBeUjsi70hGE8ajVpLMaTtm71fCKVc9LkPFLLAM57xd5xWp6ZMEhy1AeHeX0H6DT3tVXdPxoPbxu_RhWfs1sF_f0mq5LjOS2-Cb9AyBsGQTwpGRTSVFZN2LUgy748gJL29bOU3U4mkFO5NZT30jbO5__G9oui9JbltqV7Pwqf7_IjzfPOGrc7d0bfHMhsYe-iQdorvxHvvDCATAEvJDsPw1wlOzCXhmSnZ4Zvx4Jb0Aai_ivCOYRjN0ANrZNL4Id9noPP-0W6oyN3Hi9E-AmJ1x8A_iyLQwUxjQKtsJAplQFdqtqBaaocgXCQqmEsfDp0--PwKd0OpFzJjnjYqLmYRJGSRzOZvFkO-cpDfM4ZDxjWRpzVCyWOZ-JJEmjhMZ0UsyR4oxGYURTnNF4KlOeS0V5hCKjSszIjKqdKMppWR527TfFxJHNOSLGk1JkqjTuywSxUt88dvuyG60m9bwdE2TNxpAZLQtjzbsVW9hSze-eHhmCf3--e36EjapULawyUJ-dZC5BisrYusltoSszaery43dPYbdNNs31juC6nadrgn2tv6rcElw7OkNw7ej_DgAA___0h1ED">