Ver Fonte

Merge pull request #1616 from adam-yang/convergence_dce

Properly clean up resources involved in unused convergent values.
Adam Yang há 6 anos atrás
pai
commit
b744770863

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

@@ -595,6 +595,10 @@ void PassManagerBuilder::populateModulePassManager(
   // HLSL Change Begins.
   if (!HLSLHighLevel) {
     MPM.add(createDxilConvergentClearPass());
+    MPM.add(createDeadCodeEliminationPass()); // DCE needed after clearing convergence
+                                              // annotations before CreateHandleForLib
+                                              // so no unused resources get re-added to
+                                              // DxilModule.
     MPM.add(createMultiDimArrayToOneDimArrayPass());
     MPM.add(createDxilLowerCreateHandleForLibPass());
     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;
+}