-
Notifications
You must be signed in to change notification settings - Fork 14.7k
[HLSL][DirectX] Fix dot2add
DXIL operation to use float overload
#152781
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-clang @llvm/pr-subscribers-backend-directx Author: Kaitlin Peng (kmpeng) ChangesFixes #152585. The Full diff: https://github.com/llvm/llvm-project/pull/152781.diff 3 Files Affected:
diff --git a/clang/test/CodeGenHLSL/builtins/dot2add.hlsl b/clang/test/CodeGenHLSL/builtins/dot2add.hlsl
index c345e17476e08..7c3a48e476306 100644
--- a/clang/test/CodeGenHLSL/builtins/dot2add.hlsl
+++ b/clang/test/CodeGenHLSL/builtins/dot2add.hlsl
@@ -1,5 +1,5 @@
// RUN: %clang_cc1 -finclude-default-header -fnative-half-type -triple \
-// RUN: dxil-pc-shadermodel6.3-compute %s -emit-llvm -o - | \
+// RUN: dxil-pc-shadermodel6.4-compute %s -emit-llvm -o - | \
// RUN: FileCheck %s --check-prefixes=CHECK,CHECK-DXIL
// RUN: %clang_cc1 -finclude-default-header -fnative-half-type -triple \
// RUN: spirv-pc-vulkan-compute %s -emit-llvm -o - | \
diff --git a/llvm/lib/Target/DirectX/DXIL.td b/llvm/lib/Target/DirectX/DXIL.td
index 492e0784cedd0..c65ead45e2c7e 100644
--- a/llvm/lib/Target/DirectX/DXIL.td
+++ b/llvm/lib/Target/DirectX/DXIL.td
@@ -1108,11 +1108,11 @@ def RawBufferStore : DXILOp<140, rawBufferStore> {
def Dot2AddHalf : DXILOp<162, dot2AddHalf> {
let Doc = "2D half dot product with accumulate to float";
let intrinsics = [IntrinSelect<int_dx_dot2add>];
- let arguments = [FloatTy, HalfTy, HalfTy, HalfTy, HalfTy];
- let result = FloatTy;
- let overloads = [Overloads<DXIL1_0, []>];
- let stages = [Stages<DXIL1_0, [all_stages]>];
- let attributes = [Attributes<DXIL1_0, [ReadNone]>];
+ let arguments = [OverloadTy, HalfTy, HalfTy, HalfTy, HalfTy];
+ let result = OverloadTy;
+ let overloads = [Overloads<DXIL1_4, [FloatTy]>];
+ let stages = [Stages<DXIL1_4, [all_stages]>];
+ let attributes = [Attributes<DXIL1_4, [ReadNone]>];
}
def Dot4AddI8Packed : DXILOp<163, dot4AddPacked> {
diff --git a/llvm/test/CodeGen/DirectX/dot2add.ll b/llvm/test/CodeGen/DirectX/dot2add.ll
index 3a2bbcc074f2d..5e1cf405752ba 100644
--- a/llvm/test/CodeGen/DirectX/dot2add.ll
+++ b/llvm/test/CodeGen/DirectX/dot2add.ll
@@ -1,4 +1,4 @@
-; RUN: opt -S -dxil-op-lower -mtriple=dxil-pc-shadermodel6.3-compute %s | FileCheck %s
+; RUN: opt -S -dxil-op-lower -mtriple=dxil-pc-shadermodel6.4-compute %s | FileCheck %s
define noundef float @dot2add_simple(<2 x half> noundef %a, <2 x half> noundef %b, float %acc) {
entry:
@@ -7,7 +7,7 @@ entry:
%bx = extractelement <2 x half> %b, i32 0
%by = extractelement <2 x half> %b, i32 1
-; CHECK: call float @dx.op.dot2AddHalf(i32 162, float %acc, half %ax, half %ay, half %bx, half %by)
+; CHECK: call float @dx.op.dot2AddHalf.f32(i32 162, float %acc, half %ax, half %ay, half %bx, half %by)
%ret = call float @llvm.dx.dot2add(float %acc, half %ax, half %ay, half %bx, half %by)
ret float %ret
}
|
@llvm/pr-subscribers-hlsl Author: Kaitlin Peng (kmpeng) ChangesFixes #152585. The Full diff: https://github.com/llvm/llvm-project/pull/152781.diff 3 Files Affected:
diff --git a/clang/test/CodeGenHLSL/builtins/dot2add.hlsl b/clang/test/CodeGenHLSL/builtins/dot2add.hlsl
index c345e17476e08..7c3a48e476306 100644
--- a/clang/test/CodeGenHLSL/builtins/dot2add.hlsl
+++ b/clang/test/CodeGenHLSL/builtins/dot2add.hlsl
@@ -1,5 +1,5 @@
// RUN: %clang_cc1 -finclude-default-header -fnative-half-type -triple \
-// RUN: dxil-pc-shadermodel6.3-compute %s -emit-llvm -o - | \
+// RUN: dxil-pc-shadermodel6.4-compute %s -emit-llvm -o - | \
// RUN: FileCheck %s --check-prefixes=CHECK,CHECK-DXIL
// RUN: %clang_cc1 -finclude-default-header -fnative-half-type -triple \
// RUN: spirv-pc-vulkan-compute %s -emit-llvm -o - | \
diff --git a/llvm/lib/Target/DirectX/DXIL.td b/llvm/lib/Target/DirectX/DXIL.td
index 492e0784cedd0..c65ead45e2c7e 100644
--- a/llvm/lib/Target/DirectX/DXIL.td
+++ b/llvm/lib/Target/DirectX/DXIL.td
@@ -1108,11 +1108,11 @@ def RawBufferStore : DXILOp<140, rawBufferStore> {
def Dot2AddHalf : DXILOp<162, dot2AddHalf> {
let Doc = "2D half dot product with accumulate to float";
let intrinsics = [IntrinSelect<int_dx_dot2add>];
- let arguments = [FloatTy, HalfTy, HalfTy, HalfTy, HalfTy];
- let result = FloatTy;
- let overloads = [Overloads<DXIL1_0, []>];
- let stages = [Stages<DXIL1_0, [all_stages]>];
- let attributes = [Attributes<DXIL1_0, [ReadNone]>];
+ let arguments = [OverloadTy, HalfTy, HalfTy, HalfTy, HalfTy];
+ let result = OverloadTy;
+ let overloads = [Overloads<DXIL1_4, [FloatTy]>];
+ let stages = [Stages<DXIL1_4, [all_stages]>];
+ let attributes = [Attributes<DXIL1_4, [ReadNone]>];
}
def Dot4AddI8Packed : DXILOp<163, dot4AddPacked> {
diff --git a/llvm/test/CodeGen/DirectX/dot2add.ll b/llvm/test/CodeGen/DirectX/dot2add.ll
index 3a2bbcc074f2d..5e1cf405752ba 100644
--- a/llvm/test/CodeGen/DirectX/dot2add.ll
+++ b/llvm/test/CodeGen/DirectX/dot2add.ll
@@ -1,4 +1,4 @@
-; RUN: opt -S -dxil-op-lower -mtriple=dxil-pc-shadermodel6.3-compute %s | FileCheck %s
+; RUN: opt -S -dxil-op-lower -mtriple=dxil-pc-shadermodel6.4-compute %s | FileCheck %s
define noundef float @dot2add_simple(<2 x half> noundef %a, <2 x half> noundef %b, float %acc) {
entry:
@@ -7,7 +7,7 @@ entry:
%bx = extractelement <2 x half> %b, i32 0
%by = extractelement <2 x half> %b, i32 1
-; CHECK: call float @dx.op.dot2AddHalf(i32 162, float %acc, half %ax, half %ay, half %bx, half %by)
+; CHECK: call float @dx.op.dot2AddHalf.f32(i32 162, float %acc, half %ax, half %ay, half %bx, half %by)
%ret = call float @llvm.dx.dot2add(float %acc, half %ax, half %ay, half %bx, half %by)
ret float %ret
}
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
4447521
to
81d1e32
Compare
ab68be8
to
3fede1b
Compare
3fede1b
to
88b605f
Compare
Fixes #152585.
The
dot2add
DXILOpFunction should bedx.op.dot2AddHalf.f32
(i.e. it has a single overload that's a float, rather than no overloads). It was also being defined for too low of a DXIL version - dxc says SM6.4.