Skip to content

Commit b52174d

Browse files
[LLVM][NVPTX] Add support for div.full instruction
This commit adds NVPTX support for div.full PTX instruction with test under div.ll
1 parent 2906fca commit b52174d

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

llvm/include/llvm/IR/IntrinsicsNVVM.td

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,6 +820,13 @@ let TargetPrefix = "nvvm" in {
820820
DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
821821
[IntrNoMem]>;
822822

823+
def int_nvvm_div_full : ClangBuiltin<"__nvvm_div_full">,
824+
DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
825+
[IntrNoMem]>;
826+
def int_nvvm_div_full_ftz : ClangBuiltin<"__nvvm_div_full_ftz">,
827+
DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
828+
[IntrNoMem]>;
829+
823830
//
824831
// Sad
825832
//

llvm/lib/Target/NVPTX/NVPTXIntrinsics.td

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,18 @@ def INT_NVVM_DIV_RM_D : F_MATH_2<"div.rm.f64 \t$dst, $src0, $src1;",
10961096
def INT_NVVM_DIV_RP_D : F_MATH_2<"div.rp.f64 \t$dst, $src0, $src1;",
10971097
Float64Regs, Float64Regs, Float64Regs, int_nvvm_div_rp_d>;
10981098

1099+
def : Pat<(int_nvvm_div_full Float32Regs:$a, Float32Regs:$b),
1100+
(FDIV32rr Float32Regs:$a, Float32Regs:$b)>;
1101+
1102+
def : Pat<(int_nvvm_div_full Float32Regs:$a, fpimm:$b),
1103+
(FDIV32ri Float32Regs:$a, f32imm:$b)>;
1104+
1105+
def : Pat<(int_nvvm_div_full_ftz Float32Regs:$a, Float32Regs:$b),
1106+
(FDIV32rr_ftz Float32Regs:$a, Float32Regs:$b)>;
1107+
1108+
def : Pat<(int_nvvm_div_full_ftz Float32Regs:$a, fpimm:$b),
1109+
(FDIV32ri_ftz Float32Regs:$a, f32imm:$b)>;
1110+
10991111
//
11001112
// Sad
11011113
//

llvm/test/CodeGen/NVPTX/div.ll

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
; RUN: llc < %s -march=nvptx64 | FileCheck %s
2+
; RUN: %if ptxas %{ llc < %s -march=nvptx64 | %ptxas-verify %}
3+
4+
define float @div_full(float %a, float %b) {
5+
; CHECK: div.full.f32 {{%f[0-9]+}}, {{%f[0-9]+}}, {{%f[0-9]+}}
6+
%1 = call float @llvm.nvvm.div.full(float %a, float %b)
7+
; CHECK: div.full.ftz.f32 {{%f[0-9]+}}, {{%f[0-9]+}}, {{%f[0-9]+}}
8+
%2 = call float @llvm.nvvm.div.full.ftz(float %1, float %b)
9+
ret float %2
10+
}

0 commit comments

Comments
 (0)