Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 10 additions & 13 deletions include/dxc/DXIL/DxilInstructions.h
Original file line number Diff line number Diff line change
Expand Up @@ -10864,7 +10864,7 @@ struct DxilInst_LinAlgMatrixAccumulateToMemory {
// Validation support
bool isAllowed() const { return true; }
bool isArgumentListValid() const {
if (7 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands())
if (6 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands())
return false;
return true;
}
Expand All @@ -10874,24 +10874,21 @@ struct DxilInst_LinAlgMatrixAccumulateToMemory {
enum OperandIdx {
arg_matrix = 1,
arg_memory = 2,
arg_targetType = 3,
arg_offset = 4,
arg_stride = 5,
arg_layout = 6,
arg_offset = 3,
arg_stride = 4,
arg_layout = 5,
};
// Accessors
llvm::Value *get_matrix() const { return Instr->getOperand(1); }
void set_matrix(llvm::Value *val) { Instr->setOperand(1, val); }
llvm::Value *get_memory() const { return Instr->getOperand(2); }
void set_memory(llvm::Value *val) { Instr->setOperand(2, val); }
llvm::Value *get_targetType() const { return Instr->getOperand(3); }
void set_targetType(llvm::Value *val) { Instr->setOperand(3, val); }
llvm::Value *get_offset() const { return Instr->getOperand(4); }
void set_offset(llvm::Value *val) { Instr->setOperand(4, val); }
llvm::Value *get_stride() const { return Instr->getOperand(5); }
void set_stride(llvm::Value *val) { Instr->setOperand(5, val); }
llvm::Value *get_layout() const { return Instr->getOperand(6); }
void set_layout(llvm::Value *val) { Instr->setOperand(6, val); }
llvm::Value *get_offset() const { return Instr->getOperand(3); }
void set_offset(llvm::Value *val) { Instr->setOperand(3, val); }
llvm::Value *get_stride() const { return Instr->getOperand(4); }
void set_stride(llvm::Value *val) { Instr->setOperand(4, val); }
llvm::Value *get_layout() const { return Instr->getOperand(5); }
void set_layout(llvm::Value *val) { Instr->setOperand(5, val); }
};

/// This instruction Outer products an M sized vector and a N sized vector
Expand Down
1 change: 0 additions & 1 deletion lib/DXIL/DxilOperations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6681,7 +6681,6 @@ Function *OP::GetOpFunc(OpCode opCode, Type *pOverloadType) {
A(pI32);
A(pI32);
A(pI32);
A(pI32);
break;
case OpCode::LinAlgMatrixOuterProduct:
A(EXT(0));
Expand Down
18 changes: 0 additions & 18 deletions lib/DxilValidation/DxilValidation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1549,24 +1549,6 @@ static void ValidateLinAlgMatrixAccumulateToMemory(CallInst *CI,
CI, ValidationRule::InstrLinAlgMatrixGSMemMustBeLargeEnough,
{std::to_string(GSScalarCount), std::to_string(ExpectedScalarCount)});

// Target type must be a immarg of allowed ComponentType
DXIL::ComponentType Target = DXIL::ComponentType::Invalid;
std::optional<uint64_t> TargetV =
ValidateConstantIntGetValue(CI, Op.get_targetType(), ValCtx, "TargetType",
"LinAlgMatrixAccumulateToMemory");
if (TargetV) {
Target = static_cast<DXIL::ComponentType>(*TargetV);
ValidateLinAlgComponentType(CI, Target, ValCtx, "TargetType");

// if gs memory inner type != i32 then target elem type must match it
if (!GSMemInnerTy->isIntegerTy(32) &&
!IsComponentTypeSameNativeType(Target, GSMemInnerTy))
ValCtx.EmitInstrFormatError(
CI, ValidationRule::InstrLinAlgMatrixGSMemTypeMustMatch,
{TypeToString(GSMemInnerTy), "target",
ComponentTypeToString(Target)});
}

// gs memory ops have the parameter in element count so it must be scaled
uint64_t ByteCount = ComponentTypeByteCount(Mat->Type);

Expand Down
11 changes: 5 additions & 6 deletions lib/HLSL/HLOperationLower.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7157,10 +7157,9 @@ Value *TranslateLinAlgMatrixAccumToMemory(

Value *Matrix = CI->getArgOperand(1);
Value *Arr = CI->getArgOperand(2);
Value *TargetType = CI->getArgOperand(3);
Value *Offset = CI->getArgOperand(4);
Value *Stride = CI->getArgOperand(5);
Value *Layout = CI->getArgOperand(6);
Value *Offset = CI->getArgOperand(3);
Value *Stride = CI->getArgOperand(4);
Value *Layout = CI->getArgOperand(5);

Value *Zero = Builder.getInt32(0);
Value *ArrPtr = Builder.CreateGEP(Arr, {Zero, Zero});
Expand All @@ -7169,8 +7168,8 @@ Value *TranslateLinAlgMatrixAccumToMemory(
Constant *OpArg = HlslOp->GetU32Const((unsigned)OpCode);
Function *DxilFunc = HlslOp->GetOpFunc(OpCode, {Matrix->getType(), ArrEltTy});

return Builder.CreateCall(
DxilFunc, {OpArg, Matrix, ArrPtr, TargetType, Offset, Stride, Layout});
return Builder.CreateCall(DxilFunc,
{OpArg, Matrix, ArrPtr, Offset, Stride, Layout});
}

Value *TranslateLinAlgConvert(CallInst *CI, IntrinsicOp IOP, OP::OpCode OpCode,
Expand Down
24 changes: 11 additions & 13 deletions tools/clang/lib/Headers/hlsl/dx/linalg.h
Original file line number Diff line number Diff line change
Expand Up @@ -363,31 +363,29 @@ class Matrix {
Stride, Layout, Align);
}

template <typename T, MatrixUseEnum UseLocal = Use,
MatrixScopeEnum ScopeLocal = Scope, SIZE_TYPE Size>
template <typename T, MatrixUseEnum UseLocal = Use, SIZE_TYPE Size>
Comment thread
V-FEXrt marked this conversation as resolved.
Comment thread
Copilot marked this conversation as resolved.
typename hlsl::enable_if<
hlsl::is_arithmetic_vector<T>::value && Use == MatrixUse::Accumulator &&
UseLocal == Use && Scope == MatrixScope::Wave && ScopeLocal == Scope,
hlsl::is_same<typename hlsl::strip_vector_type<T>::type,
ElementType>::value &&
hlsl::is_arithmetic_vector<T>::value &&
Use == MatrixUse::Accumulator && UseLocal == Use,
void>::type
InterlockedAccumulate(groupshared T Arr[Size], uint StartIdx, uint Stride,
MatrixLayoutEnum Layout) {
__builtin_LinAlg_MatrixAccumulateToMemory(__handle, Arr, ComponentTy,
StartIdx, Stride, Layout);
__builtin_LinAlg_MatrixAccumulateToMemory(__handle, Arr, StartIdx, Stride,
Layout);
}

template <ComponentEnum TargetCompTy = ComponentTy, typename T,
MatrixUseEnum UseLocal = Use, MatrixScopeEnum ScopeLocal = Scope,
SIZE_TYPE Size>
template <typename T, MatrixUseEnum UseLocal = Use, SIZE_TYPE Size>
typename hlsl::enable_if<
hlsl::is_same<typename hlsl::strip_vector_type<T>::type,
uint8_t4_packed>::value &&
Use == MatrixUse::Accumulator && UseLocal == Use &&
Scope == MatrixScope::Wave && ScopeLocal == Scope,
Use == MatrixUse::Accumulator && UseLocal == Use,
void>::type
InterlockedAccumulate(groupshared T Arr[Size], uint StartIdx, uint Stride,
MatrixLayoutEnum Layout) {
__builtin_LinAlg_MatrixAccumulateToMemory(__handle, Arr, TargetCompTy,
StartIdx, Stride, Layout);
__builtin_LinAlg_MatrixAccumulateToMemory(__handle, Arr, StartIdx, Stride,
Layout);
}

template <ComponentEnum CompTy, MatrixUseEnum UseLocal = Use>
Expand Down
27 changes: 17 additions & 10 deletions tools/clang/test/CodeGenDXIL/hlsl/linalg/api/matrix-class.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ using namespace dx::linalg;
using MatrixATy = Matrix<ComponentType::F32, 4, 4, MatrixUse::A, MatrixScope::Wave>;
using MatrixBTy = Matrix<ComponentType::F32, 4, 4, MatrixUse::B, MatrixScope::Wave>;
using MatrixAccumTy = Matrix<ComponentType::F32, 4, 4, MatrixUse::Accumulator, MatrixScope::Wave>;
using TGMatrixAccumTy = Matrix<ComponentType::F32, 4, 4, MatrixUse::Accumulator, MatrixScope::ThreadGroup>;
using TSMatrixATy = Matrix<ComponentType::F32, 4, 4, MatrixUse::A, MatrixScope::Thread>;
using TSMatrixAccumTy = Matrix<ComponentType::F32, 4, 4, MatrixUse::Accumulator, MatrixScope::Thread>;

Expand Down Expand Up @@ -156,24 +157,30 @@ void main(uint ID : SV_GroupID)
// CHECK: call void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S1.f32(i32 -2147483620,
// CHECK-SAME: %dx.types.LinAlgMatrixC9M4N4U2S1 %[[ACCUM0]],
// CHECK-SAME: float addrspace(3)* getelementptr inbounds ([256 x float],
// CHECK-SAME: [256 x float] addrspace(3)* @"\01?SharedArr@@3PAMA", i32 0, i32 0), i32 9, i32 0, i32 16, i32 1)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
// CHECK-SAME: [256 x float] addrspace(3)* @"\01?SharedArr@@3PAMA", i32 0, i32 0), i32 0, i32 16, i32 1)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,offset,stride,layout)
AccMat1.InterlockedAccumulate(SharedArr, 0, 16, MatrixLayoutEnum::ColMajor);

// Matrix::InterlockedAccumulate to packed groupshared memory
//
// CHECK: call void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S1.i32(i32 -2147483620,
// CHECK-SAME: %dx.types.LinAlgMatrixC9M4N4U2S1 %[[ACCUM0]],
// CHECK-SAME: i32 addrspace(3)* getelementptr inbounds ([256 x i32],
// CHECK-SAME: [256 x i32] addrspace(3)* @"\01?PackedArr@@3PA$ui8_4pk@A", i32 0, i32 0), i32 9, i32 0, i32 16, i32 1)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
// CHECK-SAME: [256 x i32] addrspace(3)* @"\01?PackedArr@@3PA$ui8_4pk@A", i32 0, i32 0), i32 0, i32 16, i32 1)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,offset,stride,layout)
AccMat1.InterlockedAccumulate(PackedArr, 0, 16, MatrixLayoutEnum::ColMajor);
// CHECK: call void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S1.i32(i32 -2147483620,
// CHECK-SAME: %dx.types.LinAlgMatrixC9M4N4U2S1 %[[ACCUM0]],
// CHECK-SAME: i32 addrspace(3)* getelementptr inbounds ([256 x i32],
// CHECK-SAME: [256 x i32] addrspace(3)* @"\01?PackedArr@@3PA$ui8_4pk@A", i32 0, i32 0), i32 4, i32 0, i32 16, i32 1)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
AccMat1.InterlockedAccumulate<ComponentType::I32>(PackedArr, 0, 16, MatrixLayoutEnum::ColMajor);

// Matrix::InterlockedAccumulate supports thread-group scope
//
// CHECK: %[[TGACCUM:.*]] = call %dx.types.LinAlgMatrixC9M4N4U2S2 @dx.op.linAlgFillMatrix.mC9M4N4U2S2.f32(
// CHECK-SAME: i32 -2147483636, float 1.500000e+01)
TGMatrixAccumTy TGAccMat = TGMatrixAccumTy::Splat(15.0f);
// CHECK: call void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S2.f32(i32 -2147483620,
// CHECK-SAME: %dx.types.LinAlgMatrixC9M4N4U2S2 %[[TGACCUM]],
// CHECK-SAME: float addrspace(3)* getelementptr inbounds ([256 x float],
// CHECK-SAME: [256 x float] addrspace(3)* @"\01?SharedArr@@3PAMA", i32 0, i32 0), i32 0, i32 16, i32 1)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,offset,stride,layout)
TGAccMat.InterlockedAccumulate(SharedArr, 0, 16, MatrixLayoutEnum::ColMajor);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't need to be in this PR but would be good to make sure there's an issue tracking it.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


// Matrix::Accumulate
//
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ void main() {
// CHECK-SAME: %dx.types.LinAlgMatrixC9M4N4U2S1 %[[ACC:[0-9]+]],
// CHECK-SAME: <4 x float> addrspace(3)* getelementptr inbounds ([64 x <4 x float>],
// CHECK-SAME: [64 x <4 x float>] addrspace(3)* @"\01?SharedVecArr@@3PAV?$vector@M$03@@A", i32 0, i32 0),
// CHECK-SAME: i32 9, i32 0, i32 16, i32 1)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
// CHECK-SAME: i32 0, i32 16, i32 1)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,offset,stride,layout)
Acc.InterlockedAccumulate(SharedVecArr, 0, 16, MatrixLayoutEnum::ColMajor);

// Matrix::InterlockedAccumulate to an array of packed vectors
Expand All @@ -74,7 +74,7 @@ void main() {
// CHECK-SAME: %dx.types.LinAlgMatrixC9M4N4U2S1 %[[ACC]],
// CHECK-SAME: <2 x i32> addrspace(3)* getelementptr inbounds ([64 x <2 x i32>],
// CHECK-SAME: [64 x <2 x i32>] addrspace(3)* @"\01?PackedVecArr@@3PAV?$vector@$ui8_4pk@$01@@A", i32 0, i32 0),
// CHECK-SAME: i32 4, i32 0, i32 16, i32 1)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
Acc.InterlockedAccumulate<ComponentType::I32>(PackedVecArr, 0, 16, MatrixLayoutEnum::ColMajor);
// CHECK-SAME: i32 0, i32 16, i32 1)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,offset,stride,layout)
Acc.InterlockedAccumulate(PackedVecArr, 0, 16, MatrixLayoutEnum::ColMajor);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ void main() {

// CHECK: call void @dx.op.linAlgMatrixAccumulateToMemory.mC9M5N4U2S2.f32(i32 -2147483620,
// CHECK-SAME: %dx.types.LinAlgMatrixC9M5N4U2S2 %{{.*}}, float addrspace(3)* getelementptr inbounds ([64 x float],
// CHECK-SAME: [64 x float] addrspace(3)* @"\01?SharedArr@@3PAMA", i32 0, i32 0), i32 9, i32 128, i32 16, i32 3)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
// CHECK-SAME: [64 x float] addrspace(3)* @"\01?SharedArr@@3PAMA", i32 0, i32 0), i32 128, i32 16, i32 3)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,offset,stride,layout)

// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC9M5N4U2S2,
// CHECK2-SAME: [64 x float] addrspace(3)*, i32, i32, i32, i32)"(i32 416,
// CHECK2-SAME: [64 x float] addrspace(3)*, i32, i32, i32)"(i32 416,
// CHECK2-SAME: %dx.types.LinAlgMatrixC9M5N4U2S2 %{{.*}}, [64 x float] addrspace(3)* @"\01?SharedArr@@3PAMA",
// CHECK2-SAME: i32 9, i32 128, i32 16, i32 3)
// CHECK2-SAME: i32 128, i32 16, i32 3)
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(9, 5, 4, 2, 2)]] mat;
__builtin_LinAlg_FillMatrix(mat, 1);
__builtin_LinAlg_MatrixAccumulateToMemory(mat, SharedArr, 9, 128, 16, 3);
__builtin_LinAlg_MatrixAccumulateToMemory(mat, SharedArr, 128, 16, 3);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ void main() {
// CHECK: call void @dx.op.linAlgMatrixAccumulateToMemory.mC9M5N4U2S2.v2f32(i32 -2147483620,
// CHECK-SAME: %dx.types.LinAlgMatrixC9M5N4U2S2 %{{.*}}, <2 x float> addrspace(3)* getelementptr inbounds ([64 x <2 x float>],
// CHECK-SAME: [64 x <2 x float>] addrspace(3)* @"\01?SharedArr@@3PAV?$vector@M$01@@A", i32 0, i32 0),
// CHECK-SAME: i32 9, i32 128, i32 16, i32 3)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
// CHECK-SAME: i32 128, i32 16, i32 3)
// CHECK-SAME: ; LinAlgMatrixAccumulateToMemory(matrix,memory,offset,stride,layout)

// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC9M5N4U2S2,
// CHECK2-SAME: [64 x <2 x float>] addrspace(3)*, i32, i32, i32, i32)"(i32 416,
// CHECK2-SAME: [64 x <2 x float>] addrspace(3)*, i32, i32, i32)"(i32 416,
// CHECK2-SAME: %dx.types.LinAlgMatrixC9M5N4U2S2 %{{.*}}, [64 x <2 x float>] addrspace(3)*
// CHECK2-SAME: @"\01?SharedArr@@3PAV?$vector@M$01@@A", i32 9, i32 128, i32 16, i32 3)
// CHECK2-SAME: @"\01?SharedArr@@3PAV?$vector@M$01@@A", i32 128, i32 16, i32 3)
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(9, 5, 4, 2, 2)]] mat;
__builtin_LinAlg_FillMatrix(mat, 1);
__builtin_LinAlg_MatrixAccumulateToMemory(mat, SharedArr, 9, 128, 16, 3);
__builtin_LinAlg_MatrixAccumulateToMemory(mat, SharedArr, 128, 16, 3);
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ define void @main() {
%1 = call %dx.types.LinAlgMatrixC9M4N4U1S1 @dx.op.linAlgMatrixLoadFromMemory.mC9M4N4U1S1.v4i8(i32 -2147483633, <4 x i8> addrspace(3)* getelementptr inbounds ([64 x <4 x i8>], [64 x <4 x i8>] addrspace(3)* @"\01?SharedVecArr@@3PAV?$vector@M$03@@A", i32 0, i32 0), i32 0, i32 16, i32 1) ; LinAlgMatrixLoadFromMemory(memory,offset,stride,layout)
call void @dx.op.linAlgMatrixStoreToMemory.mC9M4N4U1S1.v4i8(i32 -2147483627, %dx.types.LinAlgMatrixC9M4N4U1S1 %1, <4 x i8> addrspace(3)* getelementptr inbounds ([64 x <4 x i8>], [64 x <4 x i8>] addrspace(3)* @"\01?SharedVecArr@@3PAV?$vector@M$03@@A", i32 0, i32 0), i32 0, i32 16, i32 1) ; LinAlgMatrixStoreToMemory(matrix,memory,offset,stride,layout)
%2 = call %dx.types.LinAlgMatrixC9M4N4U2S1 @dx.op.linAlgFillMatrix.mC9M4N4U2S1.i32(i32 -2147483636, i32 0) ; LinAlgFillMatrix(value)
call void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S1.v4i8(i32 -2147483620, %dx.types.LinAlgMatrixC9M4N4U2S1 %2, <4 x i8> addrspace(3)* getelementptr inbounds ([64 x <4 x i8>], [64 x <4 x i8>] addrspace(3)* @"\01?SharedVecArr@@3PAV?$vector@M$03@@A", i32 0, i32 0), i32 9, i32 0, i32 16, i32 1) ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
call void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S1.v4i8(i32 -2147483620, %dx.types.LinAlgMatrixC9M4N4U2S1 %2, <4 x i8> addrspace(3)* getelementptr inbounds ([64 x <4 x i8>], [64 x <4 x i8>] addrspace(3)* @"\01?SharedVecArr@@3PAV?$vector@M$03@@A", i32 0, i32 0), i32 0, i32 16, i32 1) ; LinAlgMatrixAccumulateToMemory(matrix,memory,offset,stride,layout)
ret void
}

Expand All @@ -38,7 +38,7 @@ declare void @dx.op.linAlgMatrixStoreToMemory.mC9M4N4U1S1.v4i8(i32, %dx.types.Li
declare %dx.types.LinAlgMatrixC9M4N4U2S1 @dx.op.linAlgFillMatrix.mC9M4N4U2S1.i32(i32, i32) #0

; Function Attrs: nounwind
declare void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S1.v4i8(i32, %dx.types.LinAlgMatrixC9M4N4U2S1, <4 x i8> addrspace(3)*, i32, i32, i32, i32) #0
declare void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S1.v4i8(i32, %dx.types.LinAlgMatrixC9M4N4U2S1, <4 x i8> addrspace(3)*, i32, i32, i32) #0

attributes #0 = { nounwind }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ define void @main() {
%1 = call %dx.types.LinAlgMatrixC9M4N4U1S1 @dx.op.linAlgMatrixLoadFromMemory.mC9M4N4U1S1.v4f32(i32 -2147483633, <4 x float> addrspace(3)* getelementptr inbounds ([64 x <4 x float>], [64 x <4 x float>] addrspace(3)* @"\01?SharedVecArr@@3PAV?$vector@M$03@@A", i32 0, i32 0), i32 0, i32 16, i32 1) ; LinAlgMatrixLoadFromMemory(memory,offset,stride,layout)
call void @dx.op.linAlgMatrixStoreToMemory.mC9M4N4U1S1.v4f32(i32 -2147483627, %dx.types.LinAlgMatrixC9M4N4U1S1 %1, <4 x float> addrspace(3)* getelementptr inbounds ([64 x <4 x float>], [64 x <4 x float>] addrspace(3)* @"\01?SharedVecArr@@3PAV?$vector@M$03@@A", i32 0, i32 0), i32 0, i32 16, i32 1) ; LinAlgMatrixStoreToMemory(matrix,memory,offset,stride,layout)
%2 = call %dx.types.LinAlgMatrixC9M4N4U2S1 @dx.op.linAlgFillMatrix.mC9M4N4U2S1.i32(i32 -2147483636, i32 0) ; LinAlgFillMatrix(value)
call void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S1.v4f32(i32 -2147483620, %dx.types.LinAlgMatrixC9M4N4U2S1 %2, <4 x float> addrspace(3)* getelementptr inbounds ([64 x <4 x float>], [64 x <4 x float>] addrspace(3)* @"\01?SharedVecArr@@3PAV?$vector@M$03@@A", i32 0, i32 0), i32 9, i32 0, i32 16, i32 1) ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
call void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S1.v4f32(i32 -2147483620, %dx.types.LinAlgMatrixC9M4N4U2S1 %2, <4 x float> addrspace(3)* getelementptr inbounds ([64 x <4 x float>], [64 x <4 x float>] addrspace(3)* @"\01?SharedVecArr@@3PAV?$vector@M$03@@A", i32 0, i32 0), i32 0, i32 16, i32 1) ; LinAlgMatrixAccumulateToMemory(matrix,memory,offset,stride,layout)
ret void
}

Expand All @@ -32,7 +32,7 @@ declare void @dx.op.linAlgMatrixStoreToMemory.mC9M4N4U1S1.v4f32(i32, %dx.types.L
declare %dx.types.LinAlgMatrixC9M4N4U2S1 @dx.op.linAlgFillMatrix.mC9M4N4U2S1.i32(i32, i32) #0

; Function Attrs: nounwind
declare void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S1.v4f32(i32, %dx.types.LinAlgMatrixC9M4N4U2S1, <4 x float> addrspace(3)*, i32, i32, i32, i32) #0
declare void @dx.op.linAlgMatrixAccumulateToMemory.mC9M4N4U2S1.v4f32(i32, %dx.types.LinAlgMatrixC9M4N4U2S1, <4 x float> addrspace(3)*, i32, i32, i32) #0

attributes #0 = { nounwind }

Expand Down
Loading
Loading