<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60170>60170</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] Failure to simplify 'lower half' <4 x float> masked load/store to VMOVSD load/store
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RKSimon
</td>
</tr>
</table>
<pre>
https://gcc.godbolt.org/z/1hvT51h1b
```
define void @copyme1(ptr noundef %src, ptr noalias noundef %dst) {
%load = tail call <4 x float> @llvm.masked.load.v4f32.p0(ptr %src, i32 1, <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x float> poison)
tail call void @llvm.masked.store.v4f32.p0(<4 x float> %load, ptr %dst, i32 1, <4 x i1> <i1 true, i1 false, i1 false, i1 false>)
ret void
}
define void @copyme2(ptr noundef %src, ptr noalias noundef %dst) {
%load = tail call <4 x float> @llvm.masked.load.v4f32.p0(ptr %src, i32 1, <4 x i1> <i1 true, i1 true, i1 false, i1 false>, <4 x float> poison)
tail call void @llvm.masked.store.v4f32.p0(<4 x float> %load, ptr %dst, i32 1, <4 x i1> <i1 true, i1 true, i1 false, i1 false>)
ret void
}
declare <4 x float> @llvm.masked.load.v4f32.p0(ptr nocapture, i32 immarg, <4 x i1>, <4 x float>)
declare void @llvm.masked.store.v4f32.p0(<4 x float>, ptr nocapture, i32 immarg, <4 x i1>)
```
while copyme1 gets simplifed, copyme2 does not:
```
copyme1: # @copyme1
vmovss (%rdi), %xmm0 # xmm0 = mem[0],zero,zero,zero
vmovss %xmm0, (%rsi)
retq
.LCPI1_0:
.long 4294967295 # 0xffffffff
.long 4294967295 # 0xffffffff
.long 0 # 0x0
.long 0 # 0x0
copyme2: # @copyme2
vmovaps .LCPI1_0(%rip), %xmm0 # xmm0 = [4294967295,4294967295,0,0]
vmaskmovps (%rdi), %xmm0, %xmm1
vmaskmovps %xmm1, %xmm0, (%rsi)
retq
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVk2P2zYQ_TXjCxGBGoqWffDBa0dA0RYtmiLoraBEymaXElWScnbz6wt9-dtJsGgOEWyIosg3b96MHii817taqRXwJ-DbmWjD3rrVHz9_0JWtZ7mVr6t9CI0HtgbMALNdUUQ7K3NrQmTdDjD7DJjF-8OfPN7HOdAt0DXM6fjrH6Uqda3IwWpJIKGFbV4rFQMumuBIbdtaqpIAcu8KwA0ZZoXRwp-_lT4ALgmkTwMq6SaNFZIA25IgtCGFMIYA2yTkhZTGigDsfRfRmEMVVcI_Kxl1O6JDUjKMGjpyOMXWDEncDUYUHfcQbKNjElyr-jUxKYXxj8fs_RnCkUdjtbc14HKif6I8KXPO0wfr1DnRm7yG7CfFJoX-xxyOTJ0KPcexuul2HDyuLv7I1f2iSD9Gcb-awrfWtjDCqbeoXttCNKF1amKtq0p0hnFJ_Y6YR3JT9LcoeGq1b6SxvGtdn_baKDI6Ftmp4InXVWN0qfrijN1OpFVdO4fOJ-_hTJ7H1uQrFyA7N8mxSsN1qOzB-27NApA7qTvaXSbIX6qKPkDrX3VfUaUq4E8U-BZw81k5e3V7EKvHHsL0Yb0-tY9T4d9hGP2y-f2n-G96VGACioytd4SQBJfJcp7ikj9OnL6U4_X9MO7JdIsx1u1tuyYPZOvLcuKtxKLx5CjdoK9uHpb1opzAn056AG4uHmj_59vriMI_V_bQ-AnvbiOdhjcNeL1_WHS99Qt9cvwwZnLF5JItxUyt4nmaIC7SOJ3tVzJPloxxLBNeJkU8LwuhuKKCzrFI5krM9AopMhojjTmLeRpJxQsupaTpgso8zyGhqhLaRL1jWLebae9btZrTOKUzI3JlfH_kQcxF8axqCWz912IOiN0pyK26fe_yduc719E--BNS0MH056VuPd-STGjTOkWCnZzhlQCmxn5SjuyFKQHTG_8cTIwMFp_1XtYBfPz1t48fthfTs9aZ6yOYDvs2jwpbAWYdr_H2rnH2H1UEwKxP1wNmfcb_BQAA__-lKr1p">