Procházet zdrojové kódy

Added a dce to properly clean up unused resources involved in convergent computations

Adam Yang před 7 roky
rodič
revize
9998235d32

+ 3 - 0
lib/Transforms/IPO/PassManagerBuilder.cpp

@@ -595,6 +595,9 @@ void PassManagerBuilder::populateModulePassManager(
   // HLSL Change Begins.
   // HLSL Change Begins.
   if (!HLSLHighLevel) {
   if (!HLSLHighLevel) {
     MPM.add(createDxilConvergentClearPass());
     MPM.add(createDxilConvergentClearPass());
+    MPM.add(createDeadCodeEliminationPass()); // DCE needed after clearing convergent
+                                              // before CreateHandleForLib so no
+                                              // unused resources get added declared.
     MPM.add(createMultiDimArrayToOneDimArrayPass());
     MPM.add(createMultiDimArrayToOneDimArrayPass());
     MPM.add(createDxilLowerCreateHandleForLibPass());
     MPM.add(createDxilLowerCreateHandleForLibPass());
     MPM.add(createDxilTranslateRawBuffer());
     MPM.add(createDxilTranslateRawBuffer());

+ 21 - 0
tools/clang/test/CodeGenHLSL/quick-test/resource_cleanup.hlsl

@@ -0,0 +1,21 @@
+// RUN: %dxc /O3 /Tps_6_0 /Emain > %s | FileCheck %s
+
+// Make sure only one cbuffer is emitted for the final
+// dxil.
+
+// CHECK-NOT: cb1 
+
+cbuffer BAR {
+  float bar;
+}
+cbuffer FOO {
+  float foo;
+}
+
+Texture2D tex0;
+SamplerState samp0;
+
+float main(float2 a : A) : SV_Target {
+  tex0.Sample(samp0, a+float2(bar,-bar));
+  return foo;
+}