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