From 58ad4b1a9ca43098a071c42bd752a4a48405bf0e Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Thu, 24 Oct 2019 12:18:34 -0700 Subject: Strip IR after front-end steps are done (#1092) * Strip IR after front-end steps are done The main feature of this change is to unconditonally strip out the `IRHighLevelDeclDecoration`s in an IR module once the "mandatory" IR passes in the front end have run. This ensures that later IR passes (e.g., code emission) *cannot* rely on AST-level information to get their job done. Since I was already writing a pass to remove some instructions at the end of the front-end passes, I went ahead and also made the `-obfuscate` flag apply to the front-end IR generation by causing it to strip `IRNameHintDecoration`s while it is doing the other stripping. With this, the main identifying information left in IR modules (other than semantics and entry-point names) is mangled name strings for imported/exported symbols. A few other things got changes along the way: * Removed the `.expected` file for one of the tests, where that file seemingly shouldn't have been checked in at all. * Updated the signature of the DCE pass both so that it doesn't require a back-end compile request (it wasn't using it anyway), and so that it takes some options to decide whether to keep symbols marked `[export(...)]` alive (the front-end wants to keep these, while back-end passes currently need to be able to eliminate them). * Moved the `obfuscateCode` flag from the back-end compile request to the base class shared between front- and back-end requests, and updated the options and repro logic to set both as needed. An obvious improvement in the future would be to have the front- and back-end requests share these settings by referencing a single common object in the end-to-end case, rather than each having their own copy. * Removed logic that was keeping layout instructions alive in DCE, even if they weren't used. This seems to have been a vestige of an intermediate step between AST and IR layout. * fixup: add the new files --- source/slang/slang-emit.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source/slang/slang-emit.cpp') diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index f60febe0b..280822094 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -339,7 +339,7 @@ String emitEntryPoint( // TODO: Are there other cleanup optimizations we should // apply at this point? // - eliminateDeadCode(compileRequest, irModule); + eliminateDeadCode(irModule); #if 0 dumpIRIfEnabled(compileRequest, irModule, "AFTER DCE"); #endif @@ -376,7 +376,7 @@ String emitEntryPoint( legalizeExistentialTypeLayout( irModule, sink); - eliminateDeadCode(compileRequest, irModule); + eliminateDeadCode(irModule); #if 0 dumpIRIfEnabled(compileRequest, irModule, "EXISTENTIALS LEGALIZED"); @@ -397,7 +397,7 @@ String emitEntryPoint( legalizeResourceTypes( irModule, sink); - eliminateDeadCode(compileRequest, irModule); + eliminateDeadCode(irModule); } // Debugging output of legalization @@ -482,7 +482,7 @@ String emitEntryPoint( // dead-code-elimination (DCE) pass that only retains // whatever code is "live." // - eliminateDeadCode(compileRequest, irModule); + eliminateDeadCode(irModule); #if 0 dumpIRIfEnabled(compileRequest, irModule, "AFTER DCE"); #endif -- cgit v1.2.3