summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir.cpp')
-rw-r--r--source/slang/slang-ir.cpp40
1 files changed, 37 insertions, 3 deletions
diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp
index b982385fa..72313217b 100644
--- a/source/slang/slang-ir.cpp
+++ b/source/slang/slang-ir.cpp
@@ -2925,10 +2925,22 @@ IRComPtrType* IRBuilder::getComPtrType(IRType* valueType)
return (IRComPtrType*)getType(kIROp_ComPtrType, valueType);
}
-IRArrayTypeBase* IRBuilder::getArrayTypeBase(IROp op, IRType* elementType, IRInst* elementCount)
+IRArrayTypeBase* IRBuilder::getArrayTypeBase(
+ IROp op,
+ IRType* elementType,
+ IRInst* elementCount,
+ IRInst* stride)
{
- IRInst* operands[] = {elementType, elementCount};
- return (IRArrayTypeBase*)getType(op, op == kIROp_ArrayType ? 2 : 1, operands);
+ if (op == kIROp_ArrayType)
+ {
+ IRInst* operands[] = {elementType, elementCount, stride};
+ return (IRArrayTypeBase*)getType(op, stride ? 3 : 2, operands);
+ }
+ else
+ {
+ IRInst* operands[] = {elementType, stride};
+ return (IRArrayTypeBase*)getType(op, stride ? 2 : 1, operands);
+ }
}
IRArrayType* IRBuilder::getArrayType(IRType* elementType, IRInst* elementCount)
@@ -4984,6 +4996,14 @@ IRInst* IRBuilder::emitLoad(IRType* type, IRInst* ptr)
return inst;
}
+IRInst* IRBuilder::emitLoad(IRType* type, IRInst* ptr, IRInst* align)
+{
+ auto inst = createInst<IRLoad>(this, kIROp_Load, type, ptr, getAttr(kIROp_AlignedAttr, align));
+
+ addInst(inst);
+ return inst;
+}
+
IRInst* IRBuilder::emitLoad(IRInst* ptr)
{
// Note: a `load` operation does not consider the rate
@@ -5023,6 +5043,20 @@ IRInst* IRBuilder::emitStore(IRInst* dstPtr, IRInst* srcVal)
return inst;
}
+IRInst* IRBuilder::emitStore(IRInst* dstPtr, IRInst* srcVal, IRInst* align)
+{
+ auto inst = createInst<IRStore>(
+ this,
+ kIROp_Store,
+ nullptr,
+ dstPtr,
+ srcVal,
+ getAttr(kIROp_AlignedAttr, align));
+
+ addInst(inst);
+ return inst;
+}
+
IRInst* IRBuilder::emitAtomicStore(IRInst* dstPtr, IRInst* srcVal, IRInst* memoryOrder)
{
auto inst = createInst<IRAtomicStore>(