<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61225>61225</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] Optimize umax(X,1) vector cases
</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>
Branched from #60374
https://alive2.llvm.org/ce/z/7j6G_X
```ll
define <4 x i32> @src(<4 x i32> %X) {
%add = umax <4 x i32> %X, { 1, 1, 1, 1 }
ret <4 x i32> %add
}
=>
define <4 x i32> @tgt(<4 x i32> %X) {
%F = freeze <4 x i32> %X
%cmp = icmp eq <4 x i32> %F, { 0, 0, 0, 0 }
%ext = sext <4 x i1> %cmp to <4 x i32>
%res = sub <4 x i32> %F, %ext
ret <4 x i32> %res
}
Transformation seems to be correct!
```
```asm
src: # @src
movdqa .LCPI0_0(%rip), %xmm1
pxor %xmm0, %xmm1
pcmpgtd .LCPI0_1(%rip), %xmm1
pand %xmm1, %xmm0
paddd %xmm1, %xmm0
pcmpeqd %xmm1, %xmm1
psubd %xmm1, %xmm0
retq
tgt: # @tgt
pxor %xmm1, %xmm1
pcmpeqd %xmm0, %xmm1
psubd %xmm1, %xmm0
retq
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVF9v2j4U_TQ3L1aRfZ0_8JAHWpqfftqkTdse-lY5sQF3cRJsB7F--skJFAotYhEy5nLO8fHlcoRzetUolUNyD8kiEr1ftzb_8eWnNm0Tla38k99b0VRrJcnStoYA8pTyLAa6ADof17X3nQM-BywAC1HrrcJJXW_NpLUrwKJSgMUrYJG9pP89P51SIaXjq67HglRL3SgC_CEmO6I5An8kEFNnK8DpWRmTJ8AZgex-JJNQElIS4AvSG7E71xkID4FAWNicLASyxUHFKn_JFFLuPR-AwBfAH6_79it_o-9icL20Sr1e6ATCEVmZbsDqsFGbS3BxuCQNm5Pl9JKAidr5QciNm1GF7UWCuG_fi59wrXIjty8_MzAccLWnVrmznv6yonHL1hrhddsQp5RxwUapSNVaqyoPyM5m58OBEs6MlTA5fE5ueAD5YdT2psfHtFu5EYRMvj58_58-0_CDYmJ1BzjbX3RnDHtP6natHUXDl_RzXGW6lZcHcXabuGjkUZwdcfQcJ6W8BVeZTm3kJe5wbuf68hYhq_xmrITB5_NDT8OnK-354MQPnV1p4z8bfJuUSOZczvhMRCpnaTZlOOVpEq3zSi4xFZzFZZZhmjA-zegsmfFSsbisZjLSOVLklNOUTeOUJpMkLRXGjCWxXFLGM4ipMkLXb2kYaed6lacMMYlqUaraDdmLWIrqt2ok8PnTNAXEEMc2D7y7sl85iGmtnXdHJa99PQR3wCcL8q3z2uhXNQQf4DQkHQsxs1WVby2phFMu6m2dv8_rlfbrvpxUrQEsgvr-7a6z7cvwfysG0w6wGHz_DQAA__-6G5sO">