[llvm] [DAGCombiner] Add basic support for `trunc nsw/nuw` (PR #113808)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Oct 27 07:56:02 PDT 2024
================
@@ -14083,24 +14084,23 @@ SDValue DAGCombiner::visitZERO_EXTEND(SDNode *N) {
unsigned OpBits = SrcVT.getScalarSizeInBits();
unsigned MidBits = MinVT.getScalarSizeInBits();
unsigned DestBits = VT.getScalarSizeInBits();
- unsigned NumSignBits = DAG.ComputeNumSignBits(Op);
- if (OpBits == DestBits) {
- // Op is i32, Mid is i8, and Dest is i32. If Op has more than 24 sign
- // bits, it is already ready.
- if (NumSignBits > DestBits - MidBits)
+ if (N0->getFlags().hasNoSignedWrap() ||
+ DAG.ComputeNumSignBits(Op) > OpBits - MidBits) {
----------------
goldsteinn wrote:
Should probably just set `nsw` if `visitTrunc` if `computeNumSignBits >= OldSize - NewSize`
Likewise `nuw` if high bits are zero.
https://github.com/llvm/llvm-project/pull/113808
More information about the llvm-commits
mailing list