diff options
| author | Yong He <yonghe@outlook.com> | 2023-09-29 12:01:36 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-29 12:01:36 -0700 |
| commit | f20f4e2b39142dfab55be05eea064033719665ad (patch) | |
| tree | 27342e5649906cbbb719c5bd4fac57b0a452b86a /source/slang/slang-emit-c-like.cpp | |
| parent | af61737e7ba107e9e92164bf39ce6ab34e05ce82 (diff) | |
Add `requirePrelude()` intrinsic function. (#3250)
* Add `requirePrelude()` intrinsic function.
* Fix.
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-emit-c-like.cpp')
| -rw-r--r-- | source/slang/slang-emit-c-like.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/source/slang/slang-emit-c-like.cpp b/source/slang/slang-emit-c-like.cpp index fb216ae01..a2c3abb5e 100644 --- a/source/slang/slang-emit-c-like.cpp +++ b/source/slang/slang-emit-c-like.cpp @@ -112,6 +112,15 @@ void CLikeSourceEmitter::emitFrontMatterImpl(TargetRequest* targetReq) SLANG_UNUSED(targetReq); } +void CLikeSourceEmitter::emitPreModuleImpl() +{ + for (auto prelude : m_requiredPreludes) + { + m_writer->emit(prelude->getStringSlice()); + m_writer->emit("\n"); + } +} + // // Types // @@ -1856,6 +1865,22 @@ void CLikeSourceEmitter::emitCallExpr(IRCall* inst, EmitOpInfo outerPrec) UnownedStringSlice intrinsicDefinition; if (findTargetIntrinsicDefinition(funcValue, intrinsicDefinition)) { + // Make sure we register all required preludes for emit. + if (auto func = as<IRFunc>(getResolvedInstForDecorations(funcValue))) + { + for (auto block : func->getBlocks()) + { + for (auto ii : block->getChildren()) + { + if (auto requirePrelude = as<IRRequirePrelude>(ii)) + { + auto preludeTextInst = as<IRStringLit>(requirePrelude->getOperand(0)); + if (preludeTextInst) + m_requiredPreludes.add(preludeTextInst); + } + } + } + } emitIntrinsicCallExpr(inst, intrinsicDefinition, outerPrec); } else |
