fix: improve runtime ternary support by refining side-effect detection#2615
fix: improve runtime ternary support by refining side-effect detection#2615pullfrog[bot] wants to merge 11 commits into
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
|
pkg.pr.new packages benchmark commit |
Bundle size comparison (
|
| 🟢 Decreased | ➖ Unchanged | 🔴 Increased | ❔ Unknown |
|---|---|---|---|
| 0 | 135 | 185 | 0 |
import * as ... in PR vs import * as ... in target (did bundle size increase?):
Click to reveal the results table (163 entries).
| Test | tsdown |
|---|---|
| STATIC_std.ts | 108.25 kB ( |
| std_dot.ts | 67.14 kB ( |
| std_length.ts | 67.14 kB ( |
| std_distance.ts | 67.14 kB ( |
| std_dot4U8Packed.ts | 67.14 kB ( |
| std_fract.ts | 67.14 kB ( |
| std_frexp.ts | 67.14 kB ( |
| std_mix.ts | 67.14 kB ( |
| std_modf.ts | 67.14 kB ( |
| std_abs.ts | 67.15 kB ( |
| std_acos.ts | 67.15 kB ( |
| std_acosh.ts | 67.15 kB ( |
| std_asin.ts | 67.15 kB ( |
| std_asinh.ts | 67.15 kB ( |
| std_atan.ts | 67.15 kB ( |
| std_atan2.ts | 67.15 kB ( |
| std_atanh.ts | 67.15 kB ( |
| std_ceil.ts | 67.15 kB ( |
| std_clamp.ts | 67.15 kB ( |
| std_cos.ts | 67.15 kB ( |
| std_cosh.ts | 67.15 kB ( |
| std_countLeadingZeros.ts | 67.15 kB ( |
| std_countOneBits.ts | 67.15 kB ( |
| std_countTrailingZeros.ts | 67.15 kB ( |
| std_cross.ts | 67.15 kB ( |
| std_degrees.ts | 67.15 kB ( |
| std_determinant.ts | 67.15 kB ( |
| std_dot4I8Packed.ts | 67.15 kB ( |
| std_exp.ts | 67.15 kB ( |
| std_exp2.ts | 67.15 kB ( |
| std_extractBits.ts | 67.15 kB ( |
| std_faceForward.ts | 67.15 kB ( |
| std_firstLeadingBit.ts | 67.15 kB ( |
| std_firstTrailingBit.ts | 67.15 kB ( |
| std_floor.ts | 67.15 kB ( |
| std_fma.ts | 67.15 kB ( |
| std_insertBits.ts | 67.15 kB ( |
| std_inverseSqrt.ts | 67.15 kB ( |
| std_ldexp.ts | 67.15 kB ( |
| std_log.ts | 67.15 kB ( |
| std_log2.ts | 67.15 kB ( |
| std_max.ts | 67.15 kB ( |
| std_min.ts | 67.15 kB ( |
| std_normalize.ts | 67.15 kB ( |
| std_pow.ts | 67.15 kB ( |
| std_quantizeToF16.ts | 67.15 kB ( |
| std_radians.ts | 67.15 kB ( |
| std_reflect.ts | 67.15 kB ( |
| std_refract.ts | 67.15 kB ( |
| std_reverseBits.ts | 67.15 kB ( |
| std_round.ts | 67.15 kB ( |
| std_saturate.ts | 67.15 kB ( |
| std_sign.ts | 67.15 kB ( |
| std_sin.ts | 67.15 kB ( |
| std_sinh.ts | 67.15 kB ( |
| std_smoothstep.ts | 67.15 kB ( |
| std_sqrt.ts | 67.15 kB ( |
| std_step.ts | 67.15 kB ( |
| std_tan.ts | 67.15 kB ( |
| std_tanh.ts | 67.15 kB ( |
| std_transpose.ts | 67.15 kB ( |
| std_trunc.ts | 67.15 kB ( |
| std_subgroupAdd.ts | 24.34 kB ( |
| std_subgroupAll.ts | 24.35 kB ( |
| std_subgroupAnd.ts | 24.35 kB ( |
| std_subgroupAny.ts | 24.35 kB ( |
| std_subgroupBallot.ts | 24.35 kB ( |
| std_subgroupBroadcast.ts | 24.35 kB ( |
| std_subgroupBroadcastFirst.ts | 24.35 kB ( |
| std_subgroupElect.ts | 24.35 kB ( |
| std_subgroupExclusiveAdd.ts | 24.35 kB ( |
| std_subgroupExclusiveMul.ts | 24.35 kB ( |
| std_subgroupInclusiveAdd.ts | 24.35 kB ( |
| std_subgroupInclusiveMul.ts | 24.35 kB ( |
| std_subgroupMax.ts | 24.35 kB ( |
| std_subgroupMin.ts | 24.35 kB ( |
| std_subgroupMul.ts | 24.35 kB ( |
| std_subgroupOr.ts | 24.35 kB ( |
| std_subgroupShuffle.ts | 24.35 kB ( |
| std_subgroupShuffleDown.ts | 24.35 kB ( |
| std_subgroupShuffleUp.ts | 24.35 kB ( |
| std_subgroupShuffleXor.ts | 24.35 kB ( |
| std_subgroupXor.ts | 24.35 kB ( |
| std_atomicLoad.ts | 16.02 kB ( |
| std_atomicStore.ts | 16.02 kB ( |
| std_textureBarrier.ts | 16.02 kB ( |
| std_atomicAdd.ts | 16.03 kB ( |
| std_atomicAnd.ts | 16.03 kB ( |
| std_atomicMax.ts | 16.03 kB ( |
| std_atomicMin.ts | 16.03 kB ( |
| std_atomicOr.ts | 16.03 kB ( |
| std_atomicSub.ts | 16.03 kB ( |
| std_atomicXor.ts | 16.03 kB ( |
| std_storageBarrier.ts | 16.03 kB ( |
| std_workgroupBarrier.ts | 16.03 kB ( |
| std_dpdx.ts | 15.22 kB ( |
| std_dpdxCoarse.ts | 15.22 kB ( |
| std_dpdxFine.ts | 15.22 kB ( |
| std_dpdy.ts | 15.22 kB ( |
| std_dpdyCoarse.ts | 15.22 kB ( |
| std_dpdyFine.ts | 15.22 kB ( |
| std_fwidth.ts | 15.22 kB ( |
| std_fwidthCoarse.ts | 15.22 kB ( |
| std_fwidthFine.ts | 15.22 kB ( |
| std_and.ts | 52.19 kB ( |
| std_or.ts | 52.19 kB ( |
| std_all.ts | 52.19 kB ( |
| std_allEq.ts | 52.19 kB ( |
| std_eq.ts | 52.19 kB ( |
| std_lt.ts | 52.19 kB ( |
| std_ne.ts | 52.19 kB ( |
| std_not.ts | 52.19 kB ( |
| std_select.ts | 52.19 kB ( |
| std_any.ts | 52.20 kB ( |
| std_ge.ts | 52.20 kB ( |
| std_gt.ts | 52.20 kB ( |
| std_isCloseTo.ts | 52.20 kB ( |
| std_le.ts | 52.20 kB ( |
| std_textureDimensions.ts | 25.96 kB ( |
| std_textureGather.ts | 25.96 kB ( |
| std_textureLoad.ts | 25.96 kB ( |
| std_textureSample.ts | 25.96 kB ( |
| std_textureSampleBaseClampToEdge.ts | 25.96 kB ( |
| std_textureSampleBias.ts | 25.96 kB ( |
| std_textureSampleCompare.ts | 25.96 kB ( |
| std_textureSampleCompareLevel.ts | 25.96 kB ( |
| std_textureSampleGrad.ts | 25.96 kB ( |
| std_textureSampleLevel.ts | 25.96 kB ( |
| std_textureStore.ts | 25.96 kB ( |
| STATIC_allImports.ts | 293.83 kB ( |
| std_rotateX4.ts | 49.44 kB ( |
| std_scale4.ts | 49.44 kB ( |
| std_translate4.ts | 49.44 kB ( |
| std_rotateY4.ts | 49.45 kB ( |
| std_rotateZ4.ts | 49.45 kB ( |
| STATIC_tgpu.ts | 263.08 kB ( |
| tgpu_fn.ts | 263.08 kB ( |
| tgpu_init.ts | 263.09 kB ( |
| tgpu_lazy.ts | 263.09 kB ( |
| tgpu_slot.ts | 263.09 kB ( |
| tgpu_const.ts | 263.09 kB ( |
| tgpu_unroll.ts | 263.09 kB ( |
| tgpu_resolve.ts | 263.09 kB ( |
| tgpu_accessor.ts | 263.09 kB ( |
| tgpu_comptime.ts | 263.09 kB ( |
| tgpu_vertexFn.ts | 263.09 kB ( |
| tgpu_computeFn.ts | 263.09 kB ( |
| tgpu_fragmentFn.ts | 263.09 kB ( |
| tgpu_privateVar.ts | 263.09 kB ( |
| tgpu_vertexLayout.ts | 263.09 kB ( |
| tgpu_workgroupVar.ts | 263.09 kB ( |
| tgpu_initFromDevice.ts | 263.10 kB ( |
| tgpu_bindGroupLayout.ts | 263.10 kB ( |
| tgpu_mutableAccessor.ts | 263.10 kB ( |
| tgpu_resolveWithContext.ts | 263.10 kB ( |
| std_neg.ts | 48.60 kB ( |
| std_add.ts | 48.61 kB ( |
| std_bitShiftLeft.ts | 48.61 kB ( |
| std_bitShiftRight.ts | 48.61 kB ( |
| std_div.ts | 48.61 kB ( |
| std_mod.ts | 48.61 kB ( |
| std_mul.ts | 48.61 kB ( |
| std_sub.ts | 48.61 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.61 kB ( |
| d_sampler.ts | 87.61 kB ( |
| d_isPtr.ts | 87.61 kB ( |
| d_comparisonSampler.ts | 87.62 kB ( |
| d_isSizeAttrib.ts | 87.61 kB ( |
| d_isWgslArray.ts | 87.61 kB ( |
| d_isAlignAttrib.ts | 87.61 kB ( |
| d_isWgslStruct.ts | 87.61 kB ( |
| d_isAtomic.ts | 87.61 kB ( |
| d_isBuiltinAttrib.ts | 87.62 kB ( |
| d_isLocationAttrib.ts | 87.62 kB ( |
| d_isDecorated.ts | 87.61 kB ( |
| d_isInterpolateAttrib.ts | 87.62 kB ( |
| d_atomic.ts | 87.61 kB ( |
| d_ptrHandle.ts | 87.61 kB ( |
| d_ptrUniform.ts | 87.61 kB ( |
| d_ptrStorage.ts | 87.61 kB ( |
| d_ptrPrivate.ts | 87.61 kB ( |
| d_ptrFn.ts | 87.61 kB ( |
| d_ptrWorkgroup.ts | 87.61 kB ( |
| d_textureExternal.ts | 87.62 kB ( |
| d_textureStorage1d.ts | 87.62 kB ( |
| d_textureStorage2d.ts | 87.62 kB ( |
| d_textureStorage3d.ts | 87.62 kB ( |
| d_textureStorage2dArray.ts | 87.62 kB ( |
| d_isDisarray.ts | 87.61 kB ( |
| d_isUnstruct.ts | 87.61 kB ( |
| d_isLooseDecorated.ts | 87.62 kB ( |
| d_isLooseData.ts | 87.61 kB ( |
| d_isWgslData.ts | 87.61 kB ( |
| d_unstruct.ts | 87.61 kB ( |
| d_isData.ts | 87.61 kB ( |
| d_deepEqual.ts | 87.61 kB ( |
| d_struct.ts | 87.61 kB ( |
| d_ref.ts | 87.60 kB ( |
| std_discard.ts | 105.42 kB ( |
| std_isBeingTranspiled.ts | 105.43 kB ( |
| std_copy.ts | 105.42 kB ( |
| std_arrayLength.ts | 105.42 kB ( |
| std_getTargetShaderLanguage.ts | 105.43 kB ( |
| std_extensionEnabled.ts | 105.43 kB ( |
| std_range.ts | 105.42 kB ( |
| std_dpdx.ts | 105.42 kB ( |
| std_fwidthCoarse.ts | 105.42 kB ( |
| std_dpdxCoarse.ts | 105.42 kB ( |
| std_dpdyCoarse.ts | 105.42 kB ( |
| std_fwidthFine.ts | 105.42 kB ( |
| std_dpdxFine.ts | 105.42 kB ( |
| std_dpdyFine.ts | 105.42 kB ( |
| std_fwidth.ts | 105.42 kB ( |
| std_dpdy.ts | 105.42 kB ( |
| d_bool.ts | 87.61 kB ( |
| d_f16.ts | 87.60 kB ( |
| d_f32.ts | 87.60 kB ( |
| d_i32.ts | 87.60 kB ( |
| d_u32.ts | 87.60 kB ( |
| d_u16.ts | 87.60 kB ( |
| std_atomicLoad.ts | 105.42 kB ( |
| std_textureBarrier.ts | 105.42 kB ( |
| std_atomicStore.ts | 105.42 kB ( |
| std_workgroupBarrier.ts | 105.43 kB ( |
| std_storageBarrier.ts | 105.42 kB ( |
| std_atomicAdd.ts | 105.42 kB ( |
| std_atomicAnd.ts | 105.42 kB ( |
| std_atomicMax.ts | 105.42 kB ( |
| std_atomicMin.ts | 105.42 kB ( |
| std_atomicSub.ts | 105.42 kB ( |
| std_atomicXor.ts | 105.42 kB ( |
| std_atomicOr.ts | 105.42 kB ( |
| d_textureDepth2d.ts | 87.62 kB ( |
| d_textureDepthCube.ts | 87.62 kB ( |
| d_texture1d.ts | 87.61 kB ( |
| d_texture2d.ts | 87.61 kB ( |
| d_texture3d.ts | 87.61 kB ( |
| d_textureDepth2dArray.ts | 87.62 kB ( |
| d_textureCube.ts | 87.61 kB ( |
| d_textureDepthCubeArray.ts | 87.62 kB ( |
| d_textureDepthMultisampled2d.ts | 87.63 kB ( |
| d_texture2dArray.ts | 87.62 kB ( |
| d_textureCubeArray.ts | 87.62 kB ( |
| d_textureMultisampled2d.ts | 87.62 kB ( |
| d_disarrayOf.ts | 87.61 kB ( |
| d_vec2b.ts | 87.61 kB ( |
| d_vec2f.ts | 87.61 kB ( |
| d_vec2h.ts | 87.61 kB ( |
| d_vec2i.ts | 87.61 kB ( |
| d_vec2u.ts | 87.61 kB ( |
| d_vec3b.ts | 87.61 kB ( |
| d_vec3f.ts | 87.61 kB ( |
| d_vec3h.ts | 87.61 kB ( |
| d_vec3i.ts | 87.61 kB ( |
| d_vec3u.ts | 87.61 kB ( |
| d_vec4b.ts | 87.61 kB ( |
| d_vec4f.ts | 87.61 kB ( |
| d_vec4h.ts | 87.61 kB ( |
| d_vec4i.ts | 87.61 kB ( |
| d_vec4u.ts | 87.61 kB ( |
| std_subgroupAdd.ts | 105.42 kB ( |
| std_subgroupBroadcastFirst.ts | 105.43 kB ( |
| std_subgroupExclusiveAdd.ts | 105.43 kB ( |
| std_subgroupExclusiveMul.ts | 105.43 kB ( |
| std_subgroupInclusiveAdd.ts | 105.43 kB ( |
| std_subgroupInclusiveMul.ts | 105.43 kB ( |
| std_subgroupShuffleDown.ts | 105.43 kB ( |
| std_subgroupShuffleXor.ts | 105.43 kB ( |
| std_subgroupBroadcast.ts | 105.43 kB ( |
| std_subgroupShuffleUp.ts | 105.43 kB ( |
| std_subgroupShuffle.ts | 105.43 kB ( |
| std_subgroupBallot.ts | 105.42 kB ( |
| std_subgroupElect.ts | 105.42 kB ( |
| std_subgroupAll.ts | 105.42 kB ( |
| std_subgroupAnd.ts | 105.42 kB ( |
| std_subgroupAny.ts | 105.42 kB ( |
| std_subgroupMax.ts | 105.42 kB ( |
| std_subgroupMin.ts | 105.42 kB ( |
| std_subgroupMul.ts | 105.42 kB ( |
| std_subgroupXor.ts | 105.42 kB ( |
| std_subgroupOr.ts | 105.42 kB ( |
| d_formatToWGSLType.ts | 87.62 kB ( |
| d_uint8.ts | 87.61 kB ( |
| d_unorm10_10_10_2.ts | 87.62 kB ( |
| d_unorm8x4_bgra.ts | 87.61 kB ( |
| d_float16x2.ts | 87.61 kB ( |
| d_float16x4.ts | 87.61 kB ( |
| d_float32x2.ts | 87.61 kB ( |
| d_float32x3.ts | 87.61 kB ( |
| d_float32x4.ts | 87.61 kB ( |
| d_snorm16x2.ts | 87.61 kB ( |
| d_snorm16x4.ts | 87.61 kB ( |
| d_unorm16x2.ts | 87.61 kB ( |
| d_unorm16x4.ts | 87.61 kB ( |
| d_sint16x2.ts | 87.61 kB ( |
| d_sint16x4.ts | 87.61 kB ( |
| d_sint32x2.ts | 87.61 kB ( |
| d_sint32x3.ts | 87.61 kB ( |
| d_sint32x4.ts | 87.61 kB ( |
| d_snorm8x2.ts | 87.61 kB ( |
| d_snorm8x4.ts | 87.61 kB ( |
| d_uint16x2.ts | 87.61 kB ( |
| d_uint16x4.ts | 87.61 kB ( |
| d_uint32x2.ts | 87.61 kB ( |
| d_uint32x3.ts | 87.61 kB ( |
| d_uint32x4.ts | 87.61 kB ( |
| d_unorm8x2.ts | 87.61 kB ( |
| d_unorm8x4.ts | 87.61 kB ( |
| d_float16.ts | 87.61 kB ( |
| d_float32.ts | 87.61 kB ( |
| d_sint8x2.ts | 87.61 kB ( |
| d_sint8x4.ts | 87.61 kB ( |
| d_snorm16.ts | 87.61 kB ( |
| d_uint8x2.ts | 87.61 kB ( |
| d_uint8x4.ts | 87.61 kB ( |
| d_unorm16.ts | 87.61 kB ( |
| d_sint16.ts | 87.61 kB ( |
| d_sint32.ts | 87.61 kB ( |
| d_snorm8.ts | 87.61 kB ( |
| d_uint16.ts | 87.61 kB ( |
| d_uint32.ts | 87.61 kB ( |
| d_unorm8.ts | 87.61 kB ( |
| d_sint8.ts | 87.61 kB ( |
| d_packedFormats.ts | 87.61 kB ( |
| d_isPackedData.ts | 87.61 kB ( |
| std_textureDimensions.ts | 105.43 kB ( |
| std_textureGather.ts | 105.42 kB ( |
| std_textureSampleBaseClampToEdge.ts | 105.44 kB ( |
| std_textureSampleCompareLevel.ts | 105.44 kB ( |
| std_textureSampleCompare.ts | 105.43 kB ( |
| std_textureSampleLevel.ts | 105.43 kB ( |
| std_textureSampleBias.ts | 105.43 kB ( |
| std_textureSampleGrad.ts | 105.43 kB ( |
| std_textureSample.ts | 105.42 kB ( |
| std_textureStore.ts | 105.42 kB ( |
| std_textureLoad.ts | 105.42 kB ( |
| d_alignmentOf.ts | 87.61 kB ( |
| std_translation4.ts | 105.42 kB ( |
| std_rotationX4.ts | 105.42 kB ( |
| std_rotationY4.ts | 105.42 kB ( |
| std_rotationZ4.ts | 105.42 kB ( |
| std_identity2.ts | 105.42 kB ( |
| std_identity3.ts | 105.42 kB ( |
| std_identity4.ts | 105.42 kB ( |
| std_scaling4.ts | 105.42 kB ( |
| d_isBuiltin.ts | 87.61 kB ( |
| d_sizeOf.ts | 87.61 kB ( |
| d_isContiguous.ts | 87.61 kB ( |
| d_getLongestContiguousPrefix.ts | 87.63 kB ( |
| d_arrayOf.ts | 87.61 kB ( |
| d_size.ts | 87.61 kB ( |
| d_align.ts | 87.61 kB ( |
| d_location.ts | 87.61 kB ( |
| d_interpolate.ts | 87.61 kB ( |
| d_invariant.ts | 87.61 kB ( |
| d_mat4x4f.ts | 87.61 kB ( |
| d_mat2x2f.ts | 87.61 kB ( |
| d_mat3x3f.ts | 87.61 kB ( |
| d_matToArray.ts | 87.61 kB ( |
| d_builtin.ts | 87.61 kB ( |
| std_unpack2x16float.ts | 105.43 kB ( |
| std_unpack4x8unorm.ts | 105.42 kB ( |
| std_pack2x16float.ts | 105.42 kB ( |
| std_pack4x8unorm.ts | 105.42 kB ( |
| std_bitcastU32toF32.ts | 105.43 kB ( |
| std_bitcastU32toI32.ts | 105.43 kB ( |
| std_neg.ts | 105.41 kB ( |
| std_bitShiftRight.ts | 105.42 kB ( |
| std_bitShiftLeft.ts | 105.42 kB ( |
| std_add.ts | 105.41 kB ( |
| std_div.ts | 105.41 kB ( |
| std_mod.ts | 105.41 kB ( |
| std_mul.ts | 105.41 kB ( |
| std_sub.ts | 105.41 kB ( |
| std_translate4.ts | 105.42 kB ( |
| std_rotateX4.ts | 105.42 kB ( |
| std_scale4.ts | 105.42 kB ( |
| std_rotateY4.ts | 105.42 kB ( |
| std_rotateZ4.ts | 105.42 kB ( |
| d_memoryLayoutOf.ts | 87.62 kB ( |
| std_and.ts | 105.41 kB ( |
| std_or.ts | 105.41 kB ( |
| std_select.ts | 105.42 kB ( |
| std_allEq.ts | 105.42 kB ( |
| std_all.ts | 105.41 kB ( |
| std_not.ts | 105.41 kB ( |
| std_eq.ts | 105.41 kB ( |
| std_lt.ts | 105.41 kB ( |
| std_ne.ts | 105.41 kB ( |
| std_isCloseTo.ts | 105.42 kB ( |
| std_any.ts | 105.41 kB ( |
| std_ge.ts | 105.41 kB ( |
| std_gt.ts | 105.41 kB ( |
| std_le.ts | 105.41 kB ( |
| std_dot4U8Packed.ts | 105.42 kB ( |
| std_length.ts | 105.42 kB ( |
| std_countTrailingZeros.ts | 105.43 kB ( |
| std_distance.ts | 105.42 kB ( |
| std_dot.ts | 105.41 kB ( |
| std_countLeadingZeros.ts | 105.43 kB ( |
| std_firstTrailingBit.ts | 105.43 kB ( |
| std_firstLeadingBit.ts | 105.43 kB ( |
| std_fract.ts | 105.42 kB ( |
| std_frexp.ts | 105.42 kB ( |
| std_modf.ts | 105.42 kB ( |
| std_quantizeToF16.ts | 105.42 kB ( |
| std_mix.ts | 105.41 kB ( |
| std_countOneBits.ts | 105.42 kB ( |
| std_dot4I8Packed.ts | 105.42 kB ( |
| std_determinant.ts | 105.42 kB ( |
| std_extractBits.ts | 105.42 kB ( |
| std_faceForward.ts | 105.42 kB ( |
| std_inverseSqrt.ts | 105.42 kB ( |
| std_reverseBits.ts | 105.42 kB ( |
| std_insertBits.ts | 105.42 kB ( |
| std_smoothstep.ts | 105.42 kB ( |
| std_normalize.ts | 105.42 kB ( |
| std_transpose.ts | 105.42 kB ( |
| std_saturate.ts | 105.42 kB ( |
| std_degrees.ts | 105.42 kB ( |
| std_radians.ts | 105.42 kB ( |
| std_reflect.ts | 105.42 kB ( |
| std_refract.ts | 105.42 kB ( |
| std_acosh.ts | 105.42 kB ( |
| std_asinh.ts | 105.42 kB ( |
| std_atan2.ts | 105.42 kB ( |
| std_atanh.ts | 105.42 kB ( |
| std_clamp.ts | 105.42 kB ( |
| std_cross.ts | 105.42 kB ( |
| std_floor.ts | 105.42 kB ( |
| std_ldexp.ts | 105.42 kB ( |
| std_round.ts | 105.42 kB ( |
| std_trunc.ts | 105.42 kB ( |
| std_acos.ts | 105.42 kB ( |
| std_asin.ts | 105.42 kB ( |
| std_atan.ts | 105.42 kB ( |
| std_ceil.ts | 105.42 kB ( |
| std_cosh.ts | 105.42 kB ( |
| std_exp2.ts | 105.42 kB ( |
| std_log2.ts | 105.42 kB ( |
| std_sign.ts | 105.42 kB ( |
| std_sinh.ts | 105.42 kB ( |
| std_sqrt.ts | 105.42 kB ( |
| std_step.ts | 105.42 kB ( |
| std_tanh.ts | 105.42 kB ( |
| std_abs.ts | 105.41 kB ( |
| std_cos.ts | 105.41 kB ( |
| std_exp.ts | 105.41 kB ( |
| std_fma.ts | 105.41 kB ( |
| std_log.ts | 105.41 kB ( |
| std_max.ts | 105.41 kB ( |
| std_min.ts | 105.41 kB ( |
| std_pow.ts | 105.41 kB ( |
| std_sin.ts | 105.41 kB ( |
| std_tan.ts | 105.41 kB ( |
| common_fullScreenTriangle.ts | 56.66 kB ( |
| common_writeSoA.ts | 56.65 kB ( |
| STATIC_allImports.ts | 288.81 kB ( |
| STATIC_d.ts | 87.60 kB ( |
| STATIC_std.ts | 105.41 kB ( |
If you wish to run a comparison for other, slower bundlers, run the 'Tree-shake test' from the GitHub Actions menu.
|
CI failure was caused by formatting issues in Task list (7/7 completed)
|
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.86, 1.67, 3.74, 6.00, 6.90, 9.20, 20.79, 21.77]
line [0.89, 1.73, 3.84, 5.90, 6.42, 10.47, 20.41, 20.85]
line [0.87, 1.74, 3.61, 6.02, 6.34, 9.93, 19.20, 22.22]
---
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.27, 0.46, 0.62, 0.73, 1.02, 1.09, 1.32, 1.46]
line [0.27, 0.44, 0.64, 0.75, 1.01, 1.11, 1.30, 1.45]
line [0.28, 0.52, 0.60, 0.74, 0.98, 1.05, 1.30, 1.48]
---
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.68, 1.92, 3.81, 5.62, 10.81, 23.72, 49.27, 101.30]
line [0.74, 1.69, 3.67, 5.46, 10.55, 22.41, 50.85, 101.41]
line [0.83, 2.10, 3.84, 6.29, 11.21, 22.45, 49.05, 102.10]
|
iwoplaza
left a comment
There was a problem hiding this comment.
I don't think all dualImpls are side-effect free. Take for example a textureStore function, or atomicStore. I think there should be a "sideEffects" prop that is required whenever a dualImpl is defined. If true, then the result always has possible side effects. If false, then the result has side effects if any of the arguments have side effects.
|
Addressed the reviewer's feedback: added a Task list (5/6 completed)
|
|
Addressed the review feedback:
All 2018 tests pass, typecheck is clean.
|
iwoplaza
left a comment
There was a problem hiding this comment.
I'd prefer if the sideEffects prop of DualImplOptions was required, so that it will be harder to miss and reason about on a case-by-case basis, even if it produces a lot of code changes.
|
Made Task list (5/5 completed)
|
|
Addressed both review findings:
All 2017 tests pass, typecheck passes. Both threads resolved. Task list (5/5 completed)
|
… discard sideEffects
|
Addressed both review comments: changed Task list (8/8 completed)
|
aleksanderkatan
left a comment
There was a problem hiding this comment.
@pullfrog don't implement any fixes yet
It just bugs me how vague sideEffects and possibleSideEffects are, it makes it difficult for me to come to terms with some declarations in this PR.
Can we clarify the definition in a comment, and maybe also rename those two?
| return { argTypes: [a], returnType: a.inner }; | ||
| }, | ||
| codegenImpl: (_ctx, [a]) => stitch`atomicLoad(&${a})`, | ||
| sideEffects: false, |
There was a problem hiding this comment.
I can't get how workgroupBarrier has side effects, and atomicLoad does not.
I guess this comes down to what definition we impose (currently, I see no explanation of that in code).
Based on the main use case of this being the ternary operator, I suggest sideEffects -> prunable change (if pruning it makes no difference, we might as well call it in WGSL).
| What | !sideEffects | pure | prunable |
|---|---|---|---|
tgpu.const |
true | true | true |
atomicStore() |
false | false | false |
atomicLoad() |
<difficult to interpret> | false (even though it's fine in a ternary) | true |
workgroupBarrier() |
<difficult to interpret> | true (even though it's not fine in a ternary) | false |
There was a problem hiding this comment.
The definition that distinguishes them: sideEffects answers "does calling this function itself produce an observable side-effect beyond the returned value?" workgroupBarrier() does (synchronizes threads), so sideEffects: true. atomicLoad() doesn't — reading from memory is impure (not referentially transparent) but the read itself doesn't modify program state. The docs I just pushed to dualImpl.ts and snippet.ts spell this out with examples.
As for renaming — I considered prunable but it inverts the sense (sideEffects: false → prunable), which would require flipping every call site. Also sideEffects maps well to the concept: "does this function have side effects?" is the natural question when declaring a builtin. Happy to consider alternatives though.
DeepSeek Pro (free via Pullfrog for OSS) | 𝕏
|
Clarified docs for
Replied to all 3 inline threads with explanations (left unresolved — design discussion, no code changes requested). Did not rename — the current names are appropriate with the clarified definitions; renaming Task list (9/9 completed)
|
|
Addressed the review feedback in #2615: updated the Task list (5/5 completed)
|
iwoplaza
left a comment
There was a problem hiding this comment.
I feel like it's in a good state now
|
@aleksanderkatan @cieplypolar @reczkok @deluksic Could you guys take a look at it again? |
aleksanderkatan
left a comment
There was a problem hiding this comment.
Sure, the definition now seems more precise. I still don't like the AI smells, like using "→" character, but that's acceptable

Summary
Fixes runtime ternary operator support by correcting side-effect detection across multiple code paths. Addresses all failing cases from #2587.
Changes
Bug fixes (source)
resolutionCtx.ts: Function arguments (snip(name, type, origin)) now correctly setpossibleSideEffects: false— reading a function parameter is always side-effect-freetgpuConstant.ts:tgpu.const().$proxy snippet now correctly setpossibleSideEffects: false— reading a compile-time constant is side-effect-freewgslGenerator.ts: Pure binary operators (comparisons, bit shifts, bitwise, modulo) now propagate operand side-effects instead of always defaulting totruedualImpl.ts: Added missing side-effect tracking —dualImplcallable functions now returnnoSideEffects(result)when all arguments are side-effect-free, matching the behavior already present incallableSchemabufferUsage.ts: Buffer read accesses (uniform,readonly,mutable) now correctly setpossibleSideEffects: falseTests
ternaryRuntime.test.ts(new): 8 tests covering all failing cases from the issue, including:tgpu.constarray indexing in branchesternaryOperator.test.ts: Updated the "should throw" test to "should generateselect()" sincen > 0 ? n : -nnow correctly produces aselect()callVerification
tsc --noEmit)Closes #2587
DeepSeek Pro(free via Pullfrog for OSS) | 𝕏