[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