diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2022-12-02 09:29:38 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-02 09:29:38 -0500 |
| commit | 92ae4949fe1af28ef31331fd4116c8111c057420 (patch) | |
| tree | be4ea011fb7bcd891223a94b3bbd235382afbe5f /source/slang/slang-ir-string-hash.cpp | |
| parent | 30b5335fed9524101d980618b0749dcaf546c319 (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.cpp | 28 |
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; +} + } |
