diff options
| author | Sai Praveen Bangaru <31557731+saipraveenb25@users.noreply.github.com> | 2024-08-27 21:10:11 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-27 18:10:11 -0700 |
| commit | a9882c648c58e6f2821df11c7ee6ac77d9f09473 (patch) | |
| tree | db855acb80b569dfe0b4df56a249dc0c35614fca /source | |
| parent | 4aac22da6ae902eca1e7750f4e5b83ba238b5874 (diff) | |
Avoid inlining functions with inline ASM blocks. (#4925)
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 8 | ||||
| -rw-r--r-- | source/slang/slang-ir-inline.cpp | 6 |
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; } } } |
