[llvm] afdaa86 - [DAGCombine] Extend combineCarryDiamond()
Paweł Bylica via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 23 12:38:51 PST 2022
Author: Pawe Bylica
Date: 2022-02-23T21:37:49+01:00
New Revision: afdaa86b771f9fa7bcf3ac273ae6f9637943c0d1
URL: https://github.com/llvm/llvm-project/commit/afdaa86b771f9fa7bcf3ac273ae6f9637943c0d1
DIFF: https://github.com/llvm/llvm-project/commit/afdaa86b771f9fa7bcf3ac273ae6f9637943c0d1.diff
LOG: [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
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/test/CodeGen/X86/addcarry.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 6c5286277ba9d..4ed38c3ea243c 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -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();
diff --git a/llvm/test/CodeGen/X86/addcarry.ll b/llvm/test/CodeGen/X86/addcarry.ll
index 02c2110b37b9c..3d996619c94ba 100644
--- a/llvm/test/CodeGen/X86/addcarry.ll
+++ b/llvm/test/CodeGen/X86/addcarry.ll
@@ -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)
More information about the llvm-commits
mailing list