summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-string-hash.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2022-12-02 09:29:38 -0500
committerGitHub <noreply@github.com>2022-12-02 09:29:38 -0500
commit92ae4949fe1af28ef31331fd4116c8111c057420 (patch)
treebe4ea011fb7bcd891223a94b3bbd235382afbe5f /source/slang/slang-ir-string-hash.cpp
parent30b5335fed9524101d980618b0749dcaf546c319 (diff)
Inline functions with string param/return for GPU targets (#2544)
* #include an absolute path didn't work - because paths were taken to always be relative. * WIP inlining of functions that take or return string related types on GPU targets. * Small fixes. * Added a test. * Add checking for any getStringHash insts are valid. * Support getStringHash on CUDA. * Tweak diagnostic.
Diffstat (limited to 'source/slang/slang-ir-string-hash.cpp')
-rw-r--r--source/slang/slang-ir-string-hash.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/source/slang/slang-ir-string-hash.cpp b/source/slang/slang-ir-string-hash.cpp
index 8ff0ec756..8bccb97db 100644
--- a/source/slang/slang-ir-string-hash.cpp
+++ b/source/slang/slang-ir-string-hash.cpp
@@ -18,6 +18,11 @@ static void _findGetStringHashRec(IRInst* inst, List<IRGetStringHash*>& outInsts
}
}
+void findGetStringHashInsts(IRModule* module, List<IRGetStringHash*>& outInsts)
+{
+ _findGetStringHashRec(module->getModuleInst(), outInsts);
+}
+
void findGlobalHashedStringLiterals(IRModule* module, StringSlicePool& pool)
{
IRModuleInst* moduleInst = module->getModuleInst();
@@ -78,4 +83,27 @@ void addGlobalHashedStringLiterals(const StringSlicePool& pool, SharedIRBuilder&
builder.addKeepAliveDecoration(globalHashedInst);
}
+Result checkGetStringHashInsts(IRModule* module, DiagnosticSink* sink)
+{
+ // Check all getStringHash are all on string literals
+ List<IRGetStringHash*> insts;
+ findGetStringHashInsts(module, insts);
+
+ for (auto inst : insts)
+ {
+ if (inst->getStringLit() == nullptr)
+ {
+ if (sink)
+ {
+ sink->diagnose(inst, Diagnostics::getStringHashMustBeOnStringLiteral);
+ }
+
+ // Doesn't access a string literal
+ return SLANG_FAIL;
+ }
+ }
+
+ return SLANG_OK;
+}
+
}