<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/147683>147683</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[DAG] Fold trunc(abdu(x,y)) and trunc(abds(x,y)) if they have sufficient leading zero/sign bits
</td>
</tr>
<tr>
<th>Labels</th>
<td>
good first issue,
llvm:SelectionDAG
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RKSimon
</td>
</tr>
</table>
<pre>
https://zig.godbolt.org/z/f3ac4Moxr
```
SelectionDAG has 12 nodes:
t0: ch,glue = EntryToken
t2: v4i16,ch = CopyFromReg t0, Register:v4i16 %0
t5: v4i32 = zero_extend t2
t4: v4i16,ch = CopyFromReg t0, Register:v4i16 %1
t6: v4i32 = zero_extend t4
t13: v4i32 = abdu t5, t6
t9: v4i16 = truncate t13
t11: ch,glue = CopyToReg t0, Register:v4i16 $d0, t9
t12: ch = AArch64ISD::RET_GLUE t11, Register:v4i16 $d0, t11:1
```
If a ABD node has sufficient leading zero/sign bits then it should still work in a truncated type - it doesn't have to be from a zext/sext_extend node specifically so computeKnownBits/ComputeNumSignBits should probably be used.
- [ ] Create alive2 links to prove when abd patterns can be safely truncated
- [ ] Add test coverage (using aarch64 intrinsics is probably easiest as that will always start from ISD::ABDU/S nodes)
- [ ] Add suitable folds in DAGCombiner::visitTRUNCATE - including legality checks
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVMtu4zgQ_Br60oghtSTHPvigyPFgMLtzyOM8oMSWxA1NGmTLifL1C9J5TDJAsFhDgAGyWF1d_ZAh6MESbUV1JardQk48Or-9-XGrD84uWqfm7ch8DKKoBe4F7p_1sBycap3hpfNDPBG47wvZlX-7Jy-yOn6r7OXL6lsy1LF2dld_g1EGyBGsU5QosxqAM1HU0I0Cm8FMBKLYwbVlP9-5B7IJ8vpjjNBTqfOVwKYbE7Zxx3nv3eGGhsiFDdzQoAOTF0WdsCCwyn4j4uqFpsDE8Eze_aInJqtiiKwGLv93oPz3QKsvApVvQM6LjzjZqimqxCZSnGG8eZOUMOwn20mm9Dr5mOd_Ghk137kvFZcq3fDmhQXPLOl5XftuXJXfb3exWkV9c33369tf99cp2Nd0SU3-qRlEVn_vQUJ9tUtNkBoiTH2vO02WwZBU2g7JKIH72JzQag7AI1nQDGF0k1EQWBsDj84_gLYg38xQwPOR4CJClaNgBV4yjPJEwA5agt67A0h4pieO_PTEr_VIcsKROt3rThozQ3DQucNxYvph3aO90hwE7pvz0c_pcKuHdPgq6uhdK1szxzhTILU8J3wBoroCUe2g8RQLJo0-EYLR9iFEWUfvTgSPMUPZKjhKZvI2QCdtpAqyJzO_p_iBslYKmAJD507k5UAgcD2F6KGUqXagLXttg-4C6PAukmTQ8aGM5kqGx-ioNI9yDhBYej579Vb6-mp3L3B_-zK8uPlDR5g0y9YQ9M6oEAuzq7817tBqmzokNokOmu9u7n829d11LJPtzJQqbmiQRvMM3UjdQ1iobaE2xUYuaJtfVphV1bqqFuMW-2KVZ51aF32H-QplToT95brMqhX2m3yht5hhlV1mmzzLs6paqg5pQyirKu8rLEtRZnSQ2iyNOR3iDlvoECba5uXlal0sjGzJhLQQEQfnFPTaB4YEEogCG4EY34riw3KLd9Vu4bfx7qKdhiDKzOjA4T0SazZp2UZ8tYO9M-pcWYHrOPUC108Cmzn6ixuQ9sN1-HSt-zgY87nB_8MYLSZvPu3zQfM4tcvOHQTuU1bnv4ujd_9QF6ckZR5b_8Wh0xb_DQAA___F4u0R">