<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/147773>147773</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[DAG] Fold trunc(avg(x,y)) for avgceil/floor u/s nodes 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>
Similar to #147683
If a ISD::AVG* node has sufficient leading zero/sign bits then it should still work in a truncated type.
- [ ] Create alive2 links to prove when all 4 avg patterns can be safely truncated
- [ ] Add test coverage (using aarch64 hadd intrinsics is probably easiest as that will always start from the correct nodes)
- [ ] Add suitable folds in DAGCombiner::visitTRUNCATE - including legality checks
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMUjuP40YM_jWjhlhDHr2sQoXOjheHACluL-kpiZKYHWuMISVH-fXB2AEOQZqrWPDx8XugCE8LUWOKL6a4JLjq7EPz7dcPvvkl6fywNx98Y4cB1IOx2TGvylNm0tak7dcREL5-XEzWmqxt_3g3toXFDwQzCsg6jtwzLQqOcOBlgr8peGOvERM6VgGdaQFWkNmvbgBRdg4ePnwCL4CgYV16VBpA9zsdXqhvYIovYIoLnAOhEqDjjSw4Xj4lfnkPfiN4xNPoHOSA2wR3VKWwCPS4QEcgOJLbfyD853A7DKAkCr3fKOBEYOxplUgBMfRzmcOMwwC8aOBFuBdgibgddm4HQuG4jZEgKjwiK3QP3AVEMSiMwd8ieeh9CNTrUzUxtv7fG7KyYucIRu8GibJc2vezv3W8UHgJv7Gwfv_2-2_n9vsv8Aa89G596u1oQse6Qz9T_ynJ0GRDndWYUHOsCptWZZZlydwMY1dZKjEvS8zrU3HC0aZDXeOR8HQc84Qbm9oirdL6WBT2mB2yssjzsqYxy21WlaXJU7ohu4Nz2-3gw5SwyErNMa-qKkscduTkmTJrJ-8HGDmIwnPIWGvs2Vgbd03WfpCjXtkvl_Y99opLEprYe-vWSUyeOhaVH0jK6p4JjvPFBa7eDS9jjT3hNhl7-svY8x7ltTWMPsRE9MTO2OvovA-wxlS-TAAeozM7zLjRz4Q4WYNrZtW7RDvs1djrxDqv3aH3N2OvT1av8nYP_k_q1djrk7kYe_1Xoa2x_wQAAP__09womg">