[PATCH] D69252: [InstCombine] Canonicalize sadd.with.overflow to sadd.sat

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 5 11:15:37 PST 2019


lebedev.ri added a comment.

Not a fan of such large amount of patterns.
There's obvious duplication here:



================
Comment at: llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp:1772
+    };
+
+    // X + Y overflows ? (X <s 0 ? INTMIN : INTMAX) : X + Y --> sadd_sat X, Y
----------------
```
if(Op != X && Op != Y)
  return false;
```


================
Comment at: llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp:1775-1780
+    if (Op == X && Pred == ICmpInst::ICMP_SLT && IsZeroOrOne(*C) &&
+        IsMinMax(TrueVal, FalseVal))
+      return true;
+    // X + Y overflows ? (X >s 0 ? INTMAX : INTMIN) : X + Y --> sadd_sat X, Y
+    // X + Y overflows ? (X >s -1 ? INTMAX : INTMIN) : X + Y --> sadd_sat X, Y
+    if (Op == X && Pred == ICmpInst::ICMP_SGT && IsZeroOrOne(*C + 1) &&
----------------
drop `Op == X && `


================
Comment at: llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp:1783-1792
+    // X + Y overflows ? (Y <s 0 ? INTMIN : INTMAX) : X + Y --> sadd_sat X, Y
+    // X + Y overflows ? (Y <s 1 ? INTMIN : INTMAX) : X + Y --> sadd_sat X, Y
+    if (Op == Y && Pred == ICmpInst::ICMP_SLT && IsZeroOrOne(*C) &&
+        IsMinMax(TrueVal, FalseVal))
+      return true;
+    // X + Y overflows ? (Y >s 0 ? INTMAX : INTMIN) : X + Y --> sadd_sat X, Y
+    // X + Y overflows ? (Y >s -1 ? INTMAX : INTMIN) : X + Y --> sadd_sat X, Y
----------------
drop


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69252/new/

https://reviews.llvm.org/D69252





More information about the llvm-commits mailing list