impr: tracking possibleSideEffects#2695
Conversation
- Mark function arguments as side-effect-free - Mark tgpu.const reads as side-effect-free - Propagate operand side-effects in pure binary operators - Add side-effect tracking to dualImpl (matching callableSchema) - Mark buffer reads (uniform/readonly/mutable) as side-effect-free - Add comprehensive ternary runtime tests from issue #2587 - Update existing ternary test for runtime select() generation
- Mark function arguments as side-effect-free - Mark tgpu.const reads as side-effect-free - Propagate operand side-effects in pure binary operators - Add side-effect tracking to dualImpl (matching callableSchema) - Mark buffer reads (uniform/readonly/mutable) as side-effect-free - Add comprehensive ternary runtime tests from issue #2587 - Update existing ternary test for runtime select() generation
… discard sideEffects
7435193 to
befe8de
Compare
|
pkg.pr.new packages benchmark commit |
befe8de to
6d5ee16
Compare
Bundle size comparison (
|
| 🟢 Decreased | ➖ Unchanged | 🔴 Increased (max 2.94%) | ❔ Unknown |
|---|---|---|---|
| 0 | 36 | 284 | 0 |
import * as ... in PR vs import * as ... in target (did bundle size increase?):
Click to reveal the results table (144 entries).
| Test | tsdown |
|---|---|
| d_ref.ts | 4.93 kB ( |
| d_bool.ts | 13.17 kB ( |
| d_f16.ts | 13.17 kB ( |
| d_f32.ts | 13.17 kB ( |
| d_i32.ts | 13.17 kB ( |
| d_u32.ts | 13.17 kB ( |
| d_u16.ts | 13.19 kB ( |
| std_discard.ts | 14.46 kB ( |
| std_copy.ts | 14.70 kB ( |
| std_arrayLength.ts | 14.71 kB ( |
| d_textureDepth2d.ts | 13.61 kB ( |
| d_textureDepthCube.ts | 13.62 kB ( |
| d_texture1d.ts | 13.62 kB ( |
| d_texture2d.ts | 13.62 kB ( |
| d_texture3d.ts | 13.62 kB ( |
| d_textureCube.ts | 13.63 kB ( |
| d_textureDepth2dArray.ts | 13.63 kB ( |
| d_textureDepthCubeArray.ts | 13.63 kB ( |
| d_textureDepthMultisampled2d.ts | 13.63 kB ( |
| d_texture2dArray.ts | 13.64 kB ( |
| d_textureCubeArray.ts | 13.64 kB ( |
| d_textureMultisampled2d.ts | 13.65 kB ( |
| std_dpdx.ts | 15.42 kB ( |
| std_dpdxCoarse.ts | 15.43 kB ( |
| std_dpdxFine.ts | 15.43 kB ( |
| std_dpdy.ts | 15.43 kB ( |
| std_dpdyCoarse.ts | 15.43 kB ( |
| std_dpdyFine.ts | 15.43 kB ( |
| std_fwidth.ts | 15.43 kB ( |
| std_fwidthCoarse.ts | 15.43 kB ( |
| std_fwidthFine.ts | 15.43 kB ( |
| std_atomicLoad.ts | 16.22 kB ( |
| std_atomicStore.ts | 16.23 kB ( |
| std_textureBarrier.ts | 16.23 kB ( |
| std_atomicAdd.ts | 16.24 kB ( |
| std_atomicAnd.ts | 16.24 kB ( |
| std_atomicMax.ts | 16.24 kB ( |
| std_atomicMin.ts | 16.24 kB ( |
| std_atomicOr.ts | 16.24 kB ( |
| std_atomicSub.ts | 16.24 kB ( |
| std_atomicXor.ts | 16.24 kB ( |
| std_storageBarrier.ts | 16.24 kB ( |
| std_workgroupBarrier.ts | 16.24 kB ( |
| d_vec2b.ts | 19.60 kB ( |
| d_vec2f.ts | 19.60 kB ( |
| d_vec2h.ts | 19.60 kB ( |
| d_vec2i.ts | 19.60 kB ( |
| d_vec2u.ts | 19.60 kB ( |
| d_vec3b.ts | 19.60 kB ( |
| d_vec3f.ts | 19.60 kB ( |
| d_vec3h.ts | 19.60 kB ( |
| d_vec3i.ts | 19.60 kB ( |
| d_vec3u.ts | 19.60 kB ( |
| d_vec4b.ts | 19.60 kB ( |
| d_vec4f.ts | 19.60 kB ( |
| d_vec4h.ts | 19.60 kB ( |
| d_vec4i.ts | 19.60 kB ( |
| d_vec4u.ts | 19.60 kB ( |
| d_uint8.ts | 21.10 kB ( |
| d_float16.ts | 21.10 kB ( |
| d_float16x2.ts | 21.10 kB ( |
| d_float16x4.ts | 21.10 kB ( |
| d_float32.ts | 21.10 kB ( |
| d_float32x2.ts | 21.10 kB ( |
| d_float32x3.ts | 21.10 kB ( |
| d_float32x4.ts | 21.10 kB ( |
| d_sint16.ts | 21.10 kB ( |
| d_sint16x2.ts | 21.10 kB ( |
| d_sint16x4.ts | 21.10 kB ( |
| d_sint32.ts | 21.10 kB ( |
| d_sint32x2.ts | 21.10 kB ( |
| d_sint32x3.ts | 21.10 kB ( |
| d_sint32x4.ts | 21.10 kB ( |
| d_sint8.ts | 21.10 kB ( |
| d_sint8x2.ts | 21.10 kB ( |
| d_sint8x4.ts | 21.10 kB ( |
| d_snorm16.ts | 21.10 kB ( |
| d_snorm16x2.ts | 21.10 kB ( |
| d_snorm16x4.ts | 21.10 kB ( |
| d_snorm8.ts | 21.10 kB ( |
| d_snorm8x2.ts | 21.10 kB ( |
| d_snorm8x4.ts | 21.10 kB ( |
| d_uint16.ts | 21.10 kB ( |
| d_uint16x2.ts | 21.10 kB ( |
| d_uint16x4.ts | 21.10 kB ( |
| d_uint32.ts | 21.10 kB ( |
| d_uint32x2.ts | 21.10 kB ( |
| d_uint32x3.ts | 21.10 kB ( |
| d_uint32x4.ts | 21.10 kB ( |
| d_uint8x2.ts | 21.10 kB ( |
| d_uint8x4.ts | 21.10 kB ( |
| d_unorm10_10_10_2.ts | 21.10 kB ( |
| d_unorm16.ts | 21.10 kB ( |
| d_unorm16x2.ts | 21.10 kB ( |
| d_unorm16x4.ts | 21.10 kB ( |
| d_unorm8.ts | 21.10 kB ( |
| d_unorm8x2.ts | 21.10 kB ( |
| d_unorm8x4.ts | 21.10 kB ( |
| d_unorm8x4_bgra.ts | 21.10 kB ( |
| d_formatToWGSLType.ts | 21.09 kB ( |
| d_packedFormats.ts | 21.12 kB ( |
| d_isPackedData.ts | 21.16 kB ( |
| d_alignmentOf.ts | 22.05 kB ( |
| std_subgroupAdd.ts | 24.55 kB ( |
| std_subgroupAll.ts | 24.56 kB ( |
| std_subgroupAnd.ts | 24.56 kB ( |
| std_subgroupAny.ts | 24.56 kB ( |
| std_subgroupBallot.ts | 24.56 kB ( |
| std_subgroupBroadcast.ts | 24.56 kB ( |
| std_subgroupBroadcastFirst.ts | 24.56 kB ( |
| std_subgroupElect.ts | 24.56 kB ( |
| std_subgroupExclusiveAdd.ts | 24.56 kB ( |
| std_subgroupExclusiveMul.ts | 24.56 kB ( |
| std_subgroupInclusiveAdd.ts | 24.56 kB ( |
| std_subgroupInclusiveMul.ts | 24.56 kB ( |
| std_subgroupMax.ts | 24.56 kB ( |
| std_subgroupMin.ts | 24.56 kB ( |
| std_subgroupMul.ts | 24.56 kB ( |
| std_subgroupOr.ts | 24.56 kB ( |
| std_subgroupShuffle.ts | 24.56 kB ( |
| std_subgroupShuffleDown.ts | 24.56 kB ( |
| std_subgroupShuffleUp.ts | 24.56 kB ( |
| std_subgroupShuffleXor.ts | 24.56 kB ( |
| std_subgroupXor.ts | 24.56 kB ( |
| std_textureDimensions.ts | 26.16 kB ( |
| std_textureGather.ts | 26.16 kB ( |
| std_textureLoad.ts | 26.17 kB ( |
| std_textureSample.ts | 26.17 kB ( |
| std_textureSampleBaseClampToEdge.ts | 26.17 kB ( |
| std_textureSampleBias.ts | 26.17 kB ( |
| std_textureSampleCompare.ts | 26.17 kB ( |
| std_textureSampleCompareLevel.ts | 26.17 kB ( |
| std_textureSampleGrad.ts | 26.17 kB ( |
| std_textureSampleLevel.ts | 26.17 kB ( |
| std_textureStore.ts | 26.17 kB ( |
| d_isBuiltin.ts | 24.77 kB ( |
| d_sizeOf.ts | 24.82 kB ( |
| d_isContiguous.ts | 24.83 kB ( |
| d_getLongestContiguousPrefix.ts | 24.84 kB ( |
| d_size.ts | 26.51 kB ( |
| d_align.ts | 26.51 kB ( |
| d_location.ts | 26.51 kB ( |
| d_interpolate.ts | 26.51 kB ( |
| d_invariant.ts | 26.88 kB ( |
import { ... } in PR vs import * as ... in PR (is the library tree-Shakeable?):
Click to reveal the results table (297 entries).
| Test | tsdown |
|---|---|
| d_Void.ts | 87.71 kB ( |
| d_sampler.ts | 87.71 kB ( |
| d_isPtr.ts | 87.71 kB ( |
| d_comparisonSampler.ts | 87.72 kB ( |
| d_isSizeAttrib.ts | 87.71 kB ( |
| d_isWgslArray.ts | 87.71 kB ( |
| d_isAlignAttrib.ts | 87.71 kB ( |
| d_isWgslStruct.ts | 87.71 kB ( |
| d_isAtomic.ts | 87.71 kB ( |
| d_isBuiltinAttrib.ts | 87.72 kB ( |
| d_isLocationAttrib.ts | 87.72 kB ( |
| d_isDecorated.ts | 87.71 kB ( |
| d_isInterpolateAttrib.ts | 87.72 kB ( |
| d_atomic.ts | 87.71 kB ( |
| d_ptrHandle.ts | 87.71 kB ( |
| d_ptrUniform.ts | 87.71 kB ( |
| d_ptrStorage.ts | 87.71 kB ( |
| d_ptrPrivate.ts | 87.71 kB ( |
| d_ptrFn.ts | 87.71 kB ( |
| d_ptrWorkgroup.ts | 87.71 kB ( |
| d_textureExternal.ts | 87.72 kB ( |
| d_textureStorage1d.ts | 87.72 kB ( |
| d_textureStorage2d.ts | 87.72 kB ( |
| d_textureStorage3d.ts | 87.72 kB ( |
| d_textureStorage2dArray.ts | 87.72 kB ( |
| d_isDisarray.ts | 87.71 kB ( |
| d_isUnstruct.ts | 87.71 kB ( |
| d_isLooseDecorated.ts | 87.72 kB ( |
| d_isLooseData.ts | 87.71 kB ( |
| d_isWgslData.ts | 87.71 kB ( |
| d_unstruct.ts | 87.71 kB ( |
| d_isData.ts | 87.71 kB ( |
| d_deepEqual.ts | 87.71 kB ( |
| d_struct.ts | 87.71 kB ( |
| d_ref.ts | 87.71 kB ( |
| std_discard.ts | 105.53 kB ( |
| std_isBeingTranspiled.ts | 105.54 kB ( |
| std_getTargetShaderLanguage.ts | 105.55 kB ( |
| std_extensionEnabled.ts | 105.54 kB ( |
| std_copy.ts | 105.53 kB ( |
| std_arrayLength.ts | 105.53 kB ( |
| std_range.ts | 105.53 kB ( |
| std_dpdx.ts | 105.53 kB ( |
| std_fwidthCoarse.ts | 105.54 kB ( |
| std_dpdxCoarse.ts | 105.53 kB ( |
| std_dpdyCoarse.ts | 105.53 kB ( |
| std_fwidthFine.ts | 105.53 kB ( |
| std_dpdxFine.ts | 105.53 kB ( |
| std_dpdyFine.ts | 105.53 kB ( |
| std_fwidth.ts | 105.53 kB ( |
| std_dpdy.ts | 105.53 kB ( |
| d_bool.ts | 87.71 kB ( |
| d_f16.ts | 87.71 kB ( |
| d_f32.ts | 87.71 kB ( |
| d_i32.ts | 87.71 kB ( |
| d_u32.ts | 87.71 kB ( |
| d_u16.ts | 87.71 kB ( |
| std_atomicLoad.ts | 105.53 kB ( |
| std_textureBarrier.ts | 105.54 kB ( |
| std_atomicStore.ts | 105.53 kB ( |
| std_workgroupBarrier.ts | 105.54 kB ( |
| std_storageBarrier.ts | 105.54 kB ( |
| std_atomicAdd.ts | 105.53 kB ( |
| std_atomicAnd.ts | 105.53 kB ( |
| std_atomicMax.ts | 105.53 kB ( |
| std_atomicMin.ts | 105.53 kB ( |
| std_atomicSub.ts | 105.53 kB ( |
| std_atomicXor.ts | 105.53 kB ( |
| std_atomicOr.ts | 105.53 kB ( |
| d_textureDepth2d.ts | 87.72 kB ( |
| d_textureDepthCube.ts | 87.72 kB ( |
| d_texture1d.ts | 87.71 kB ( |
| d_texture2d.ts | 87.71 kB ( |
| d_texture3d.ts | 87.71 kB ( |
| d_textureDepth2dArray.ts | 87.72 kB ( |
| d_textureCube.ts | 87.71 kB ( |
| d_textureDepthCubeArray.ts | 87.72 kB ( |
| d_textureDepthMultisampled2d.ts | 87.73 kB ( |
| d_texture2dArray.ts | 87.72 kB ( |
| d_textureCubeArray.ts | 87.72 kB ( |
| d_textureMultisampled2d.ts | 87.72 kB ( |
| d_disarrayOf.ts | 87.71 kB ( |
| d_vec2b.ts | 87.71 kB ( |
| d_vec2f.ts | 87.71 kB ( |
| d_vec2h.ts | 87.71 kB ( |
| d_vec2i.ts | 87.71 kB ( |
| d_vec2u.ts | 87.71 kB ( |
| d_vec3b.ts | 87.71 kB ( |
| d_vec3f.ts | 87.71 kB ( |
| d_vec3h.ts | 87.71 kB ( |
| d_vec3i.ts | 87.71 kB ( |
| d_vec3u.ts | 87.71 kB ( |
| d_vec4b.ts | 87.71 kB ( |
| d_vec4f.ts | 87.71 kB ( |
| d_vec4h.ts | 87.71 kB ( |
| d_vec4i.ts | 87.71 kB ( |
| d_vec4u.ts | 87.71 kB ( |
| std_subgroupAdd.ts | 105.53 kB ( |
| std_subgroupBroadcastFirst.ts | 105.54 kB ( |
| std_subgroupExclusiveAdd.ts | 105.54 kB ( |
| std_subgroupExclusiveMul.ts | 105.54 kB ( |
| std_subgroupInclusiveAdd.ts | 105.54 kB ( |
| std_subgroupInclusiveMul.ts | 105.54 kB ( |
| std_subgroupShuffleDown.ts | 105.54 kB ( |
| std_subgroupShuffleXor.ts | 105.54 kB ( |
| std_subgroupBroadcast.ts | 105.54 kB ( |
| std_subgroupShuffleUp.ts | 105.54 kB ( |
| std_subgroupShuffle.ts | 105.54 kB ( |
| std_subgroupBallot.ts | 105.54 kB ( |
| std_subgroupElect.ts | 105.54 kB ( |
| std_subgroupAll.ts | 105.53 kB ( |
| std_subgroupAnd.ts | 105.53 kB ( |
| std_subgroupAny.ts | 105.53 kB ( |
| std_subgroupMax.ts | 105.53 kB ( |
| std_subgroupMin.ts | 105.53 kB ( |
| std_subgroupMul.ts | 105.53 kB ( |
| std_subgroupXor.ts | 105.53 kB ( |
| std_subgroupOr.ts | 105.53 kB ( |
| d_formatToWGSLType.ts | 87.72 kB ( |
| d_uint8.ts | 87.71 kB ( |
| d_unorm10_10_10_2.ts | 87.72 kB ( |
| d_unorm8x4_bgra.ts | 87.71 kB ( |
| d_float16x2.ts | 87.71 kB ( |
| d_float16x4.ts | 87.71 kB ( |
| d_float32x2.ts | 87.71 kB ( |
| d_float32x3.ts | 87.71 kB ( |
| d_float32x4.ts | 87.71 kB ( |
| d_snorm16x2.ts | 87.71 kB ( |
| d_snorm16x4.ts | 87.71 kB ( |
| d_unorm16x2.ts | 87.71 kB ( |
| d_unorm16x4.ts | 87.71 kB ( |
| d_sint16x2.ts | 87.71 kB ( |
| d_sint16x4.ts | 87.71 kB ( |
| d_sint32x2.ts | 87.71 kB ( |
| d_sint32x3.ts | 87.71 kB ( |
| d_sint32x4.ts | 87.71 kB ( |
| d_snorm8x2.ts | 87.71 kB ( |
| d_snorm8x4.ts | 87.71 kB ( |
| d_uint16x2.ts | 87.71 kB ( |
| d_uint16x4.ts | 87.71 kB ( |
| d_uint32x2.ts | 87.71 kB ( |
| d_uint32x3.ts | 87.71 kB ( |
| d_uint32x4.ts | 87.71 kB ( |
| d_unorm8x2.ts | 87.71 kB ( |
| d_unorm8x4.ts | 87.71 kB ( |
| d_float16.ts | 87.71 kB ( |
| d_float32.ts | 87.71 kB ( |
| d_sint8x2.ts | 87.71 kB ( |
| d_sint8x4.ts | 87.71 kB ( |
| d_snorm16.ts | 87.71 kB ( |
| d_uint8x2.ts | 87.71 kB ( |
| d_uint8x4.ts | 87.71 kB ( |
| d_unorm16.ts | 87.71 kB ( |
| d_sint16.ts | 87.71 kB ( |
| d_sint32.ts | 87.71 kB ( |
| d_snorm8.ts | 87.71 kB ( |
| d_uint16.ts | 87.71 kB ( |
| d_uint32.ts | 87.71 kB ( |
| d_unorm8.ts | 87.71 kB ( |
| d_sint8.ts | 87.71 kB ( |
| d_packedFormats.ts | 87.71 kB ( |
| d_isPackedData.ts | 87.71 kB ( |
| std_textureDimensions.ts | 105.54 kB ( |
| std_textureGather.ts | 105.54 kB ( |
| std_textureSampleBaseClampToEdge.ts | 105.55 kB ( |
| std_textureSampleCompareLevel.ts | 105.55 kB ( |
| std_textureSampleCompare.ts | 105.54 kB ( |
| std_textureSampleLevel.ts | 105.54 kB ( |
| std_textureSampleBias.ts | 105.54 kB ( |
| std_textureSampleGrad.ts | 105.54 kB ( |
| std_textureSample.ts | 105.54 kB ( |
| std_textureStore.ts | 105.54 kB ( |
| std_textureLoad.ts | 105.53 kB ( |
| d_alignmentOf.ts | 87.71 kB ( |
| std_translation4.ts | 105.54 kB ( |
| std_rotationX4.ts | 105.53 kB ( |
| std_rotationY4.ts | 105.53 kB ( |
| std_rotationZ4.ts | 105.53 kB ( |
| std_identity2.ts | 105.53 kB ( |
| std_identity3.ts | 105.53 kB ( |
| std_identity4.ts | 105.53 kB ( |
| std_scaling4.ts | 105.53 kB ( |
| d_isBuiltin.ts | 87.71 kB ( |
| d_sizeOf.ts | 87.71 kB ( |
| d_isContiguous.ts | 87.71 kB ( |
| d_getLongestContiguousPrefix.ts | 87.73 kB ( |
| d_arrayOf.ts | 87.71 kB ( |
| d_size.ts | 87.71 kB ( |
| d_align.ts | 87.71 kB ( |
| d_location.ts | 87.71 kB ( |
| d_interpolate.ts | 87.71 kB ( |
| d_invariant.ts | 87.71 kB ( |
| d_mat4x4f.ts | 87.71 kB ( |
| d_mat2x2f.ts | 87.71 kB ( |
| d_mat3x3f.ts | 87.71 kB ( |
| d_matToArray.ts | 87.71 kB ( |
| d_builtin.ts | 87.71 kB ( |
| std_unpack2x16float.ts | 105.54 kB ( |
| std_unpack4x8unorm.ts | 105.54 kB ( |
| std_pack2x16float.ts | 105.54 kB ( |
| std_pack4x8unorm.ts | 105.54 kB ( |
| std_bitcastU32toF32.ts | 105.54 kB ( |
| std_bitcastU32toI32.ts | 105.54 kB ( |
| std_neg.ts | 105.53 kB ( |
| std_bitShiftRight.ts | 105.54 kB ( |
| std_bitShiftLeft.ts | 105.54 kB ( |
| std_add.ts | 105.53 kB ( |
| std_div.ts | 105.53 kB ( |
| std_mod.ts | 105.53 kB ( |
| std_mul.ts | 105.53 kB ( |
| std_sub.ts | 105.53 kB ( |
| std_translate4.ts | 105.53 kB ( |
| std_rotateX4.ts | 105.53 kB ( |
| std_scale4.ts | 105.53 kB ( |
| std_rotateY4.ts | 105.53 kB ( |
| std_rotateZ4.ts | 105.53 kB ( |
| d_memoryLayoutOf.ts | 87.72 kB ( |
| std_and.ts | 105.53 kB ( |
| std_or.ts | 105.53 kB ( |
| std_select.ts | 105.53 kB ( |
| std_allEq.ts | 105.53 kB ( |
| std_all.ts | 105.53 kB ( |
| std_not.ts | 105.53 kB ( |
| std_eq.ts | 105.53 kB ( |
| std_lt.ts | 105.53 kB ( |
| std_ne.ts | 105.53 kB ( |
| std_isCloseTo.ts | 105.53 kB ( |
| std_any.ts | 105.53 kB ( |
| std_ge.ts | 105.53 kB ( |
| std_gt.ts | 105.53 kB ( |
| std_le.ts | 105.53 kB ( |
| std_dot4U8Packed.ts | 105.54 kB ( |
| std_length.ts | 105.53 kB ( |
| std_countTrailingZeros.ts | 105.54 kB ( |
| std_distance.ts | 105.53 kB ( |
| std_dot.ts | 105.53 kB ( |
| std_countLeadingZeros.ts | 105.54 kB ( |
| std_firstTrailingBit.ts | 105.54 kB ( |
| std_firstLeadingBit.ts | 105.54 kB ( |
| std_fract.ts | 105.53 kB ( |
| std_frexp.ts | 105.53 kB ( |
| std_modf.ts | 105.53 kB ( |
| std_quantizeToF16.ts | 105.54 kB ( |
| std_mix.ts | 105.53 kB ( |
| std_countOneBits.ts | 105.54 kB ( |
| std_dot4I8Packed.ts | 105.54 kB ( |
| std_determinant.ts | 105.53 kB ( |
| std_extractBits.ts | 105.53 kB ( |
| std_faceForward.ts | 105.53 kB ( |
| std_inverseSqrt.ts | 105.53 kB ( |
| std_reverseBits.ts | 105.53 kB ( |
| std_insertBits.ts | 105.53 kB ( |
| std_smoothstep.ts | 105.53 kB ( |
| std_normalize.ts | 105.53 kB ( |
| std_transpose.ts | 105.53 kB ( |
| std_saturate.ts | 105.53 kB ( |
| std_degrees.ts | 105.53 kB ( |
| std_radians.ts | 105.53 kB ( |
| std_reflect.ts | 105.53 kB ( |
| std_refract.ts | 105.53 kB ( |
| std_acosh.ts | 105.53 kB ( |
| std_asinh.ts | 105.53 kB ( |
| std_atan2.ts | 105.53 kB ( |
| std_atanh.ts | 105.53 kB ( |
| std_clamp.ts | 105.53 kB ( |
| std_cross.ts | 105.53 kB ( |
| std_floor.ts | 105.53 kB ( |
| std_ldexp.ts | 105.53 kB ( |
| std_round.ts | 105.53 kB ( |
| std_trunc.ts | 105.53 kB ( |
| std_acos.ts | 105.53 kB ( |
| std_asin.ts | 105.53 kB ( |
| std_atan.ts | 105.53 kB ( |
| std_ceil.ts | 105.53 kB ( |
| std_cosh.ts | 105.53 kB ( |
| std_exp2.ts | 105.53 kB ( |
| std_log2.ts | 105.53 kB ( |
| std_sign.ts | 105.53 kB ( |
| std_sinh.ts | 105.53 kB ( |
| std_sqrt.ts | 105.53 kB ( |
| std_step.ts | 105.53 kB ( |
| std_tanh.ts | 105.53 kB ( |
| std_abs.ts | 105.53 kB ( |
| std_cos.ts | 105.53 kB ( |
| std_exp.ts | 105.53 kB ( |
| std_fma.ts | 105.53 kB ( |
| std_log.ts | 105.53 kB ( |
| std_max.ts | 105.53 kB ( |
| std_min.ts | 105.53 kB ( |
| std_pow.ts | 105.53 kB ( |
| std_sin.ts | 105.53 kB ( |
| std_tan.ts | 105.53 kB ( |
| common_fullScreenTriangle.ts | 57.22 kB ( |
| common_writeSoA.ts | 57.21 kB ( |
| STATIC_allImports.ts | 289.98 kB ( |
| STATIC_d.ts | 87.70 kB ( |
| STATIC_std.ts | 105.52 kB ( |
If you wish to run a comparison for other, slower bundlers, run the 'Tree-shake test' from the GitHub Actions menu.
Resolution Time Benchmark---
config:
themeVariables:
xyChart:
plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
title "Random Branching (🔴 PR | 🔵 main | 🟢 release)"
x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
y-axis "time (ms)"
line [0.96, 1.85, 4.13, 6.62, 8.37, 11.19, 21.73, 23.54]
line [0.96, 2.01, 4.35, 6.63, 7.79, 10.58, 23.96, 22.64]
line [0.91, 1.93, 4.39, 7.14, 8.33, 11.16, 22.59, 25.85]
---
config:
themeVariables:
xyChart:
plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
title "Linear Recursion (🔴 PR | 🔵 main | 🟢 release)"
x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
y-axis "time (ms)"
line [0.31, 0.61, 0.70, 0.87, 1.15, 1.23, 1.47, 1.68]
line [0.36, 0.56, 0.70, 0.85, 1.15, 1.21, 1.51, 1.65]
line [0.29, 0.49, 0.76, 0.83, 1.13, 1.21, 1.46, 1.60]
---
config:
themeVariables:
xyChart:
plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
title "Full Tree (🔴 PR | 🔵 main | 🟢 release)"
x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
y-axis "time (ms)"
line [0.95, 2.16, 4.69, 7.39, 13.68, 27.55, 56.39, 116.20]
line [0.80, 2.21, 4.94, 7.04, 13.17, 26.48, 55.21, 116.74]
line [0.79, 2.13, 4.02, 6.39, 13.08, 26.44, 57.48, 115.59]
|
There was a problem hiding this comment.
Pull request overview
This PR extends the TGSL snippet system to track possibleSideEffects more precisely, enabling additional safe codegen optimizations (notably allowing runtime-value ternaries when both branches are side-effect-free) and adds/expands tests around side-effect classification.
Changes:
- Thread
possibleSideEffectsthrough snippet creation/conversion paths (generator, conversion helpers, resource handles, raw snippets, etc.). - Relax ternary restrictions by permitting runtime conditions when both branches are proven side-effect-free (compiled to
select()). - Expand side-effect test coverage across literals, resources, accessors, indexing, conversions, refs, and logical operators.
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/typegpu/tests/utils/parseResolved.ts | Improves return-expression extraction by using typed expression generation when return type is known; broadens expectSideEffects input types. |
| packages/typegpu/tests/tgsl/sideEffects.test.ts | Adds extensive side-effect classification tests for many TGSL constructs and resource reads. |
| packages/typegpu/src/tgsl/wgslGenerator.ts | Propagates possibleSideEffects across generated snippets and updates conditional/select and operator logic. |
| packages/typegpu/src/tgsl/generationHelpers.ts | Preserves possibleSideEffects through concretization/coercion helpers. |
| packages/typegpu/src/tgsl/forOfUtils.ts | Marks range/default iteration snippets as side-effect-free constants. |
| packages/typegpu/src/tgsl/conversion.ts | Preserves possibleSideEffects across snippet conversions/actions. |
| packages/typegpu/src/std/boolean.ts | Updates default precision snippet to be explicitly side-effect-free. |
| packages/typegpu/src/resolutionCtx.ts | Ensures snippet resolution preserves possibleSideEffects. |
| packages/typegpu/src/data/snippet.ts | Clarifies semantics/docs for possibleSideEffects and documents snip’s default behavior. |
| packages/typegpu/src/data/ref.ts | Threads possibleSideEffects through ref/deref operations. |
| packages/typegpu/src/core/variable/tgpuVariable.ts | Marks variable .$ snippet generation as side-effect-free. |
| packages/typegpu/src/core/unroll/tgpuUnroll.ts | Preserves possibleSideEffects when resolving/unrolling iterables. |
| packages/typegpu/src/core/texture/texture.ts | Marks texture-view handle snippets as side-effect-free. |
| packages/typegpu/src/core/texture/externalTexture.ts | Marks external texture handle snippets as side-effect-free. |
| packages/typegpu/src/core/slot/accessor.ts | Avoids eagerly executing GPU-callable functions during accessor resolution; propagates possibleSideEffects when calling functions. |
| packages/typegpu/src/core/sampler/sampler.ts | Marks sampler handle snippets as side-effect-free. |
| packages/typegpu/src/core/rawCodeSnippet/tgpuRawCodeSnippet.ts | Adds possibleSideEffects parameter to raw snippets and preserves it in .$ and resolution. |
| packages/typegpu/src/core/function/dualImpl.ts | Sets function call snippet possibleSideEffects using options.sideEffects and/or argument side effects. |
| apps/typegpu-docs/src/content/docs/apis/utils.mdx | Documents ternary relaxation for side-effect-free branches and the new possibleSideEffects raw snippet parameter. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
ℹ️ No critical issues — minor suggestions inline.
Reviewed changes — this PR threads possibleSideEffects through TypeGPU's snippet resolution and codegen so runtime ternaries can safely lower to select() when both branches are pure.
- Propagate side-effect bits across
snip()call sites in accessors, refs, conversions, struct/array constructors, unary/binary operators, loops, raw snippets, andDualImplcalls. - Mark pure sources as side-effect-free: literals, constants, parameters, variable reads, buffer/texture/sampler handles, and pure builtins.
- Keep impure calls conservative: user-defined functions and builtins like
discard/atomics remainpossibleSideEffects: true. - Expand test coverage in
sideEffects.test.tsfor pure and impure expression shapes, and update docs to reflect that runtime ternary conditions are allowed when branches are pure.
Kimi K2 (free via Pullfrog for OSS) | 𝕏
There was a problem hiding this comment.
ℹ️ No new issues in the latest push; prior feedback still stands.
Reviewed changes since last review — the latest push restores the atomicLoad example in DualImplOptions.sideEffects docs and switches the punctuation back to ASCII arrows/hyphens.
- Docs-only polish in
packages/typegpu/src/core/function/dualImpl.ts.
Kimi K2 (free via Pullfrog for OSS) | 𝕏
There was a problem hiding this comment.
Important
The latest push addresses the prior ! constant-fallback feedback, but the updated float NaN guard now misclassifies 0.0 as NaN.
Reviewed changes — the latest commit switches the unary ! constant fallback to possibleSideEffects: false and polishes the side-effect test suite, including renaming tests, using std.isBeingTranspiled, broadening expectSideEffects, and routing returns through _typedExpression in the test helper.
- Addressed prior feedback in
packages/typegpu/src/tgsl/wgslGenerator.tsby returningpossibleSideEffects: falsefor the constant!fallback. - Polished
sideEffects.test.tswith clearer test names, reorganized cases, additional!and conversion coverage, andstd.*builtins. - Updated
parseResolved.tsto type return expressions against the function return type and acceptTgpuFninexpectSideEffects.
Kimi K2 (free via Pullfrog for OSS) | 𝕏
There was a problem hiding this comment.
ℹ️ No new issues in the latest push; prior feedback still stands.
Reviewed changes since last review — added coverage for zero-argument dualFn accessors and polished a side-effect test name.
- Added
allows zero-argument dualFntest inpackages/typegpu/tests/accessor.test.tsto verifytgpu.accessor(d.bool, std.subgroupElect).$resolves correctly. - Renamed side-effect test in
packages/typegpu/tests/tgsl/sideEffects.test.tsfrom "pure function access from accessor" to "pure function call from accessor".
Kimi K2 (free via Pullfrog for OSS) | 𝕏

possibleSideEffects$gpuCallableto theaccessorstpgu.rawCodeSnippetoptionalpossibleSideEffectsfieldCloses #2646.