Skip to content

Commit 6d5c405

Browse files
committed
dot2add working for dxil without sema check
1 parent bbaf743 commit 6d5c405

File tree

8 files changed

+436
-0
lines changed

8 files changed

+436
-0
lines changed

clang/include/clang/Basic/Builtins.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4891,6 +4891,12 @@ def HLSLDotProduct : LangBuiltin<"HLSL_LANG"> {
48914891
let Prototype = "void(...)";
48924892
}
48934893

4894+
def HLSLDot2Add : LangBuiltin<"HLSL_LANG"> {
4895+
let Spellings = ["__builtin_hlsl_dot2add"];
4896+
let Attributes = [NoThrow, Const];
4897+
let Prototype = "void(...)";
4898+
}
4899+
48944900
def HLSLDot4AddI8Packed : LangBuiltin<"HLSL_LANG"> {
48954901
let Spellings = ["__builtin_hlsl_dot4add_i8packed"];
48964902
let Attributes = [NoThrow, Const];

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19681,6 +19681,16 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned BuiltinID,
1968119681
getDotProductIntrinsic(CGM.getHLSLRuntime(), VecTy0->getElementType()),
1968219682
ArrayRef<Value *>{Op0, Op1}, nullptr, "hlsl.dot");
1968319683
}
19684+
case Builtin::BI__builtin_hlsl_dot2add: {
19685+
Value *A = EmitScalarExpr(E->getArg(0));
19686+
Value *B = EmitScalarExpr(E->getArg(1));
19687+
Value *C = EmitScalarExpr(E->getArg(2));
19688+
19689+
Intrinsic::ID ID = CGM.getHLSLRuntime().getDot2AddIntrinsic();
19690+
return Builder.CreateIntrinsic(
19691+
/*ReturnType=*/C->getType(), ID, ArrayRef<Value *>{A, B, C}, nullptr,
19692+
"hlsl.dot2add");
19693+
}
1968419694
case Builtin::BI__builtin_hlsl_dot4add_i8packed: {
1968519695
Value *A = EmitScalarExpr(E->getArg(0));
1968619696
Value *B = EmitScalarExpr(E->getArg(1));

clang/lib/CodeGen/CGHLSLRuntime.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class CGHLSLRuntime {
9999
GENERATE_HLSL_INTRINSIC_FUNCTION(FDot, fdot)
100100
GENERATE_HLSL_INTRINSIC_FUNCTION(SDot, sdot)
101101
GENERATE_HLSL_INTRINSIC_FUNCTION(UDot, udot)
102+
GENERATE_HLSL_INTRINSIC_FUNCTION(Dot2Add, dot2add)
102103
GENERATE_HLSL_INTRINSIC_FUNCTION(Dot4AddI8Packed, dot4add_i8packed)
103104
GENERATE_HLSL_INTRINSIC_FUNCTION(Dot4AddU8Packed, dot4add_u8packed)
104105
GENERATE_HLSL_INTRINSIC_FUNCTION(WaveActiveAllTrue, wave_all)

0 commit comments

Comments
 (0)