[DAGCombine] Extend combineCarryDiamond()

In combineCarryDiamond() use getAsCarry() to find more candidates for being a carry flag.

Reviewed By: RKSimon

Differential Revision: https://reviews.llvm.org/D118362
This commit is contained in:
Pawe Bylica 2022-02-23 19:26:48 +01:00 committed by Paweł Bylica
parent 302ca279cb
commit afdaa86b77
No known key found for this signature in database
GPG Key ID: 7A0C037434FE77EF
2 changed files with 8 additions and 6 deletions

View File

@ -3137,9 +3137,14 @@ static SDValue combineADDCARRYDiamond(DAGCombiner &Combiner, SelectionDAG &DAG,
// Our goal is to identify A, B, and CarryIn and produce ADDCARRY/SUBCARRY with
// a single path for carry/borrow out propagation:
static SDValue combineCarryDiamond(SelectionDAG &DAG, const TargetLowering &TLI,
SDValue Carry0, SDValue Carry1, SDNode *N) {
if (Carry0.getResNo() != 1 || Carry1.getResNo() != 1)
SDValue N0, SDValue N1, SDNode *N) {
SDValue Carry0 = getAsCarry(TLI, N0);
if (!Carry0)
return SDValue();
SDValue Carry1 = getAsCarry(TLI, N1);
if (!Carry1)
return SDValue();
unsigned Opcode = Carry0.getOpcode();
if (Opcode != Carry1.getOpcode())
return SDValue();

View File

@ -451,12 +451,9 @@ define { i64, i64, i1 } @addcarry_hidden_2x64(i64 %x0, i64 %x1, i64 %y0, i64 %y1
; CHECK-LABEL: addcarry_hidden_2x64:
; CHECK: # %bb.0:
; CHECK-NEXT: movq %rdi, %rax
; CHECK-NEXT: addq %rcx, %rsi
; CHECK-NEXT: setb %dil
; CHECK-NEXT: addq %rdx, %rax
; CHECK-NEXT: adcq $0, %rsi
; CHECK-NEXT: adcq %rcx, %rsi
; CHECK-NEXT: setb %cl
; CHECK-NEXT: orb %dil, %cl
; CHECK-NEXT: movq %rsi, %rdx
; CHECK-NEXT: retq
%t0 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %x0, i64 %y0)