[PATCH] D70079: [SelectionDAG] Combine U{ADD,SUB}O diamonds into {ADD,SUB}CARRY
David Zarzycki via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 18 05:37:03 PST 2019
davezarzycki marked 4 inline comments as done and an inline comment as not done.
davezarzycki added inline comments.
================
Comment at: lib/CodeGen/SelectionDAG/DAGCombiner.cpp:2873
+ return Merged.getValue(1);
+ DAG.ReplaceAllUsesOfValueWith(Carry1.getValue(0), Merged.getValue(0));
+ return DAG.getConstant(0, DL, MVT::i1);
----------------
lebedev.ri wrote:
> I'm not following this bit, why do we do this only for `ISD::AND`?
>
As the comment above tries to explain, we can prove in this diamond UADDO/USUBO scenario that it is impossible for both UADDO/USUBO nodes to overflow at the same time. Either one does, or the other, therefore using AND to merge the carry flags will always return zero.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70079/new/
https://reviews.llvm.org/D70079
More information about the llvm-commits
mailing list