Skip to content

Commit d0613c1

Browse files
committed
[mlir][LLVMIR] Add lowering support for vp.muladd intrinsic
Reviewed By: gysit Differential Revision: https://reviews.llvm.org/D143449
1 parent e716b02 commit d0613c1

File tree

3 files changed

+8
-1
lines changed

3 files changed

+8
-1
lines changed

mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,8 @@ def LLVM_VPFRemOp : LLVM_VPBinaryF<"frem">;
825825
def LLVM_VPFNegOp : LLVM_VPUnaryF<"fneg">;
826826

827827
// Float Ternary
828-
def LLVM_VPFmaOp : LLVM_VPTernaryF<"fma">;
828+
def LLVM_VPFMulAddOp : LLVM_VPTernaryF<"fmuladd">;
829+
def LLVM_VPFmaOp : LLVM_VPTernaryF<"fma">;
829830

830831
// Integer Reduction
831832
def LLVM_VPReduceAddOp : LLVM_VPReductionI<"add">;

mlir/test/Target/LLVMIR/Import/intrinsic.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,8 @@ define void @vector_predication_intrinsics(<8 x i32> %0, <8 x i32> %1, <8 x floa
629629
%58 = call <8 x i64> @llvm.vp.ptrtoint.v8i64.v8p0(<8 x ptr> %6, <8 x i1> %11, i32 %12)
630630
; CHECK: "llvm.intr.vp.inttoptr"(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi64>, vector<8xi1>, i32) -> !llvm.vec<8 x ptr>
631631
%59 = call <8 x ptr> @llvm.vp.inttoptr.v8p0.v8i64(<8 x i64> %4, <8 x i1> %11, i32 %12)
632+
; CHECK: "llvm.intr.vp.fmuladd"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>, vector<8xf32>, vector<8xi1>, i32) -> vector<8xf32>
633+
%60 = call <8 x float> @llvm.vp.fmuladd.v8f32(<8 x float> %2, <8 x float> %3, <8 x float> %3, <8 x i1> %11, i32 %12)
632634
ret void
633635
}
634636

@@ -762,6 +764,7 @@ declare <8 x float> @llvm.vp.fdiv.v8f32(<8 x float>, <8 x float>, <8 x i1>, i32)
762764
declare <8 x float> @llvm.vp.frem.v8f32(<8 x float>, <8 x float>, <8 x i1>, i32)
763765
declare <8 x float> @llvm.vp.fneg.v8f32(<8 x float>, <8 x i1>, i32)
764766
declare <8 x float> @llvm.vp.fma.v8f32(<8 x float>, <8 x float>, <8 x float>, <8 x i1>, i32)
767+
declare <8 x float> @llvm.vp.fmuladd.v8f32(<8 x float>, <8 x float>, <8 x float>, <8 x i1>, i32)
765768
declare i32 @llvm.vp.reduce.add.v8i32(i32, <8 x i32>, <8 x i1>, i32)
766769
declare i32 @llvm.vp.reduce.mul.v8i32(i32, <8 x i32>, <8 x i1>, i32)
767770
declare i32 @llvm.vp.reduce.and.v8i32(i32, <8 x i32>, <8 x i1>, i32)

mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,9 @@ llvm.func @vector_predication_intrinsics(%A: vector<8xi32>, %B: vector<8xi32>,
593593
// CHECK: call <8 x float> @llvm.vp.fma.v8f32
594594
"llvm.intr.vp.fma" (%C, %D, %D, %mask, %evl) :
595595
(vector<8xf32>, vector<8xf32>, vector<8xf32>, vector<8xi1>, i32) -> vector<8xf32>
596+
// CHECK: call <8 x float> @llvm.vp.fmuladd.v8f32
597+
"llvm.intr.vp.fmuladd" (%C, %D, %D, %mask, %evl) :
598+
(vector<8xf32>, vector<8xf32>, vector<8xf32>, vector<8xi1>, i32) -> vector<8xf32>
596599

597600
// CHECK: call i32 @llvm.vp.reduce.add.v8i32
598601
"llvm.intr.vp.reduce.add" (%i, %A, %mask, %evl) :

0 commit comments

Comments
 (0)