# Appendix I: Computing the maximum stack size for a function
The maximum stack size for a function is determined by modelling the stack operations of each
operation as described in the section 4.4.
Computing the maximum stack size of instructions that enclose sequences of instructions to form a
block (`block`, `if`, `else`, etc.) must additionally account for the following requirmements:
1. `if..else..end` encloses two distinct instruction sequences with potentially different stack
capacity requirements. The greater of the two must be considered the stack requirement of the
entire `if..else..end` instruction.
2. When modelling conditional branches, the greater stack size requirement must always be chosen.
3. After a stack-polymorphic instruction is executed, the maximum stack size for the enclosing
block is frozen and can no longer be affected by any of the instructions that follow.
## The reduction rule exception
Execution of an intermediate reduction of the aggregate instructions may require more stack space
than occuppied by strictly the input/output operands to the instruction. The implementations are
responsible for reserving sufficient red-zone stack space required by these aggregate instructions
as they are not modelled by the maximum stack size computation.