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