[SelectionDAG] Combine U{ADD,SUB}O diamonds into {ADD,SUB}CARRY
authorDavid Zarzycki <dave@znu.io>
Wed, 20 Nov 2019 13:52:24 +0000 (15:52 +0200)
committerDavid Zarzycki <dave@znu.io>
Wed, 20 Nov 2019 14:25:42 +0000 (16:25 +0200)
commit257acbf6aee983227a3976d10d0086f3600f2bee
tree4b932c24d1b5c04aabc78dc1ad4904667ff6260b
parentf8c92b8ee242bbdc209204f09aefdc207aac42ee
[SelectionDAG] Combine U{ADD,SUB}O diamonds into {ADD,SUB}CARRY

Summary:
Convert (uaddo (uaddo x, y), carryIn) into addcarry x, y, carryIn if-and-only-if the carry flags of the first two uaddo are merged via OR or XOR.

Work remaining: match ADD, etc.

Reviewers: craig.topper, RKSimon, spatel, niravd, jonpa, uweigand, deadalnix, nikic, lebedev.ri, dmgreen, chfast

Reviewed By: lebedev.ri

Subscribers: chfast, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D70079
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/test/CodeGen/X86/addcarry.ll
llvm/test/CodeGen/X86/subcarry.ll