diff options
| author | Yong He <yonghe@outlook.com> | 2022-10-10 15:59:45 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-10 15:59:45 -0700 |
| commit | 768e62f6c7541439e2edc18dad5fb3846d2e05f9 (patch) | |
| tree | 8c68424ee65905b77d3ecb4c7659c5fdcc6ab948 /source/slang/slang-emit.cpp | |
| parent | 8487678d6504459935fec07886d2e53ed688ac2f (diff) | |
Support multi-level break + single-return conversion + general inline. (#2436)
* Support multi-level break.
* Single return.
* Add test for inlining `void` return-type functions.
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-emit.cpp')
| -rw-r--r-- | source/slang/slang-emit.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index a8d3390f0..a916d0d63 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -13,6 +13,7 @@ #include "slang-ir-dll-export.h" #include "slang-ir-dll-import.h" #include "slang-ir-eliminate-phis.h" +#include "slang-ir-eliminate-multilevel-break.h" #include "slang-ir-entry-point-uniforms.h" #include "slang-ir-entry-point-raw-ptr-params.h" #include "slang-ir-explicit-global-context.h" @@ -48,7 +49,6 @@ #include "slang-ir-wrap-structured-buffers.h" #include "slang-ir-liveness.h" #include "slang-ir-glsl-liveness.h" - #include "slang-legalize-types.h" #include "slang-lower-to-ir.h" #include "slang-mangle.h" @@ -376,6 +376,8 @@ Result linkAndOptimizeIR( if (sink->getErrorCount() != 0) return SLANG_FAIL; + eliminateMultiLevelBreak(irModule); + // TODO(DG): There are multiple DCE steps here, which need to be changed // so that they don't just throw out any non-entry point code // Debugging code for IR transformations... @@ -784,7 +786,7 @@ Result linkAndOptimizeIR( { // We only want to accumulate locations if liveness tracking is enabled. - eliminatePhis(codeGenContext, livenessMode, irModule); + eliminatePhis(livenessMode, irModule); #if 0 dumpIRIfEnabled(codeGenContext, irModule, "PHIS ELIMINATED"); #endif @@ -934,7 +936,7 @@ SlangResult CodeGenContext::emitEntryPointsSourceFromIR(ComPtr<IArtifact>& outAr linkingAndOptimizationOptions.sourceEmitter = sourceEmitter; - switch( sourceLanguage ) + switch (sourceLanguage) { default: break; @@ -962,7 +964,11 @@ SlangResult CodeGenContext::emitEntryPointsSourceFromIR(ComPtr<IArtifact>& outAr // TODO: do we want to emit directly from IR, or translate the // IR back into AST for emission? #if 0 - dumpIR(compileRequest, irModule, "PRE-EMIT"); + { + StringBuilder sb; + StringWriter writer(&sb, Slang::WriterFlag::AutoFlush); + dumpIR(irModule, getIRDumpOptions(), sourceManager, &writer); + } #endif sourceEmitter->emitModule(irModule, sink); } |
