summaryrefslogtreecommitdiffstats
path: root/source/slang/ir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/ir.cpp')
-rw-r--r--source/slang/ir.cpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/source/slang/ir.cpp b/source/slang/ir.cpp
index b6af6aabb..8e4f789ef 100644
--- a/source/slang/ir.cpp
+++ b/source/slang/ir.cpp
@@ -46,6 +46,16 @@ namespace Slang
return &type;
}
+ IRDecoration* IRInst::findDecorationImpl(IRDecorationOp decorationOp)
+ {
+ for( auto dd = firstDecoration; dd; dd = dd->next )
+ {
+ if(dd->op == decorationOp)
+ return dd;
+ }
+ return nullptr;
+ }
+
//
IRParam* IRFunc::getFirstParam()
@@ -129,8 +139,6 @@ namespace Slang
IRValue* inst = (IRInst*) malloc(size);
memset(inst, 0, size);
- IRUse* instArgs = inst->getArgs();
-
auto module = builder->getModule();
if (!module || (type && type->op == kIROp_VoidType))
{
@@ -793,6 +801,32 @@ namespace Slang
return inst;
}
+ IRDecoration* IRBuilder::addDecorationImpl(
+ IRInst* inst,
+ UInt decorationSize,
+ IRDecorationOp op)
+ {
+ auto decoration = (IRDecoration*) malloc(decorationSize);
+ memset(decoration, 0, decorationSize);
+
+ decoration->op = op;
+
+ decoration->next = inst->firstDecoration;
+ inst->firstDecoration = decoration;
+
+ return decoration;
+ }
+
+ IRHighLevelDeclDecoration* IRBuilder::addHighLevelDeclDecoration(IRInst* inst, Decl* decl)
+ {
+ auto decoration = addDecoration<IRHighLevelDeclDecoration>(inst, kIRDecorationOp_HighLevelDecl);
+ decoration->decl = decl;
+ return decoration;
+ }
+
+ //
+
+
struct IRDumpContext
{
FILE* file;