Skip to content

Commit 14f052b

Browse files
committed
Use DAG.getNeutralElement()
1 parent ef768e8 commit 14f052b

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7562,10 +7562,11 @@ SDValue AArch64TargetLowering::LowerFMUL(SDValue Op, SelectionDAG &DAG) const {
75627562
auto FCVT = MakeGetIntrinsic(Intrinsic::aarch64_sve_fcvt_bf16f32_v2);
75637563
auto FCVNT = MakeGetIntrinsic(Intrinsic::aarch64_sve_fcvtnt_bf16f32_v2);
75647564

7565-
SDValue Zero = DAG.getConstantFP(0.0, DL, MVT::nxv4f32);
75667565
SDValue LHS = Op.getOperand(0);
75677566
SDValue RHS = Op.getOperand(1);
75687567

7568+
SDValue Zero =
7569+
DAG.getNeutralElement(ISD::FADD, DL, MVT::nxv4f32, Op->getFlags());
75697570
SDValue Pg =
75707571
DAG.getConstant(1, DL, VT == MVT::nxv2bf16 ? MVT::nxv2i1 : MVT::nxv4i1);
75717572

llvm/test/CodeGen/AArch64/sve-bf16-arith.ll

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@ define <vscale x 2 x bfloat> @fmul_nxv2bf16(<vscale x 2 x bfloat> %a, <vscale x
540540
; NOB16B16-STREAMING-NEXT: bfmlalb z2.s, z0.h, z1.h
541541
; NOB16B16-STREAMING-NEXT: bfcvt z0.h, p0/m, z2.s
542542
; NOB16B16-STREAMING-NEXT: ret
543-
%res = fmul <vscale x 2 x bfloat> %a, %b
543+
%res = fmul nsz <vscale x 2 x bfloat> %a, %b
544544
ret <vscale x 2 x bfloat> %res
545545
}
546546

@@ -565,7 +565,7 @@ define <vscale x 4 x bfloat> @fmul_nxv4bf16(<vscale x 4 x bfloat> %a, <vscale x
565565
; NOB16B16-STREAMING-NEXT: bfmlalb z2.s, z0.h, z1.h
566566
; NOB16B16-STREAMING-NEXT: bfcvt z0.h, p0/m, z2.s
567567
; NOB16B16-STREAMING-NEXT: ret
568-
%res = fmul <vscale x 4 x bfloat> %a, %b
568+
%res = fmul nsz <vscale x 4 x bfloat> %a, %b
569569
ret <vscale x 4 x bfloat> %res
570570
}
571571

@@ -596,6 +596,27 @@ define <vscale x 8 x bfloat> @fmul_nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x
596596
; NOB16B16-STREAMING-NEXT: bfcvt z0.h, p0/m, z2.s
597597
; NOB16B16-STREAMING-NEXT: bfcvtnt z0.h, p0/m, z3.s
598598
; NOB16B16-STREAMING-NEXT: ret
599+
%res = fmul nsz <vscale x 8 x bfloat> %a, %b
600+
ret <vscale x 8 x bfloat> %res
601+
}
602+
603+
define <vscale x 8 x bfloat> @fmul_nxv8bf16_no_nsz(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) {
604+
; NOB16B16-LABEL: fmul_nxv8bf16_no_nsz:
605+
; NOB16B16: // %bb.0:
606+
; NOB16B16-NEXT: mov w8, #-2147483648 // =0x80000000
607+
; NOB16B16-NEXT: ptrue p0.s
608+
; NOB16B16-NEXT: mov z2.s, w8
609+
; NOB16B16-NEXT: mov z3.d, z2.d
610+
; NOB16B16-NEXT: bfmlalb z2.s, z0.h, z1.h
611+
; NOB16B16-NEXT: bfmlalt z3.s, z0.h, z1.h
612+
; NOB16B16-NEXT: bfcvt z0.h, p0/m, z2.s
613+
; NOB16B16-NEXT: bfcvtnt z0.h, p0/m, z3.s
614+
; NOB16B16-NEXT: ret
615+
;
616+
; B16B16-LABEL: fmul_nxv8bf16_no_nsz:
617+
; B16B16: // %bb.0:
618+
; B16B16-NEXT: bfmul z0.h, z0.h, z1.h
619+
; B16B16-NEXT: ret
599620
%res = fmul <vscale x 8 x bfloat> %a, %b
600621
ret <vscale x 8 x bfloat> %res
601622
}

0 commit comments

Comments
 (0)