<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/89237>89237</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [DAG] SelectionDAGBuilder - add NSW/NUW flags support and initial testing
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:SelectionDAG
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          RKSimon
      </td>
    </tr>
</table>

<pre>
    This should do it:
```cpp
void SelectionDAGBuilder::visitTrunc(const User &I) {
  // TruncInst cannot be a no-op cast because sizeof(src) > sizeof(dest).
  SDValue N = getValue(I.getOperand(0));
  EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
 I.getType());

  SDNodeFlags Flags;
  if (auto *TI = dyn_cast<TruncInst>(&I)) {
 Flags.setNoSignedWrap(TI->hasNoSignedWrap());
 Flags.setNoUnsignedWrap(TI->hasNoUnsignedWrap());
  }

 setValue(&I, DAG.getNode(ISD::TRUNCATE, getCurSDLoc(), DestVT, N, Flags));
}
```

But then we need to add a lot of general test coverage: https://alive2.llvm.org/ce/z/-wXZPE (a couple of trivial examples)

CC @elhewaty @nikic @goldsteinn 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx0VNFu6jgQ_ZrhZQQKTmiShzxQQq7QVuzqkrarfVkZewjede0oduj2fv3KpqWU3StFwbGPz5w5Mwx3TnWGqILFPSzqCR_90Q7V91926sWayd7Kt6o9KofuaEctUVpUHtIlJDUkS7hLzo_o-_POySqJO9IkvLKmXn67H5WWNIQr6fKknPLtMBoBrBDWOI-PjgYEdrcBViLk92caRGANsAYjeBOAghtjPe4JORo7tT0K7sK34KMjdOoH2QOwwg0iUqXrzz1JzgMrZx_ku_qJ65Fwi5DW2JGPn8CKzawj_2tPAzcSWJEAK8OTXmStn1qsyfmnNl6tl9_CjZYPHfkH-0qDMt3GHCywIgT8oG7f-kD_Dq-55w_8zY7-DAO2eueP8d_BN7E_tW-tpEbzzmF8X6lTBwRW8NFbBLZsN1GjfDN_BqsgXV3chHQdI0TbvzofOWeO_NbuQmvI54H3wIp2M4V0feTuZv_Woqv7j8b9hOHm5D82Q15_ydp9lugsevVhfTAjFG5Xn1us_f64XS3bdYB05FfjsKsfrLgY_V69sNqG19nCG6sv0T_6-1rM_ejRH8ngK6EhkugtcimRo7Ye7QE7MjRwjZ5C29oTDbwjSJd49L53QWbsba7VidhM69PLzA4dsEYQsOYHsGb6-vsfv61jLVHYsdcUeP2gToprpH_4S68pqr7StVohZAnpI71y_xbWRv2tRFh0VkvnSRmDE1mlskxLPqFqns_TLCuTfDE5VocySXIxZ1xKmeepoH2aS0k0T7MklwsxURVLWJZk82KeJVmazcqML0palIc7wcSCFyH6C1f6ktJEOTdSVZQszSea70m7OGcYCwhIl9eDAhgLA2iowtl0P3YOskQr590nn1dex1EV8Iv6_wYNTmMxtrtnYM328RkP8Z_ixr63g0duJCqjvHqvjzLdZBx09bU0nfLHcT8T9gVYE7Wef6b9YP8i4YE1MTUHrInZ_RsAAP__B1WXOw">