diff options
Diffstat (limited to 'source/slang/slang-ir.cpp')
| -rw-r--r-- | source/slang/slang-ir.cpp | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp index 7b7d5ec17..8371d6ef5 100644 --- a/source/slang/slang-ir.cpp +++ b/source/slang/slang-ir.cpp @@ -5212,18 +5212,20 @@ IRInst* IRBuilder::emitLoad(IRType* type, IRInst* ptr, IRInst* align) return inst; } -IRInst* IRBuilder::emitLoad(IRType* type, IRInst* ptr, IRAlignedAttr* align) +IRInst* IRBuilder::emitLoad(IRType* type, IRInst* ptr, ArrayView<IRInst*> attributes) { - if (align) - { - auto inst = createInst<IRLoad>(this, kIROp_Load, type, ptr, align); - addInst(inst); - return inst; - } - else - { - return emitLoad(type, ptr); - } + ShortList<IRInst*> params; + params.add(ptr); + params.addRange(attributes); + auto inst = createInst<IRLoad>( + this, + kIROp_Load, + type, + params.getCount(), + params.getArrayView().getBuffer()); + + addInst(inst); + return inst; } IRInst* IRBuilder::emitLoad(IRInst* ptr) @@ -5279,6 +5281,21 @@ IRInst* IRBuilder::emitStore(IRInst* dstPtr, IRInst* srcVal, IRInst* align) return inst; } +IRInst* IRBuilder::emitStore(IRInst* dstPtr, IRInst* srcVal, IRInst* align, IRInst* memoryScope) +{ + auto inst = createInst<IRStore>( + this, + kIROp_Store, + nullptr, + dstPtr, + srcVal, + getAttr(kIROp_AlignedAttr, align), + getAttr(kIROp_MemoryScopeAttr, memoryScope)); + + addInst(inst); + return inst; +} + IRInst* IRBuilder::emitAtomicStore(IRInst* dstPtr, IRInst* srcVal, IRInst* memoryOrder) { auto inst = createInst<IRAtomicStore>( |
