summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorSai Praveen Bangaru <31557731+saipraveenb25@users.noreply.github.com>2024-08-27 21:10:11 -0400
committerGitHub <noreply@github.com>2024-08-27 18:10:11 -0700
commita9882c648c58e6f2821df11c7ee6ac77d9f09473 (patch)
treedb855acb80b569dfe0b4df56a249dc0c35614fca /source
parent4aac22da6ae902eca1e7750f4e5b83ba238b5874 (diff)
Avoid inlining functions with inline ASM blocks. (#4925)
Diffstat (limited to 'source')
-rw-r--r--source/slang/hlsl.meta.slang8
-rw-r--r--source/slang/slang-ir-inline.cpp6
2 files changed, 10 insertions, 4 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 0539097eb..2e449b884 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -83,7 +83,7 @@ __intrinsic_type($(kIROp_HLSLByteAddressBufferType))
struct ByteAddressBuffer
{
[__readNone]
- [__unsafeForceInlineEarly]
+ [ForceInline]
[require(cpp_cuda_glsl_hlsl_metal_spirv, structuredbuffer)]
void GetDimensions(out uint dim)
{
@@ -3839,7 +3839,7 @@ __intrinsic_type($(kIROp_HLSLStructuredBufferType))
struct StructuredBuffer
{
[__readNone]
- [__unsafeForceInlineEarly]
+ [ForceInline]
void GetDimensions(
out uint numStructs,
out uint stride)
@@ -3956,7 +3956,7 @@ struct $(item.name)
// Note(tfoley): supports all operations from `ByteAddressBuffer`
// TODO(tfoley): can this be made a sub-type?
- [__unsafeForceInlineEarly]
+ [ForceInline]
[require(cpp_cuda_glsl_hlsl_spirv, structuredbuffer_rw)]
void GetDimensions(out uint dim)
{
@@ -5285,7 +5285,7 @@ struct $(item.name)
uint DecrementCounter();
[__readNone]
- [__unsafeForceInlineEarly]
+ [ForceInline]
[require(cpp_cuda_glsl_hlsl_metal_spirv, structuredbuffer_rw)]
void GetDimensions(
out uint numStructs,
diff --git a/source/slang/slang-ir-inline.cpp b/source/slang/slang-ir-inline.cpp
index 9b2b59cd9..96e0670b2 100644
--- a/source/slang/slang-ir-inline.cpp
+++ b/source/slang/slang-ir-inline.cpp
@@ -899,12 +899,18 @@ struct PreAutoDiffForceInliningPass : InliningPassBase
{
switch (inst->getOp())
{
+ // Avoid inlining functions that have derivative instructions.
case kIROp_ForwardDifferentiate:
case kIROp_BackwardDifferentiate:
case kIROp_BackwardDifferentiatePrimal:
case kIROp_BackwardDifferentiatePropagate:
canInline = false;
goto end;
+
+ // Also avoid inlining functions with inline-asm instructions.
+ case kIROp_SPIRVAsm:
+ canInline = false;
+ goto end;
}
}
}