Skip to content

Commit aebcbc9

Browse files
committed
Use addp instead of ext + add
1 parent f15c8ed commit aebcbc9

File tree

2 files changed

+6
-7
lines changed

2 files changed

+6
-7
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30776,9 +30776,8 @@ AArch64TargetLowering::LowerPARTIAL_REDUCE_MLA(SDValue Op,
3077630776
SDValue WideAcc = DAG.getInsertSubvector(DL, ZeroVec, Acc, 0);
3077730777
SDValue Wide = DAG.getNode(Op.getOpcode(), DL, MVT::v4i32,
3077830778
WideAcc, LHS, RHS);
30779-
SDValue Lo = DAG.getExtractSubvector(DL, MVT::v2i32, Wide, 0);
30780-
SDValue Hi = DAG.getExtractSubvector(DL, MVT::v2i32, Wide, 2);
30781-
return DAG.getNode(ISD::ADD, DL, ResultVT, Lo, Hi);
30779+
SDValue Reduced = DAG.getNode(AArch64ISD::ADDP, DL, MVT::v4i32, Wide, Wide);
30780+
return DAG.getExtractSubvector(DL, MVT::v2i32, Reduced, 0);
3078230781
}
3078330782

3078430783
if (ConvertToScalable) {

llvm/test/CodeGen/AArch64/neon-partial-reduce-dot-product.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1483,17 +1483,17 @@ define <2 x i32> @udot_v16i8tov2i32(<2 x i32> %acc, <16 x i8> %input) {
14831483
; CHECK-DOT-NEXT: movi v2.16b, #1
14841484
; CHECK-DOT-NEXT: fmov d0, d0
14851485
; CHECK-DOT-NEXT: udot v0.4s, v1.16b, v2.16b
1486-
; CHECK-DOT-NEXT: ext v1.16b, v0.16b, v0.16b, #8
1487-
; CHECK-DOT-NEXT: add v0.2s, v0.2s, v1.2s
1486+
; CHECK-DOT-NEXT: addp v0.4s, v0.4s, v0.4s
1487+
; CHECK-DOT-NEXT: // kill: def $d0 killed $d0 killed $q0
14881488
; CHECK-DOT-NEXT: ret
14891489
;
14901490
; CHECK-DOT-I8MM-LABEL: udot_v16i8tov2i32:
14911491
; CHECK-DOT-I8MM: // %bb.0: // %entry
14921492
; CHECK-DOT-I8MM-NEXT: movi v2.16b, #1
14931493
; CHECK-DOT-I8MM-NEXT: fmov d0, d0
14941494
; CHECK-DOT-I8MM-NEXT: udot v0.4s, v1.16b, v2.16b
1495-
; CHECK-DOT-I8MM-NEXT: ext v1.16b, v0.16b, v0.16b, #8
1496-
; CHECK-DOT-I8MM-NEXT: add v0.2s, v0.2s, v1.2s
1495+
; CHECK-DOT-I8MM-NEXT: addp v0.4s, v0.4s, v0.4s
1496+
; CHECK-DOT-I8MM-NEXT: // kill: def $d0 killed $d0 killed $q0
14971497
; CHECK-DOT-I8MM-NEXT: ret
14981498
entry:
14991499
%input.wide = zext <16 x i8> %input to <16 x i32>

0 commit comments

Comments
 (0)