Ver código fonte

Added option to not generate nops (#3419)

Adam Yang 4 anos atrás
pai
commit
6cd93dfe40

+ 1 - 0
include/llvm/Transforms/IPO/PassManagerBuilder.h

@@ -135,6 +135,7 @@ public:
   bool EnableGVN = true; // HLSL Change
   bool StructurizeLoopExitsForUnroll = false; // HLSL Change
   bool HLSLEnableLifetimeMarkers = false; // HLSL Change
+  bool HLSLEnableDebugNops = false; // HLSL Change
 
 private:
   /// ExtensionList - This is list of all of the extensions that are registered.

+ 1 - 1
lib/Transforms/IPO/PassManagerBuilder.cpp

@@ -335,7 +335,7 @@ void PassManagerBuilder::populateModulePassManager(
     MPM.add(createDxilRewriteOutputArgDebugInfoPass()); // Fix output argument types.
 
     if (!HLSLHighLevel)
-      MPM.add(createDxilInsertPreservesPass(HLSLAllowPreserveValues)); // HLSL Change - insert preserve instructions
+      if (HLSLEnableDebugNops) MPM.add(createDxilInsertPreservesPass(HLSLAllowPreserveValues)); // HLSL Change - insert preserve instructions
 
     if (Inliner) {
       MPM.add(createHLLegalizeParameter()); // HLSL Change - legalize parameters

+ 4 - 0
tools/clang/lib/CodeGen/BackendUtil.cpp

@@ -340,6 +340,10 @@ void EmitAssemblyHelper::CreatePasses() {
                         !CodeGenOpts.HLSLOptimizationToggles.count("structurize-loop-exits-for-unroll") ||
                         CodeGenOpts.HLSLOptimizationToggles.find("structurize-loop-exits-for-unroll")->second;
 
+  PMBuilder.HLSLEnableDebugNops =
+                        !CodeGenOpts.HLSLOptimizationToggles.count("debug-nops") ||
+                        CodeGenOpts.HLSLOptimizationToggles.find("debug-nops")->second;
+
   PMBuilder.HLSLEnableLifetimeMarkers = CodeGenOpts.HLSLEnableLifetimeMarkers;
   // HLSL Change - end
 

+ 17 - 0
tools/clang/test/HLSLFileCheck/dxil/debug/no_nops.hlsl

@@ -0,0 +1,17 @@
+// RUN: %dxc -Od -E main -T ps_6_0 %s -opt-disable debug-nops | FileCheck %s
+
+// Test for disabling generation of debug nops.
+
+// CHECK-NOT: @dx.nothing
+
+struct MyStruct {
+  float1 foo;
+};
+
+[RootSignature("")]
+float main(float a : A) : SV_Target {
+  MyStruct my_s;
+  my_s.foo.x = a;
+  return my_s.foo.x;
+}
+