diff options
| -rw-r--r-- | source/slang/slang-emit.cpp | 2 | ||||
| -rw-r--r-- | source/slang/slang-ir-legalize-is-texture-access.cpp | 21 | ||||
| -rw-r--r-- | source/slang/slang-ir-legalize-is-texture-access.h | 2 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/atomic/atomic-intrinsics.slang | 1 |
4 files changed, 14 insertions, 12 deletions
diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index d3f6ebd8d..cb8460173 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -911,7 +911,7 @@ Result linkAndOptimizeIR( legalizeVectorTypes(irModule, sink); // Legalize `__isTextureAccess` and related. - legalizeIsTextureAccess(irModule); + legalizeIsTextureAccess(irModule, sink); // Once specialization and type legalization have been performed, // we should perform some of our basic optimization steps again, diff --git a/source/slang/slang-ir-legalize-is-texture-access.cpp b/source/slang/slang-ir-legalize-is-texture-access.cpp index 929da591b..a3540e3f2 100644 --- a/source/slang/slang-ir-legalize-is-texture-access.cpp +++ b/source/slang/slang-ir-legalize-is-texture-access.cpp @@ -8,7 +8,7 @@ #include "slang-parameter-binding.h" #include "slang-ir-legalize-image-subscript.h" #include "slang-ir-legalize-varying-params.h" -#include "slang-ir-simplify-cfg.h" +#include "slang-ir-sccp.h" namespace Slang { @@ -17,9 +17,9 @@ namespace Slang return as<IRImageSubscript>(getRootAddr(inst->getOperand(0))); } - void legalizeIsTextureAccess(IRModule* module) + void legalizeIsTextureAccess(IRModule* module, DiagnosticSink* sink) { - HashSet<IRFunc*> functionsToSimplifyCFG; + HashSet<IRFunc*> functionsToSCCP; IRBuilder builder(module); for (auto globalInst : module->getModuleInst()->getChildren()) { @@ -41,7 +41,7 @@ namespace Slang else { inst->replaceUsesWith(builder.getBoolValue(false)); - functionsToSimplifyCFG.add(func); + functionsToSCCP.add(func); } inst->removeAndDeallocate(); continue; @@ -53,7 +53,7 @@ namespace Slang else { inst->replaceUsesWith(builder.getBoolValue(false)); - functionsToSimplifyCFG.add(func); + functionsToSCCP.add(func); } inst->removeAndDeallocate(); continue; @@ -66,7 +66,7 @@ namespace Slang else { inst->replaceUsesWith(builder.getBoolValue(false)); - functionsToSimplifyCFG.add(func); + functionsToSCCP.add(func); } inst->removeAndDeallocate(); continue; @@ -75,10 +75,11 @@ namespace Slang } } } - // Requires a simplifyCFG to ensure Slang does not evaluate 'IRTextureType' code path for - // 'inst' for when 'inst' is not a 'IRTextureType'/TextureAccessor - for(auto func : functionsToSimplifyCFG) - simplifyCFG(func, CFGSimplificationOptions::getFast()); + // Requires a SCCP to ensure Slang does not evaluate 'IRTextureType' code path + // and unresolved 'isTextureAccess' operations for when 'inst' is not a + // 'IRTextureType'/`TextureAccessor` + for (auto func : functionsToSCCP) + applySparseConditionalConstantPropagation(func, sink); } } diff --git a/source/slang/slang-ir-legalize-is-texture-access.h b/source/slang/slang-ir-legalize-is-texture-access.h index eccfe8fcb..9b9e1cca0 100644 --- a/source/slang/slang-ir-legalize-is-texture-access.h +++ b/source/slang/slang-ir-legalize-is-texture-access.h @@ -7,5 +7,5 @@ namespace Slang { class DiagnosticSink; - void legalizeIsTextureAccess(IRModule* module); + void legalizeIsTextureAccess(IRModule* module, DiagnosticSink* sink); } diff --git a/tests/hlsl-intrinsic/atomic/atomic-intrinsics.slang b/tests/hlsl-intrinsic/atomic/atomic-intrinsics.slang index 4c5f00e82..c118b9d23 100644 --- a/tests/hlsl-intrinsic/atomic/atomic-intrinsics.slang +++ b/tests/hlsl-intrinsic/atomic/atomic-intrinsics.slang @@ -1,6 +1,7 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -shaderobj -output-using-type //TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=DX12):-slang -compute -dx12 -profile cs_6_0 -use-dxil -shaderobj -output-using-type -xslang -DDX12 //TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=VK):-vk -emit-spirv-directly -compute -shaderobj -output-using-type -render-feature hardware-device -xslang -DVK +//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=VK):-vk -emit-spirv-via-glsl -compute -shaderobj -output-using-type -render-feature hardware-device -xslang -DVK -xslang -minimum-slang-optimization //TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=VK):-vk -emit-spirv-via-glsl -compute -shaderobj -output-using-type -render-feature hardware-device -xslang -DVK //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj -output-using-type |
